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()
发布了5 篇原创文章 · 获赞 5 · 访问量 141

猜你喜欢

转载自blog.csdn.net/SMZ1126/article/details/105290635