python基于pygame实现飞机大作战小游戏
作者:weixin_51655931 发布时间:2021-04-27 07:59:17
标签:python,pygame,飞机
基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知道是什么原因。
游戏截图如下,我们用黄色的圆圈代表敌机:
代码如下
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游戏请点击专题: 《python小游戏》学习
来源:https://blog.csdn.net/weixin_51655931/article/details/109751266


猜你喜欢
- 1.下载PyQt官方网站:http://www.riverbankcomputing.com/software/pyqt/download5
- 使用实例:object.CreateTextFile(filename[, overwrite[, unicode]])其中object是必
- 5,闭包 闭包意味着内层的函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止。 让我们先来看一个闭包的例子。 <scr
- 在MySQL数据库中导出整个数据库:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldu
- root账户为MySQL的超级管理员用户,拥有MySQL提供的所有权限。我们登录了root账户可以重置其它创建的所有用户的密码,那么root
- python 判断是否为正小数和正整数的实例实现代码:def check_float(string): #支付时,输入的金额可能
- 从最简单的Web浏览器的登录界面开始,登录界面如下:进行Web页面自动化测试,对页面上的元素进行定位和操作是核心。而操作又是以定位为前提的,
- 就算我们每天在叫嚷着创新经济,设计救国,我们在生活中也无处不在的看到各种设计庸俗、制作粗劣的海报、店面、户外广告、大胸美女和肌肉 * 交相辉映
- 本文详细描述使用Django 的ORM框架操作PostgreSQL数据库删除不生效问题的定位过程及解决方案,并总结使用ORM框架操作数据库不
- 学习前言我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。Py
- template 概述最近在做脚手架相关的内容, 研究了一下 Go 的 text/template 包, 接下来跟大家分享下 templat
- 获取带有中文参数的url内容对于中文的参数如果不进行编码的话,python的urllib2直接处理会报错,我们可以先将中文转换成utf- 8
- 忙碌了一年,今天终于放假了。原本打算好好休息一下,没成想只过了半天就觉得有点无聊。看家人和朋友们都在忙年,那我就用OpenGL导演一场烟花盛
- 在JavaScript开发中,被人问到:null与undefined到底有啥区别?一时间不好回答,特别是undefined,因为这涉及到un
- pandas DataFrame是二维的,所以,它既有列索引,又有行索引上一篇里只介绍了列索引:import pandas as pddf
- 前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器。最早看到相关的报道是
- 最近在写的一个django小项目需要实现用户上传图片的功能,使用到了七牛云存储,特此记录下来。这里我使用的七牛python SDK 版本是7
- 题目描述这篇博文是数字图像处理的大作业. 题目描述:给定40张不同风格的纹理图片,大小为512*512,要求将每张图片分为大小相同的9块,利
- 1 实验标准因为训练使用的框架是Pytorch,因此读取的实验标准如下:1、读取分辨率都为1920x1080的5张图片
- 1、 自定义菜单adminx.pyclass GlobalSetting(object): site_title = u'xxx后台