我试图通过构建一个简单的文本游戏来学习编码。最终的比赛将有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语句的需要,以提高效率。
答案 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
不能。