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,
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