python基于pygame实现飞机大作战小游戏

作者:weixin_51655931 时间:2021-04-27 07:59:17 

基于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小游戏》学习

来源:https://blog.csdn.net/weixin_51655931/article/details/109751266

标签:python,pygame,飞机
0
投稿

猜你喜欢

  • FCKeditor编辑器基本配置优化修改使用方法

    2008-12-31 13:32:00
  • python列表推导式入门学习解析

    2022-04-25 14:28:00
  • pycharm最新免费激活码至2099年(21.3.18亲测可用)

    2023-10-02 09:53:20
  • 在tensorflow中设置使用某一块GPU、多GPU、CPU的操作

    2023-07-22 11:37:28
  • Django模板继承与模板的导入实例详解

    2023-04-03 14:41:28
  • python循环定时中断执行某一段程序的实例

    2023-10-09 22:11:20
  • 通过自学python能找到工作吗

    2021-07-24 04:26:33
  • Python实现矩阵转置的方法分析

    2023-07-03 21:56:46
  • Dreamweaver制作网页11种技巧详解

    2007-11-05 14:00:00
  • SQL Server 监控磁盘IO错误,msdb.dbo.suspect_pages

    2024-01-22 09:26:44
  • php模板引擎技术简单实现

    2023-11-14 13:28:37
  • pycharm 无法加载文件activate.ps1的原因分析及解决方法

    2022-07-11 01:00:49
  • Python安装官方whl包和tar.gz包的方法(推荐)

    2022-04-27 05:37:47
  • Python Sleep休眠函数使用简单实例

    2021-12-20 17:05:50
  • pygame库实现俄罗斯方块小游戏

    2022-09-11 10:43:37
  • javascript实现des解密加密全过程

    2023-07-02 05:18:50
  • 在Python运行时动态查看进程内部信息的方法

    2021-06-09 09:15:40
  • Python中包的用法及安装

    2023-08-02 21:42:29
  • Python如何实现感知器的逻辑电路

    2021-01-09 00:41:38
  • ubuntu下磁盘空间不足导致mysql无法启动的解决方法

    2024-01-26 00:56:44
  • asp之家 网络编程 m.aspxhome.com