Python pygame-based aircraft combat game

A small aircraft combat game based on pygame is suitable for novices and cannot be run directly. You can only enter the current game directory on the command line and enter python game.py to run. I don't know why the
screenshots of the game are as follows, we use the yellow circle Represents the enemy aircraft,Insert picture description here

code show as below

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

Game material
Insert picture description here
Insert picture description here

Guess you like

Origin blog.csdn.net/weixin_51655931/article/details/109751266