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实现的简单猜数字游戏
Apr 04 Python
Python多进程同步简单实现代码
Apr 27 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
python写程序统计词频的方法
Jul 29 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
python实现的汉诺塔算法示例
Oct 23 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
jupyter lab文件导出/下载方式
Apr 22 Python
Python如何转换字符串大小写
Jun 04 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
Jun 15 Python
Python文件操作及内置函数flush原理解析
Oct 13 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分页显示制作详细讲解
2006/12/05 PHP
php简单获取目录列表的方法
2015/03/24 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
python Django框架实现自定义表单提交
2016/03/25 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
计算机专业学生求职信分享
2013/12/15 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
师德师风演讲稿
2014/05/05 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
商超业务员岗位职责
2015/02/13 职场文书
python本地文件服务器实例教程
2021/05/02 Python
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫