如果else语句更高效,则替换if else语句

时间:2015-10-28 17:09:06

标签: javascript jquery

我试图通过构建一个简单的文本游戏来学习编码。最终的比赛将有4个房间。你将从1号房间开始,向西出口到2号房间,向南出口到3号房间,最后从4号房间向东出口。(顺时针方向)。

无论如何,我的起始代码来自YouTube教程,我发现它包含所有if / else if语句。我已经看到这种效率非常低。我的问题是如何改进此代码?

我猜我应该让每个房间和它的内容成为一个物体(即房间1里面有一把剑,所以物体将包含房间和剑的位置)。我也猜测我是否在一个房间里有一个怪物,他是他自己的对象。

我的问题是如果以上是正确的(对象) - 我不知道如何在创建对象后使用该对象。即。如果用户键入"拿剑"我如何调用该对象来做到这一点?

如果我在完全错误的轨道上,请指回正确的方向。

这是第一个房间的当前代码:

$("form").submit(function() {
    var input = $("#commandLine").val();

    function check() {
        check = true;
    }

    if (input == "help") {
        $("#messageHelp").clone().insertBefore("#placeholder").fadeIn(1000);
        check();
    }

    if (input == "take sword" && currentRoom == "nCorridor") {
        $("<p>You picked up a sword.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
        check();
    }
    else if (input == "take sword" && currentRoom != "nCorridor") {
        $("<p>The sword is not here.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
        check();
    }
    else if (input != "take sword" && input != "help") {
        $("<p>I don't understand " + input +  ".</p>").hide().insertBefore("#placeholder").fadeIn(1000);
    }

    $("#commandLine").val("");
});

理想情况下,我希望消除或大大减少使用if和else if语句的需要,以提高效率。

1 个答案:

答案 0 :(得分:1)

首先让我们改进if语句中的逻辑,以减少重复条件,看看能带给你多远:

if (input == "help") {

  $("#messageHelp").clone().insertBefore("#placeholder").fadeIn(1000);
  check();

} else if (input == "take sword") {

  if (currentRoom == "nCorridor") {
    $("<p>You picked up a sword.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
    check();
  } else {
    $("<p>The sword is not here.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
    check();
  }

} else {

  $("<p>I don't understand " + input +  ".</p>").hide().insertBefore("#placeholder").fadeIn(1000);

}

根据输入确定操作的另一种方法是使用switch,当您获得更多选项时,这可能更有用:

switch (input) {

  case "help":
    $("#messageHelp").clone().insertBefore("#placeholder").fadeIn(1000);
    check();
    break;

  case "take sword":
    if (currentRoom == "nCorridor") {
      $("<p>You picked up a sword.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
      check();
    } else {
      $("<p>The sword is not here.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
      check();
    }
    break;

  default:
    $("<p>I don't understand " + input +  ".</p>").hide().insertBefore("#placeholder").fadeIn(1000);

}

要继续使用对象来跟踪项目,你可以为剑创建一个对象(现在只有位置):

var sword = {
  room: "nCorridor"
};

在代码中你可以使用这样的对象:

  if (currentRoom == sword.room) {
    $("<p>You picked up a sword.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
    check();
  } else {
    $("<p>The sword is not here.</p>").hide().insertBefore("#placeholder").fadeIn(1000);
    check();
  }

从那里,您可以为项目添加更多属性和方法。例如,对象可以使用方法来确定可以对它们执行的操作,例如可以使用项apple,但项sword不能。