吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1070|回复: 7
收起左侧

[求助] 大佬帮帮小弟,这里有个Python的问题

[复制链接]
Java_S 发表于 2020-3-9 16:29
用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()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Lucifer_BW + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

天真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
新加一个怪物类吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表