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日期操作学习笔记
Oct 07 Python
Python查看多台服务器进程的脚本分享
Jun 11 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
Jun 30 Python
python编程线性回归代码示例
Dec 07 Python
Django后台获取前端post上传的文件方法
May 28 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
解决python opencv无法显示图片的问题
Oct 28 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
详解django中Template语言
Feb 22 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
python drf各类组件的用法和作用
Jan 12 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 无极分类(递归)实现代码
2010/01/05 PHP
php四种基础算法代码实例
2013/10/29 PHP
php获取文件内容最后一行示例
2014/01/09 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
python实现马丁策略的实例详解
2021/01/15 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
高校毕业生登记表自我鉴定
2013/11/03 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
机关单位动员会主持词
2014/03/20 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
先进典型发言材料
2014/12/30 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
值班管理制度范本
2015/08/06 职场文书
《最后一头战象》教学反思
2016/02/16 职场文书