这个游戏的效果是可以射出子弹打飞机并能加分数,分数加到70的时候就结束游戏(赢了)。
Python源代码如下:
import pygame
import random
import math
pygame.init()
# 1.初始化界面
screen = pygame.display.set_mode((597,648))
pygame.display.set_caption('我打敌机')
icon = pygame.image.load('img_1.png')
pygame.display.set_icon(icon)
xing_image = pygame.image.load('星空.png')
pygame.mixer.music.load('beijing.mp3')
pygame.mixer.music.play(-1)
# 我的可爱音效
bao_sound = pygame.mixer.Sound('ff.wav')
# 3.飞机
player_image = pygame.image.load('玩家.png')
player_image = pygame.transform.scale(player_image,(55,86))
player_x = 300
player_y = 500
player_step = 0
score = 0
font = pygame.font.Font('freesansbold.ttf',32)
#font = pygame.font.SysFont('simsunnsimsun',32)
def show_score():
text = f"Score:{score}"
score_render = font.render(text,True,(0,255,0))
screen.blit(score_render,(200,250))
is_over = False
over_font = pygame.font.Font('freesansbold.ttf',64)
def check_is_over():
if is_over:
text = "yes yes yes!"
render = font.render(text,True,(255,0,0))
screen.blit(render,(200,200))
# 4.添加敌人
number_of_enemies = 10
class Enemy():
def __init__(self):
self.image = pygame.image.load('敌人.png')
self.image = pygame.transform.scale(self.image,(55,86))
self.x = random.randint(200,600)
self.y = random.randint(50,200)
self.step = random.randint(1,2)
def reset(self):
self.x = random.randint(50,300)
self.y = random.randint(10,150)
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(a * a + b * b) # 开根号
class Bullet():
def __init__(self):
self.image = pygame.image.load('子弹.png')
self.image = pygame.transform.scale(self.image,(20,20))
self.x = player_x + 16
self.y = player_y + 10
self.step = 8
def hit(self):
for e in enemies:
global score
if (distance(self.x,self.y,e.x,e.y) < 30):
bao_sound.play()
try:
bullet.remove(self)
except:
print("dd")
e.reset()
score += 1
print(score)
bullet = []
def show_bullet():
for b in bullet:
screen.blit(b.image,(b.x,b.y))
b.hit()
b.y -= b.step
if b.y < 0:
bullet.remove(b)
def show_enemy():
global enemy_x,enemy_step,enemy_y,enemy_image,is_over
for e in enemies:
screen.blit(e.image,(e.x,e.y))
e.x += e.step
if (e.x > 450 or e.x < 0):
e.step *= -1
e.y += 140
if e.y > 900000:
is_over = True
enemies.clear()
if score == 70:
is_over = True
enemies.clear()
def move_player_image():
global player_x
player_x += player_step
if player_x > 450:
player_x = 450
if player_x < 0:
player_x = 0
def process_events():
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
player_step = 5
elif event.key == pygame.K_LEFT:
player_step = -5
if event.type == pygame.KEYUP:
player_step = 0
run = True
# 2.游戏主循环
while run:
screen.blit(xing_image,(0,0))
show_score()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
player_step = 5
elif event.key == pygame.K_LEFT:
player_step = -5
elif event.key == pygame.K_SPACE:
bullet.append(Bullet())
if event.type == pygame.KEYUP:
player_step = 0
screen.blit(player_image,(player_x,player_y))
move_player_image() # 移动玩家
show_enemy()
show_bullet()
check_is_over()
pygame.display.update()