You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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()  # 战斗结束后等待按键再进入下一轮

修正说明

  1. 修正了encounterAcitve的拼写错误,并在enemyEncounter内将其设为1,启动战斗循环。
  2. 在修改全局血量的函数内添加global声明,确保正确修改全局变量值。
  3. 增加敌人血量归0时终止战斗的逻辑,重置战斗状态。
  4. 每次攻击后调用check函数,及时检测玩家死亡状态并退出程序。
  5. 战斗结束后添加按键等待逻辑,避免直接进入下一场战斗。

内容的提问来源于stack exchange,提问作者Broclly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 15:07:35