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将html转成PDF的实现代码(包含中文)
Mar 04 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
Python求解任意闭区间的所有素数
Jun 10 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
PyCharm第一次安装及使用教程
Jan 08 Python
Python 简单计算要求形状面积的实例
Jan 18 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 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
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
python中argparse模块用法实例详解
2015/06/03 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
教师专业自荐书范文
2014/02/10 职场文书
教师网络培训感言
2014/03/09 职场文书
揭牌仪式主持词
2014/03/19 职场文书
民族精神月活动总结
2014/08/28 职场文书
班级活动总结格式
2014/08/30 职场文书
2014年德育工作总结
2014/11/20 职场文书
2014年个人总结范文
2015/03/09 职场文书
2015元旦感言
2015/12/09 职场文书
python基础详解之if循环语句
2021/04/24 Python
Python实现智慧校园自动评教全新版
2021/06/18 Python
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android