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 相关文章推荐
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
简单谈谈Python中的json与pickle
Jul 19 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
django 实现电子支付功能的示例代码
Jul 25 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
python中eval与int的区别浅析
Aug 11 Python
python+mysql实现个人论文管理系统
Oct 25 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
sklearn的predict_proba使用说明
Jun 28 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
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
Python实现的购物车功能示例
2018/02/11 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python之生成多层json结构的实现
2020/02/27 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
django修改models重建数据库的操作
2020/03/31 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
C++是不是类型安全的
2014/02/18 面试题
大学生职业规划论文
2014/01/11 职场文书
学习决心书
2014/03/11 职场文书
投资意向书范本
2014/04/01 职场文书
工作目标责任书
2014/07/23 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
三峡导游词
2015/01/31 职场文书
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript