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对两个有序列表进行合并和排序的例子
Jun 13 Python
Python基于回溯法子集树模板实现图的遍历功能示例
Sep 05 Python
让代码变得更易维护的7个Python库
Oct 09 Python
对python 读取线的shp文件实例详解
Dec 22 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
Python 实现微信防撤回功能
Apr 29 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
Django+RestFramework API接口及接口文档并返回json数据操作
Jul 12 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
python实现无边框进度条的实例代码
Dec 30 Python
python实现PolynomialFeatures多项式的方法
Jan 06 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
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript函数详解
2015/02/27 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
jQuery中使用validate插件校验表单功能
2019/05/24 jQuery
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
python局部赋值的规则
2013/03/07 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
python如何保存文本文件
2020/06/07 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
绿色城市实施方案
2014/03/19 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
学校搬迁方案
2014/06/15 职场文书
激励口号大全
2014/06/17 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
python3读取文件指定行的三种方法
2021/05/24 Python
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android