python基于pygame实现飞机大作战小游戏


Posted in Python onNovember 19, 2020

基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知道是什么原因。

游戏截图如下,我们用黄色的圆圈代表敌机:

python基于pygame实现飞机大作战小游戏

代码如下

import pygame,sys,time,random,math

def init():
 pygame.init()
 size = width, height =600,600
 screen =pygame.display.set_mode(size)
 plx=270
 ply=528
 beijing =pygame.image.load("beijing.jpg")
 main_role =pygame.image.load("main_role.jpg")
 font=pygame.font.SysFont("arial",60)
 
 return screen,[plx,ply],main_role,beijing,font
 
def mainloop(screen,pl,main_role,beijing,shots,ms,ecs): #每刷新一次,调用一次
 for event in pygame.event.get(): 
 if event.type == pygame.QUIT:
 pygame.quit()
 elif event.type ==pygame.KEYDOWN:
 if event.key ==pygame.K_LEFT:
 ms=[0,pl]
 
 #move(0,pl)
 elif event.key ==pygame.K_RIGHT:
 ms=[1,pl]
 #move(1,pl)
 elif event.key == pygame.K_UP:
 ms=[2,pl]
 #move(2,pl)
 elif event.key ==pygame.K_DOWN:
 ms=[3,pl]
 #move(3,pl)
 
 elif event.key==pygame.K_SPACE:
 ecope(pl,ecs)
 elif event.type ==pygame.KEYUP:
 ms=[-1,-1]
 screen.blit(beijing,(0,0))
 for i in range(len(shots)):
 pygame.draw.circle(screen,(255,255,0),shots[i],25,5)
 for i in range(len(ecs)):
 pygame.draw.circle(screen,(255,0,255),ecs[i],5,5)
 screen.blit(main_role,(pl[0],pl[1]))
 
 return ms

def ecope(pl,ecs):
 ecs.append([pl[0]+30,pl[1]])

def move(key,pl):
 if key==0:pl[0]=pl[0]-10
 elif key==1:pl[0]=pl[0]+10
 elif key==2:pl[1]=pl[1]-10
 elif key==3:pl[1]=pl[1]+10
 
 if pl[0]<0:pl[0]=0
 if pl[0]>540:pl[0]=540
 if pl[1]<0:pl[1]=0
 if pl[1]>528:pl[1]=528
 
def update_shot(shots,m,ms,ecs):
 if m==60:
 x=random.randint(0,59)*10
 y=0
 shots.append([x,y])
 t=[]
 t2=[]
 if m%2==0:
 for i in range(len(ecs)):
 ecs[i][1]=ecs[i][1]-6
 if ecs[i][1]<0:
 t2.append(i)
 for i in range(len(t2)):
 
 ecs.pop(t2[i])
 
 
 
 for i in range(len(shots)):
 shots[i][1]=shots[i][1]+5
 if shots[i][1]>600:
 t.append(i)
 for i in range(len(t)):
 shots.pop(t[i])
 
 
 
 if ms!=[-1,-1]:
 move(ms[0],ms[1])
 
 
def block_detect(pl,shots):
 #pl[x,y]
 '''
 shots
 [
 [sx0,sy0],
 [sx1,sy1],
 .......
 
 ]
 '''
 for i in range(len(shots)):
 nx,ny=shots[i][0],shots[i][1]
 x,y=pl[0]+30,pl[1]+36
 s=math.sqrt((nx-x)**2+(ny-y)**2)
 if s<55:
 return True
 return False

def attack_detect(ecs,shots,score):
 h=[]
 h1=[]
 h2=[]
 for i in range(len(ecs)):
 for j in range(len(shots)):
 lx,ly=ecs[i][0],ecs[i][1]
 cx,cy=shots[j][0],shots[j][1]
 d=math.sqrt((lx-cx)**2+(ly-cy)**2)
 if d<30:
 h.append([i,j])
 
 for i in range(len(h)):
 h1.append(h[i][0])
 h2.append(h[i][1])
 h1=list(set(h1))
 h2=list(set(h2))
 for i in range(len(h1)):
 ecs.pop(h1[i])
 for i in range(len(h2)):
 shots.pop(h2[i])
 return score+len(h)

 
 
if __name__=="__main__":
 screen,pl,main_role,beijing,font=init()
 shots=[]
 ecs=[]
 score=0
 temp=time.time()
 m=0
 ms=[-1,-1]
 while True :

 text=font.render(str(score),True,(255,255,255))
 rect=text.get_rect()
 rect.center=(250,30)
 
 if (time.time()-temp)>0.03:
 
 m=m+1 
 temp=time.time()
 update_shot(shots,m,ms,ecs)
 if m==60:
 m=0
 
 ms=mainloop(screen,pl,main_role,beijing,shots,ms,ecs)
 screen.blit(text,rect)
 score=attack_detect(ecs,shots,score)
 pygame.display.update()
 
 if block_detect(pl,shots):
 pygame.quit()

游戏素材

python基于pygame实现飞机大作战小游戏

python基于pygame实现飞机大作战小游戏

更多有趣的python游戏请点击专题: 《python小游戏》学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现将文本转换成语音的方法
May 28 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
numpy中矩阵合并的实例
Jun 15 Python
Django添加feeds功能的示例
Aug 07 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
python 实现绘制整齐的表格
Nov 18 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
用OpenCV进行年龄和性别检测的实现示例
Jan 29 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 #Python
python3 os进行嵌套操作的实例讲解
Nov 19 #Python
如何创建一个Flask项目并进行简单配置
Nov 18 #Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 #Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 #Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 #Python
python实现图片,视频人脸识别(dlib版)
Nov 18 #Python
You might like
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
2016/07/07 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
python机器学习之神经网络实现
2018/10/13 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
详解python pandas 分组统计的方法
2019/07/30 Python
python科学计算之narray对象用法
2019/11/25 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
会计专业推荐信
2013/10/29 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫