pygame飛機大戰

				飛機大戰

這是我python的pygame庫編的一個小遊戲,只要一發子彈不打中兩架敵機就沒有bug。打開時請使用cmd或dos等終端打開。
以下是源代碼:
import pygame
import random
import math

#初始化界面
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode((800,600))
pygame.display.set_caption(‘飛機大戰’)
icon=pygame.image.load(‘ufo.jpg’)
pygame.display.set_icon(icon)
bgImg=pygame.image.load(‘bg.jpg’)
playerImg=pygame.image.load(‘player.png’)
playerX=400
playerY=500
playerStep=0
score=0
font=pygame.font.Font(‘freesansbold.ttf’,32)
def show_score():
text=f’score:{score}’
score_render=font.render(text,True,(0,255,0))
screen.blit(score_render,(10,10))
#遊戲結束
is_over=False
over_font=pygame.font.Font(‘freesansbold.ttf’,256)
def check_is_over():
if is_over:
text=‘Game Over’
render=font.render(text,True,(255,0,0))
screen.blit(render,(300,250))

#添加背景音效
pygame.mixer.music.load(‘bg.mp3’)
pygame.mixer.music.play(-1)
#添加射中音效,必須用wav格式
bao_sound=pygame.mixer.Sound(‘1.wav’)

#添加敵人
number_of_enemies=random.randint(4,10)
class Enemy():
def init(self):
self.img=pygame.image.load(‘enemy.png’)
self.x=random.randint(200,600)
self.y=random.randint(50,250)
self.step=random.randint(1,4)
def reset(self):
self.x=random.randint(200,600)
self.y=random.randint(50,200)
enemies=[]
for i in range(number_of_enemies):
enemies.append(Enemy())
#計算子彈和敵人的距離
def distance(bx,by,ex,ey):
a=bx-ex
b=by-ey
return math.sqrt(aa+bb)#開根號

#子彈類
class Bullet():
def init(self):
self.img=pygame.image.load(‘bullet.png’)
self.x=playerX+26
self.y=playerY-10
self.step=10
#擊中
def hit(self):
global score
for e in enemies:
if (distance(self.x,self.y,e.x,e.y)<30):
bao_sound.play()
bullets.remove(self)
e.reset()
score+=1
bullets=[]
#顯示子彈並移動
def show_bullet():
for b in bullets:
screen.blit(b.img,(b.x,b.y))
b.hit()#是否擊中目標
b.y-=b.step
#子彈如果移出界面就刪除
if b.y<0:
bullets.remove(b)

enemyStep=1#敵人移動的速度
def show_enemy():
global is_over
for e in enemies:
screen.blit(e.img,(e.x,e.y))
e.x+=e.step
if (e.x>736 or e.x<0):
e.step*=-1
e.y+=20
if e.y >450:
is_over = True
enemies.clear()

def move_Player():
global playerX
playerX+=playerStep
#防止飛機出界
if playerX>736:
playerX=736
if playerX<0:
playerX=0

#遊戲主循環
running=True
while running:
screen.blit(bgImg,(0,0))
show_score()#顯示分數
for event in pygame.event.get():
if event.typepygame.QUIT:
running=False
#通過鍵盤控制飛機移動
if event.type
pygame.KEYDOWN:#按下就移動
if event.keypygame.K_RIGHT:
playerStep=3
elif event.key
pygame.K_LEFT:
playerStep=-3
elif event.key==pygame.K_SPACE:
#創建一顆子彈
bullets.append(Bullet())

    if event.type==pygame.KEYUP:#擡起來就不動   
        playerStep=0

screen.blit(playerImg,(playerX,playerY))
move_Player()#玩家移動
show_enemy()#顯示敵人
show_bullet()#顯示子彈
check_is_over()#顯示遊戲結束

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