为什么VS Code终端输出单个整数后不再继续运行?
Python游戏代码执行后输出1即卡住的问题修复
问题分析
你的代码出现卡住的核心原因及其他潜在问题如下:
- 拼写错误+战斗未启动:
encounterAcitve(正确拼写应为encounterActive)初始值为0,且代码中从未将其设为1,导致enemyEncounter函数内的战斗循环完全不执行,程序陷入外层while playerHealth > 0的无限循环,表现为终端卡住。 - 全局变量未声明:
enemyTurn和playerTurn函数内直接修改全局的playerHealth、enemyHealth,会触发UnboundLocalError——Python会默认将这些变量视为局部变量,无法直接修改全局值。 - 战斗结束逻辑缺失:没有判断敌人血量归0时终止战斗的逻辑,就算敌人被击败,循环也不会停止。
- 死亡检查未触发:
check函数仅定义但从未被调用,玩家血量归0时不会显示死亡提示。
修正后的代码
import time import random buildVer = 0.1 playerHealth = 5 enemyHealth = 1 encounterActive = 0 # 修正拼写错误 welcomeComplete = 0 def anyKey(): input("Press any key to continue...") def welcome(): print("~Project by Broclly~") print("\n") time.sleep(0.25) print("Greetings, welcome to Rogue.py!") time.sleep(0.25) print("This project is to test the limits of using Python as a game engine!") time.sleep(0.25) print("Current Build Version:", buildVer) anyKey() def enemyTurn(): global playerHealth # 声明使用全局变量 enemyHit = random.randint(0,2) playerHealth -= enemyHit print(f"You were hit for {enemyHit} damage! Current HP: {playerHealth}") def playerTurn(): global enemyHealth # 声明使用全局变量 playerHit = random.randint(0,1) enemyHealth -= playerHit print(f"You hit the enemy for {playerHit} damage! Enemy HP: {enemyHealth}") def check(): global playerHealth if playerHealth <= 0: print("You died! Try again :(") time.sleep(1) exit() # 玩家死亡后退出程序 def enemyEncounter(): global encounterActive, enemyHealth # 初始化战斗状态 encounterActive = 1 enemyHealth = 1 # 每次战斗重置敌人血量 print("An enemy appears!") while encounterActive == 1: enemyTurn() check() # 敌人攻击后检查玩家状态 if enemyHealth <= 0: print("You defeated the enemy!") encounterActive = 0 break playerTurn() if enemyHealth <= 0: print("You defeated the enemy!") encounterActive = 0 break check() # 玩家攻击后检查状态 while playerHealth > 0: while welcomeComplete == 0: welcome() welcomeComplete = 1 print(welcomeComplete) enemyEncounter() anyKey() # 战斗结束后等待按键再进入下一轮
修正说明
- 修正了
encounterAcitve的拼写错误,并在enemyEncounter内将其设为1,启动战斗循环。 - 在修改全局血量的函数内添加
global声明,确保正确修改全局变量值。 - 增加敌人血量归0时终止战斗的逻辑,重置战斗状态。
- 每次攻击后调用
check函数,及时检测玩家死亡状态并退出程序。 - 战斗结束后添加按键等待逻辑,避免直接进入下一场战斗。
内容的提问来源于stack exchange,提问作者Broclly
相关产品推荐
相关产品推荐

