You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于JavaScript、HTML、CSS的文本RPG无法运行,求技术排查

我仔细检查了你为侄子开发的这款文本RPG代码,找到了几个导致程序无法运行的关键问题,一个个给你说清楚:

修复你的文本RPG游戏代码问题

1. JavaScript 大小写错误与冗余代码

错误点1:object.assign 拼写错误

selectOption函数里,你写了小写的object.assign,但JavaScript里这个方法是大写开头Object.assign,小写的object会被识别为未定义变量,直接导致报错。

错误点2:冗余且错误的state赋值

同样在selectOption里,你重复写了一行完全多余的代码:state = Object.assign(state, option.State),这里的option.State是不存在的属性(你的选项里定义的是setState),而且前面已经完成了state合并,必须删掉这行。

修正后的selectOption函数:

function selectOption(option) {
 const nextTextNodeId = option.nextText
 state = Object.assign(state, option.setState)
 if (nextTextNodeId <= 0){
 return startGame()
 }
 showTextNode(nextTextNodeId)
}

2. 语法错误:对象属性缺失冒号

textNodes数组的id为4的对象里,options后面少了冒号,这会直接破坏对象结构,导致JavaScript解析失败:

// 错误写法
options [
 { text: "Restart", nextText: -1 }
]

// 修正后
options: [
 { text: "Restart", nextText: -1 }
]

3. 大小写不一致导致的逻辑错误

在id为7的选项里,你检查的是currentState.blueGoo,但前面定义的state属性是全小写的bluegoo,大小写不匹配会导致这个选项永远不会显示:

// 错误写法
{ text: 'Throw the blue goo at it', requiredState: (currentState) => currentState.blueGoo, nextText: 11 }

// 修正后
{ text: 'Throw the blue goo at it', requiredState: (currentState) => currentState.bluegoo, nextText: 11 }

4. DOM加载顺序问题

你的JavaScript文件在<head>里引入,这时候页面的DOM元素还没渲染出来,执行startGame()时,document.getElementById("text")document.getElementById("option-buttons")会返回null,后续操作全都会报错。

解决方法是把script标签移到<body>的末尾,确保DOM元素先渲染完成:

<body>
 <div class="container">
 <div id="text">Text</div>
 <div id="option-buttons" class="btn-grid">
 <button class="btn">Option 1</button>
 <button class="btn">Option 2</button>
 <button class="btn">Option 3</button>
 <button class="btn">Option 4</button>
 </div>
 </div>
 <!-- 把script移到这里 -->
 <script src="game.js"></script>
</body>

5. 不影响运行但影响体验的拼写错误

  • id为3的文本里:feel tired ans tumblefeel tired and tumbletowwntown
  • id为8的文本里:easily catches.easily catches you.

把这些错误全部修正后,你的文本RPG游戏应该就能正常运行了!

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

火山引擎 最新活动