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

171 阅读2分钟

基于pygame的飞机大作战小游戏,适合新手,不能直接运行,只能在命令行进入当前游戏目录,输入python game.py才能够运行,尚不知道是什么原因 游戏截图如下,我们用黄色的圆圈代表敌机,

想学 Python 爬虫,可以点旁边这个哦~ 🈲🈲🈲🈲 g.lgcoder.com/ad1/index.h… 🈲🈲🈲🈲

代码如下

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()

游戏素材

在这里插入图片描述

文章转载 来源:CSDN