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 字符串格式化代码
Mar 17 Python
Python实现的Kmeans++算法实例
Apr 26 Python
简介Python中用于处理字符串的center()方法
May 18 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
利用python循环创建多个文件的方法
Oct 25 Python
python 输出所有大小写字母的方法
Jan 02 Python
详解小白之KMP算法及python实现
Apr 04 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
python动态进度条的实现代码
Jul 03 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
Python 如何批量更新已安装的库
May 26 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
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
python中字符串变二维数组的实例讲解
2018/04/03 Python
python 字符串只保留汉字的方法
2018/11/16 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
某公司部分笔试题
2013/11/05 面试题
JSP&Servlet技术面试题
2015/05/21 面试题
自荐信格式范文
2013/10/07 职场文书
土木工程应届生求职信
2013/10/31 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年收银员个人工作总结
2015/04/01 职场文书
个人催款函范文
2015/06/23 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
创业计划书之书店
2019/09/10 职场文书
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python