好友
阅读权限30
听众
最后登录1970-1-1
|
用Python写了个飞机打怪兽的小游戏。
想实现一个新功能:分数达到10分以后,出现一个新的怪兽。
我尝试过几种方法都没有作用,这里有源代码,可以帮我看看吗? 谢谢啦!
import pygame
import random
import math
pygame.init()#pygame初始化
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption('打呀打呀打飞机')
icon = pygame.image.load('ufo.png')#左上角图标
pygame.display.set_icon(icon)
bgpng = pygame.image.load('bg1.png')#背景图片
player = pygame.image.load('player.png')#飞机图片
pygame.mixer.music.load('bg.wav')#背景音乐
pygame.mixer.music.play(-1)#循环播放
boom = pygame.mixer.Sound('exp.wav')#击中音乐
score = 0#分数
font = pygame.font.SysFont('思源黑体',28)
def show_score():#得分函数
text = f"分数:{score}"
score_rander = font.render(text,True,(255,255,255))
screen.blit(score_rander,(1,1))
class Enemy():#敌人类
def __init__(self,enemyimg):
self.enemyimg = pygame.image.load(enemyimg)
self.x = random.randint(200,600)
self.y = random.randint(50,250)
self.step = random.randint(1,1) #敌人移动的速度
def reset(self):#敌人被击中后,重新刷新的坐标
self.x = random.randint(200,600)
self.y = random.randint(50, 200)
num_of_enemies = 6
enemies = []#保存所有的敌人
for i in range(num_of_enemies):
enemies.append(Enemy('enemy.png'))
class Bullet():#子弹类
def __init__(self):
self.bulletimg = pygame.image.load('bullet.png')
self.x = playerx + 16
self.y = playery +10
self.step = 2 #子弹移动的速度
def hit(self):
for i in enemies:
global score
if(distance(self.x,self.y,i.x,i.y) < 30):
# 射中后的操作
bullets.remove(self)
score +=1
boom.play()
i.reset()
bullets = []#保存现有的子弹
def show_bullets():#子弹函数
for arr in bullets:
screen.blit(arr.bulletimg,(arr.x,arr.y))
arr.hit()#判断是否击中了敌人
arr.y -= arr.step
if arr.y < 0:#判断子弹是否出了界面,如果出了就移除掉
bullets.remove(arr)
def distance(bx,by,ex,ey):#击中敌人函数 (击中判断 欧几里得距离)
a = bx -ex
b = by - ey
return math.sqrt(a*a + b*b)
is_over = False
over_font = pygame.font.SysFont('思源黑体',72)
def check_is_over():#结束函数
if is_over:
text = f"游戏结束"
score_rander = over_font.render(text, True, (255, 0, 0))
screen.blit(score_rander, (250, 100))
def show_enemy():#敌人函数 显示敌人,并且实现敌人的移动和下沉
global is_over
for arr in enemies:
screen.blit(arr.enemyimg,(arr.x,arr.y))
arr.x += arr.step
if(arr.x>736 or arr.x<0):
arr.step *= -1
arr.y +=40
if arr.y>450 :#当敌人下落到一定的坐标,游戏结束
is_over = True
enemies.clear()
playerx = 355
playery = 500
playerStep = 0
def move_player():#飞机函数
global playerx
screen.blit(player, (playerx, playery))
playerx += playerStep
if playerx >736:#防止飞机出界
playerx=736
if playerx <0:
playerx =0
running = True
while running:#主程序
screen.blit(bgpng,(0,0))
show_score()#显示分数
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 通过键盘事件控制飞机的移动
if event.type == pygame.KEYDOWN:#按下就移动
if event.key == pygame.K_RIGHT:#按右键飞机向右移动2个像素
playerStep = 2
elif event.key == pygame.K_LEFT:
playerStep = -2
elif event.key == pygame.K_SPACE:
bullets.append(Bullet())#按空格 发射子弹
if event.type == pygame.KEYUP:#抬起来就不动
playerStep = 0
move_player()
show_enemy()
show_bullets()
check_is_over()
pygame.display.update() |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|