问题描述
我的代码是一款基于 nes 时代经典日本角色扮演游戏的简单回合制游戏。显示主要由静态图像和两个文本框组成,一个显示玩家当前的生命值和魔法值,另一个描述每个参与者在采取行动时的动作。
这是我打算让它工作的方式:程序开始,转弯计数器设置为“1”。每当回合计数器为“1”时,就是玩家回合,并且文本框中会显示编号的命令列表。玩家通过按下对应于该动作的数字键来选择他们想要的那个,调用相应的函数,回合计数器设置为“2”,敌人轮到他们,回合计数器设置回“1” ”。这一直持续到某人的 HP 达到 0 或更低,此时会显示一条消息宣布获胜者。
我遇到的两个问题如下:在 main 中早期声明的带有占位符值的消息文本在 turn == 1 时没有更新到它应该的内容。第二个问题是代码没有似乎正在接受任何输入,因为我已经设置了一些文本来显示“turn”变量的当前值,这让我相信有什么东西阻止了输入被接受,或者有什么东西阻止了 all 被更新的文本,而不仅仅是文本框。
以下是我的代码的主要功能,如果有帮助,可以在此处找到整个内容以及使用的 bmp 和 wav 文件:https://www.mediafire.com/file/nr151r4ysg4shmz/Code.zip/file
def main():
pygame.init()
size = [640,480]
window = pygame.display.set_mode(size)
black = pygame.color.Color('#000000')
white = pygame.color.Color('#FFFFFF')
font = pygame.font.SysFont("Arial",36)
bg = pygame.image.load('Background.bmp')
bg = pygame.transform.scale(bg,(640,480))
nme = pygame.image.load('GreenDragon.bmp')
nme = pygame.transform.scale(nme,(200,150))
sound = pygame.mixer.sound('Battle_music.wav')
sound.play()
statusBoxX = 10
statusBoxY = 10
statusBoxWidth = 140
statusBoxHeight = 140
statusBorderX = 0
ststusBorderY = 0
statusBorderWidth = 160
ststusBorderHeight = 160
textBoxX = 10
textBoxY = 330
textBoxW = 620
textBoxH = 140
textBorderX = 0
textBorderY = 320
textBorderW = 640
textBorderH = 160
turn = 1
message1 = "1"
message2 = "2"
playerName = "Hero"
playerMaxHP = 300
playerCurHP = 300
playerMaxMP = 120
playerCurMP = 120
playerBaseStr = 50
playerCurStr = 50
playerBaseDef = 45
playerCurDef = 45
playerMagPwr = 35
playerMagDef = 40
playerSpeed = 40
playerdamage = 0
enemyName = "Green Dragon"
enemyMaxHP = 300
enemyCurHP = 300
enemyMaxMP = 120
enemyCurMP = 120
enemyBaseStr = 50
enemyCurStr = 50
enemyBaseDef = 45
enemyCurDef = 45
enemyMagPwr = 35
enemyMagDef = 40
enemySpeed = 40
enemydamage = 0
keys = [False,False,False]
while True:
window.fill((255,255,255))
window.blit(bg,(0,0))
window.blit(nme,(230,160))
pygame.draw.rect(window,white,[textBorderX,textBorderY,textBorderW,textBorderH],border_radius=10)
pygame.draw.rect(window,black,[textBoxX,textBoxY,textBoxW,textBoxH],border_radius=10)
messageText1 = font.render(message1,white)
messageText2 = font.render(message2,white)
window.blit(messageText1,(20,345))
window.blit(messageText2,385))
pygame.draw.rect(window,[statusBorderX,ststusBorderY,statusBorderWidth,ststusBorderHeight],[statusBoxX,statusBoxY,statusBoxWidth,statusBoxHeight],border_radius=10)
name = font.render(playerName,white)
playerHealth = font.render("HP: " + str(playerCurHP),white)
playerMagic = font.render("MP: " + str(playerCurMP),white)
window.blit(name,(45,20))
window.blit(playerHealth,(25,60))
window.blit(playerMagic,100))
debug = font.render(str(turn),white)
window.blit(debug,20))
pygame.display.flip()
while playerCurHP > 0 and enemyCurHP > 0:
if turn == 1:
loopx = False
while loopx == False:
playerCurDef = playerBaseDef
pygame.display.update()
message1 = "1. Attack 2. Heal 3. Fireball"
message2 = "4. Buff 5. Item 6. Defend"
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit(0)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
keys[0] = True
elif event.key == pygame.K_2:
keys[1] = True
elif event.key == pygame.K_3:
keys[2] = True
elif event.key == pygame.K_4:
keys[3] = True
elif event.key == pygame.K_5:
keys[4] = True
elif event.key == pygame.K_6:
keys[5] = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_1:
keys[0] = False
elif event.key == pygame.K_2:
keys[1] = False
elif event.key == pygame.K_3:
keys[2] = False
elif event.key == pygame.K_4:
keys[3] = False
elif event.key == pygame.K_5:
keys[4] = False
elif event.key == pygame.K_6:
keys[5] = False
if keys[0] == True:
playerAttack(playerName,playerCurStr,enemyName,enemyCurHP,enemyCurDef,playerdamage)
loopx = True
elif keys[1] == True:
playerHeal(playerName,playerCurHP,playerMaxHP,playerCurMP)
loopx = True
elif keys[2] == True:
playerFireball(playerName,playerMagPwr,enemyMagDef,playerdamage)
loopx = True
elif keys[3] == True:
playerBuff(playerName,playerCurMP,playerCurStr)
loopx = True
elif keys[4] == True:
item(playerName,playerMaxMP)
loopx = True
elif keys[5] == True:
defend(enemyAttack,enemydamage)
loopx = True
turn = 2
if turn == 2:
action = random.randint(1,100)
if action < 41:
enemyAttack(enemyName,enemyCurStr,playerName,playerCurDef,enemydamage)
elif action < 81:
magic = random.randint(1,100)
if magic < 26:
enemyHeal(enemyName,enemyMaxHP,enemyCurMP,enemyMagPwr)
elif magic < 66:
enemyFirebreath(enemyName,enemyMagPwr,enemydamage)
else:
enemyDeMagic(enemyName,playerBaseStr,playerCurStr)
else:
enemyDefend(enemyCurHP,playerdamage)
turn = 1
continue
if playerCurHP < 1:
message1 = "Game Over!"
message2 = " "
break
elif enemyCurHP < 1:
message1 = enemyName + " was defeated!"
message2 = " "
break
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)