大佬帮帮小弟,这里有个Python的问题
用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() 游戏我不会 在 hit 里面写判断逻辑呢
当 score 大于 10的时候,new 一个Enemy,加入到数组中去
没用过 pygame,不过答题逻辑应该是这个样子 我找到了解决方法, 在子弹类里面中的 hit函数中,在添加一个方法 但是,新的问题又来了,以前的怪兽不见了 井右寺 发表于 2020-3-9 16:49
在 hit 里面写判断逻辑呢
当 score 大于 10的时候,new 一个Enemy,加入到数组中去
没用过 pygame,不过 ...
”new 一个Enem“,不好意思
没有懂什么意思,可以详细解释一下嘛 我的第一个python,飞机大战 Java_S 发表于 2020-3-9 17:34
”new 一个Enem“,不好意思
没有懂什么意思,可以详细解释一下嘛
enemies.append(Enemy('enemy.png'))
新建一个enemy实例,并加入精灵池。 新加一个怪物类吧
页:
[1]