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解析XML的几种常见方法的介绍
Apr 09 Python
深入理解python中的闭包和装饰器
Jun 12 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
python 二分查找和快速排序实例详解
Oct 13 Python
python3.4实现邮件发送功能
May 28 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
python求最大值最小值方法总结
Jun 25 Python
python线程中的同步问题及解决方法
Aug 29 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
浅析Python编写函数装饰器
2016/03/18 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python实现烟花小程序
2019/01/30 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
高一政治教学反思
2014/01/28 职场文书
企业宣传方案
2014/03/04 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
期中考试反思800字
2014/05/01 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
考试作弊检讨书
2014/10/21 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS