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

简易JavaScript游戏代码报错:oppoSpeed未定义,请求协助解决

问题解决:oppoSpeed未定义报错

问题原因

你在spawnEnemy()函数里用let声明的oppoHp、oppoSpeed等变量是函数局部变量,只能在spawnEnemy()内部访问。当attackHim()尝试读取oppoSpeed时,该变量在当前作用域不存在,因此触发未定义报错。另外你提到玩家速度固定为10,当前代码中yourSpeed设为5,也需要修正。

简洁解决方案

将敌人的状态变量提升到全局作用域,确保所有函数都能访问,同时保持代码简洁:

<body>
    
<button onclick="spawnEnemy()">Summon Enemy</button>
<button class="opponent" id="atak" onclick="attackHim()" style="display:block">Atak</button>
<button class="opponent" id="obrona" onclick="defendFromHim()" style="display:block">Obrona</button>
<button class="opponent" id="ucieczka" onclick="runFromHim()" style="display:block">Ucieczka</button>

<script>

let yourHp=10
let yourSpeed=10 // 修正为需求的固定速度10
let yourDmg=5
let yourDefence=5

// 全局声明敌人变量,初始值设为null
let oppoHp = null
let oppoSpeed = null
let oppoDmg = null
let oppoDefence = null

console.log("Twoje statystyki na początek wynoszą: " + "\nHp: "+ yourHp+
"\nSpeed: "+yourSpeed+ "\nDmg: "+yourDmg+"\nDefence: "+yourDefence
)
console.log("---------------")

function spawnEnemy(){
    // 直接给全局变量赋值,无需重复let声明
    oppoHp=Math.floor(Math.random() * (11))
    oppoSpeed=Math.floor(Math.random() * (11))
    oppoDmg=Math.floor(Math.random() * (11))
    oppoDefence=Math.floor(Math.random() * (11))

    console.log("Statystyki wroga wynoszą: "+ "\nHp: "+oppoHp  +
"\nSpeed: "+oppoSpeed+ "\nDmg: "+oppoDmg+"\nDefence: "+oppoDefence)
console.log("---------------")
}

function attackHim(){
    // 增加判断,防止未召唤敌人就点击攻击
    if(oppoSpeed === null){
        console.log("Najpierw wezwij wroga!")
        return
    }
    
    if(yourSpeed>=oppoSpeed){
        oppoHp=oppoHp-2
        console.log("Zadałeś obrażenia! Hp przeciwnika wynosi: "+oppoHp)
        if(oppoHp<=0){
            console.log("Pokonałeś go! Idź dalej!")
            // 击败敌人后重置变量,支持召唤新敌人
            oppoHp = null
            oppoSpeed = null
        } else if(oppoHp>0){
            yourHp=yourHp-2
            console.log("Otrzymałeś obrażenia! Twoje hp wynosi: "+yourHp)
        }
    }else if(yourSpeed<oppoSpeed){
        yourHp=yourHp-2
        console.log("Otrzymałeś obrażenia! Twoje hp wynosi: "+yourHp)
        if(yourHp<=0){
            console.log("Przegrałeś! Koniec gry!")
        } else if(yourHp>0){
            oppoHp=oppoHp-2
            console.log("Zadałeś obrażenia! Hp przeciwnika wynosi: "+oppoHp)
        }
    }
}

</script>

</body>

额外优化说明

  • 全局变量让敌人属性能被所有函数共享访问
  • 修正yourSpeed为需求的固定值10
  • 增加未召唤敌人时的攻击提示,避免额外报错
  • 击败敌人后重置变量,支持重复召唤新敌人

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:45