csdn課程視頻地址:https://edu.csdn.net/course/detail/28487
import pygame
from pygame.locals import*
from sys import exit
import random
import math
screen_width,screen_height=480,700
screen=pygame.display.set_mode((screen_width,screen_height))
background=pygame.image.load("resources/images/background2.png")
pygame.display.set_caption("雷雷的太空大戰")
pygame.init()
running=1
flyingsaucers=[]
enemy=pygame.image.load("resources/images/flyingsaucer.png")
b=0
bullet=pygame.image.load("resources/images/bullet1.png")
player=pygame.image.load("resources/images/hero1.png")
positionPlayer=[100,400]
positionBullet=[positionPlayer[0]+50,positionPlayer[1]+40]
bullets=[]
keys=[False,False,False,False]
position=[]
pygame.mixer.music.load("resources/audio/moonlight.wav")
pygame.mixer.music.play(-1,0.0)
pygame.mixer.music.set_volume(0.25)
score=0
while 1:
screen.blit(background,(0,0))
#screen.blit(player,positionPlayer)
for event in pygame.event.get():
if event.type==pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
if event.type==pygame.KEYUP:
if event.key==K_w:
keys[0]=False
elif event.key==K_a:
keys[1]=False
elif event.key==K_s:
keys[2]=False
elif event.key==K_d:
keys[3]=False
if event.type==pygame.QUIT:
pygame.quit()
exit()
if event.type==pygame.MOUSEBUTTONDOWN:
position=pygame.mouse.get_pos()
angle=math.atan2(position[1]-(positionPlayer[1]+50),position[0]-(positionPlayer[0]+40))
bullets.append([angle,positionPlayer[0]+40,positionPlayer[1]+50])
# bullets.append([150,440])
if keys[0]:
positionPlayer[1]-=5
if positionPlayer[1]<10:
positionPlayer[1]=10
elif keys[1]:
positionPlayer[0]-=5
if positionPlayer[0]<10:
positionPlayer[0]=10
elif keys[2]:
positionPlayer[1]+=5
if positionPlayer[1]>=600:
positionPlayer[1]=600
if keys[3]:
positionPlayer[0]+=5
if positionPlayer[0]>=380:
positionPlayer[1]=380
#旋轉飛機
position=pygame.mouse.get_pos()
angle=math.atan2(position[1]-(positionPlayer[1]+50),position[0]-(positionPlayer[0]+40))
playerrot=pygame.transform.rotate(player,360-angle*57.29)
screen.blit(playerrot,positionPlayer)
#射出子彈
for bulletx in bullets:
velx=math.cos(bulletx[0])*20
vely=math.sin(bulletx[0])*20
bulletx[1]+=velx
bulletx[2]+=vely
index=0
if bulletx[1]<0 or bulletx[1]>480 or bulletx[2]<0 or bulletx[2]>700:
bullets.pop(index)
index+=1
bulletrot=pygame.transform.rotate(bullet,360-bulletx[0]*57.29)
screen.blit(bulletrot,(bulletx[1],bulletx[2]))
'''
bulletx[0]+=5
screen.blit(bullet,(bulletx[0],bulletx[1]))
'''
'''
for event in pygame.event.get():
if event.type==pygame.MOUSEBUTTONDOWN:
bullets.append([150,440])
'''
if b<5:
flyingsaucers.append([random.randint(0,400),random.randint(20,100)])
b+=1
#消滅飛碟
index=0
for flyingsaucer in flyingsaucers:
if flyingsaucer[1]<640:
flyingsaucer[1]+=0.5
screen.blit(enemy,flyingsaucer)
enemyrect=pygame.Rect(enemy.get_rect())
enemyrect.left=flyingsaucer[0]
enemyrect.top=flyingsaucer[1]
indexbull=0
for bulletx in bullets:
bulletrot=pygame.transform.rotate(bullet,360-bulletx[0]*57.29)
bulletrect=pygame.Rect(bulletrot.get_rect())
bulletrect.left=bulletx[1]
bulletrect.top=bulletx[2]
if enemyrect.colliderect(bulletrect):
print("打中飛碟")
bullets.pop(indexbull)
flyingsaucers.pop(index)
score+=100
if(len(flyingsaucers)==0):
b=0#重新生成飛碟
indexbull+=1
index+=1
font1=pygame.font.SysFont('simsunnsimsun',16,True)
surface1=font1.render('當前得分:'+str(score),True,[255,0,0])
screen.blit(surface1,[20,20])
pygame.display.update()
'''
for event in pygame.event.get():
if event.type==KEYDOWN and event.key==K_ESCAPE:
pygame.display.quit()
if event.type==pygame.QUIT:
pygame.quit()
exit()
'''