Java_S 发表于 2020-3-9 16:29

大佬帮帮小弟,这里有个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()

天真Aro 发表于 2020-3-9 16:42

游戏我不会         

井右寺 发表于 2020-3-9 16:49

在 hit 里面写判断逻辑呢
当 score 大于 10的时候,new 一个Enemy,加入到数组中去
没用过 pygame,不过答题逻辑应该是这个样子

Java_S 发表于 2020-3-9 16:51

我找到了解决方法, 在子弹类里面中的 hit函数中,在添加一个方法    但是,新的问题又来了,以前的怪兽不见了

Java_S 发表于 2020-3-9 17:34

井右寺 发表于 2020-3-9 16:49
在 hit 里面写判断逻辑呢
当 score 大于 10的时候,new 一个Enemy,加入到数组中去
没用过 pygame,不过 ...

”new 一个Enem“,不好意思
没有懂什么意思,可以详细解释一下嘛

ll996075dd 发表于 2020-3-9 19:28

我的第一个python,飞机大战

井右寺 发表于 2020-3-10 08:57

Java_S 发表于 2020-3-9 17:34
”new 一个Enem“,不好意思
没有懂什么意思,可以详细解释一下嘛

enemies.append(Enemy('enemy.png'))

新建一个enemy实例,并加入精灵池。

ymhld 发表于 2020-3-10 10:07

新加一个怪物类吧
页: [1]
查看完整版本: 大佬帮帮小弟,这里有个Python的问题