使用swtich添加附加条件

经纪人

我正在研究一个包含4个房间的文字游戏。房间的布局就像一个盒子,分为四个部分(西北,东北,东南,西南)。您可以从NW房间开始走房间,然后顺时针方向走到SW房间。

无论如何,我在开关中包含一些基本动作:

switch (input) {

case "help":
    $("#messageHelp").properDisplay();

break;

  case "take sword":
if (currentRoom == "nwRoom") {
  $("<p>You picked up a sword.</p>").properDisplay();

} else {
  $("<p>The sword is not here.</p>").properDisplay();

}
break;

case "go east":
    if (currentRoom == "nwRoom") {
        currentRoom = "neRoom";
        $("<p>You are now in the North East Room.</p>").properDisplay();

    } else {
        $("<p>You can't go that way.</p>").properDisplay();

    }
    break;

case "go west":
    if (currentRoom == "neRoom") {
        currentRoom = "nwRoom";
        $("<p>You are now in the North West Room.</p>").properDisplay();

    } else {
        $("<p>You can't go that way.</p>").properDisplay();

    }
    break;

case "go south":
    if (currentRoom == "neRoom") {
        currentRoom = "seRoom";
        $("<p>You are now in the South East Room.</p>").properDisplay();

    } else {
        $("<p>You can't go that way.</p>").properDisplay();

    }
    break;

case "go north":
    if (currentRoom == "seRoom") {
        currentRoom = "neRoom";
        $("<p>You are now in the North East Room.</p>").properDisplay();

    } else {
        $("<p>You can't go that way.</p>").properDisplay();

    }
    break;

这是我的问题-WEST的方向需要重复,因为您应该能够在上层房间和下层房间中向东/向西行驶。我怎么做?我最初想到的是OR布尔值:

if (currentRoom == "swRoom" || "nwRoom")

但是,剩下的代码将毫无意义。由于第一次使用该语句,因此无法复制整个语句。如果可能的话,我想坚持对大多数代码使用SWITCH,因为它比大量的if else语句干净得多。

最终,我想继续使用它来将其发展成更大的游戏,但是我正在使用这四个房间来教自己一些基础知识。

谢谢!

詹姆斯·海

在基思·尼古拉斯(Keith Nicholas)的想法的基础上,您可以将房间表示为单个对象,如下所示:

var rooms = {
  northWest: {
    name: "North East",
    hasSword: true,
    paths: {
      east: "northEast",
      south: "southWest"
    }
  },
  northEast: {
    name: "North East",
    paths: {
      west: "northWest",
      south: "southEast"
    }
  },
  southWest: {
    name: "South West",
    paths: {
      east: "southEast",
      north: "northWest"
    }
  },
  southEast: {
    name: "South East",
    paths: {
      west: "southWest",
      north: "northEast"
    }
  },
};

设定currentRoom游戏开始时间

var currentRoom = rooms["northWest"];

由于在任一方向上移动之间的功能都相对相似,因此您希望重用尽可能多的代码。您可以创建一个旅行功能,如下所示:

var travel = function(direction) {
  var newRoom = rooms[currentRoom.paths[direction]];
  if(!newRoom) {
    $("<p>You can't go that way.</p>").properDisplay();
  }
  else {
    currentRoom = newRoom;
    $("<p>You are now in the " + currentRoom.name + " Room.</p>").properDisplay();
  }
};

此函数将采用字符串方向,例如“ east”或“ west”。第一个变量分配将尝试从上面创建的对象获取空间。举例来说,假设我们在西北房间,方向输入是东。这条线将有效地做到这一点

currentRoom.paths["east"]

由于我们在西北房间,因此将返回该字符串:

northWest: {
  name: "North East",
  paths: {
    east: "northEast", // This string will be returned.
    south: "southWest"
  }
}

有了这个字符串,我们现在可以使用以下命令获取要移到的新房间:

rooms["northEast"]

所以放在一起是

rooms[currentRoom.paths[direction]];

现在,如果碰巧不返回任何内容,即。以“东”中不存在currentRoom方向的道路,我们的变量将是undefined其将评估到false

这对于下一步很重要,因为它使我们能够检查是否能够新建一个房间。一个false评估手段,我们就不同了,这就是我们告诉玩家。

如果返回一个房间,我们将其设置为当前房间。显示房间的名称,我们完成了。然后,您可以从switch语句内部运行此travel函数:

var receiveInput = function(input) {
  switch(input) {
    case "help":
      $("#messageHelp").properDisplay();
      break;
    case "take sword":
      takeSword();
      break;
    case "go east":
      travel("east");
      break;
    case "go west":
      travel("west");
      break;
    case "go north":
      travel("north");
      break;
    case "go south":
      travel("south");
      break;
  }
}

附赠剑功能:

var takeSword = function() {
  if(currentRoom.hasSword) {
    $("<p>You picked up a sword.</p>").properDisplay();
  }
  else {
    $("<p>The sword is not here.</p>").properDisplay();
  }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向MySQL查询添加附加条件

来自分类Dev

每个附加条件

来自分类Dev

在laravel 5.3中添加登录的附加条件

来自分类Dev

MySQL用附加条件找到最小未使用值

来自分类Dev

JOIN中的附加条件

来自分类Dev

分区结束的附加条件

来自分类Dev

包括脚本的附加条件

来自分类Dev

如何在Haskell中从两个列表(+附加条件)中添加值

来自分类Dev

您如何给关联附加条件?

来自分类Dev

Python列表理解中的附加条件

来自分类Dev

QueryDSL Left Join的附加条件为ON

来自分类Dev

根据附加条件构造可变滞后

来自分类Dev

SQL联接中的附加条件

来自分类Dev

带有附加条件的MAX

来自分类Dev

INNER JOIN之后的mysql附加条件

来自分类Dev

如果并附加条件熊猫数据框?

来自分类Dev

向 PouchDB 文档添加附加附件

来自分类Dev

如何使用MSBuild在项目属性中附加条件编译符号?

来自分类Dev

尝试使用 SUMPRODUCT 根据两个附加条件来识别唯一值?

来自分类Dev

VBA JsonConverter添加附加引号

来自分类Dev

jQuery:添加附加元素的属性

来自分类Dev

向使用PHP变量构建的数组添加附加值

来自分类Dev

如何添加附加选项以使用 Chrome 的“隐身”模式从 GnomeTerminal 打开 URL?

来自分类Dev

如何以最小和附加条件优化LINQ

来自分类Dev

HQL等效于LEFT JOIN中的附加条件

来自分类Dev

具有附加条件的SQL Relational Division

来自分类Dev

筛选出递减值的细分(带有附加条件)

来自分类Dev

连续超过R的阈值和附加条件

来自分类Dev

BlockingCollection <T> .GetConsumingEnumerable()在附加条件下阻塞