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中类的一些方法分析
Sep 25 Python
python使用7z解压apk包的方法
Apr 18 Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 Python
Python smallseg分词用法实例分析
May 28 Python
Python使用turtule画五角星的方法
Jul 09 Python
python提取字典key列表的方法
Jul 11 Python
Python中import机制详解
Nov 14 Python
Django 内置权限扩展案例详解
Mar 04 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python实现微信自动回复机器人功能
Jul 11 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
python里的单引号和双引号的有什么作用
Jun 17 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
长波知识介绍
2021/03/01 无线电
php 获取SWF动画截图示例代码
2014/02/10 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
Python递归遍历列表及输出的实现方法
2015/05/19 Python
python处理xml文件的方法小结
2017/05/02 Python
python编写分类决策树的代码
2017/12/21 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
护理专业毕业生自我鉴定
2013/10/08 职场文书
中医专业应届生求职信
2013/11/17 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
演讲稿开场白台词
2014/08/25 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电