【四二學堂】基於python+pygame的太空阻擊遊戲(python版帶視頻)

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章