Javascript 循环 if 语句进行文本冒险

标签 javascript loops if-statement adventure

我正在尝试通过使用我的 startGame() 函数循环 if 语句来构建最简单的文本冒险。我怎样才能让它发挥作用?还是我找错了树?

let m = 1;

function startGame() {
  if (m === 1){
    document.querySelector("#text").innerHTML = "START PAGE"; 
    document.querySelector("#btn").value = 'Go to map 2';
    document.querySelector("#btn").addEventListener("click", map2);
    function map2() {
      m = 2;
    }
  } else if (m === 2) {
      document.querySelector("#text").innerHTML = "SUCCESS!!!"; 
  } else {
      document.querySelector("#text").innerHTML = "Nothing works";
  }
}

startGame()

最佳答案

您遇到的第一个问题是,当调用map2()时,startGame中的逻辑不会重新评估,仅m更改,而不是使用 m 来确定事物的事物。

您可以通过再次手动调用 startGame 来修复此问题:

let m = 1;

function startGame() {
  if (m === 1){
    document.querySelector("#text").innerHTML = "START PAGE"; 
    document.querySelector("#btn").value = 'Go to map 2';
    document.querySelector("#btn").addEventListener("click", map2);
    function map2() {
      m = 2;
      startGame();
    }
  } else if (m === 2) {
      document.querySelector("#text").innerHTML = "SUCCESS!!!"; 
  } else {
      document.querySelector("#text").innerHTML = "Nothing works";
  }
}

startGame()
<div id="text"></div>
<input type="submit" id="btn" />

但是,这并不容易扩展 - 您在同一函数中拥有基于 m 的所有逻辑,并且添加更多处理将导致越来越多的 if/else 语句使函数难以阅读和维护。您可以将 m 的每个值的处理程序分开,将它们放在可以查找的位置,然后 startGame 将仅充当调度,而无需知道会发生什么:

let m = 1;

let handlers = new Map();

handlers.set(1, function() {
  document.querySelector("#text").innerHTML = "START PAGE"; 
  document.querySelector("#btn").value = 'Go to map 2';
  document.querySelector("#btn").addEventListener("click", map2);
  function map2() {
    m = 2;
    startGame();
  }
})

handlers.set(2, function() {
  document.querySelector("#text").innerHTML = "SUCCESS!!!"; 
})

function defaultErrorHandler() {
  document.querySelector("#text").innerHTML = "Nothing works";
}

function startGame() {
  //fetch handler or if that fails, use the default error
  const handler = handlers.get(m) || defaultErrorHandler;
  
  //execute handler
  handler();
}

startGame()
<div id="text"></div>
<input type="submit" id="btn" />

现在startGame根本不需要改变,每段逻辑也是独立的,可以单独编辑。

关于Javascript 循环 if 语句进行文本冒险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60811040/

相关文章:

java - Else If 和 Do while 没有按预期工作

javascript - 谷歌动态图表不工作

javascript - 获取在 JavaScript 中单击的类的索引。没有 jQuery

c# - 在没有反射的情况下将 "Code/Properties/Stuff"与 C# 中的字段相关联。我太被 Javascript 灌输了

Java boolean 值未从 if 语句中传递出去

javascript - 如果日期月份等于输入的隐藏值,则更改 div

javascript - PHP JSON 编码对象导致 Ajax 错误

javascript数组和循环

loops - 为什么这个循环打印上一次迭代的值?

python - 需要帮助找出一个循环来缩短某些代码的长度