简易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
相关产品推荐
相关产品推荐

