战舰游戏:允许在长度不超过4的战舰上注册命中
Battleship game: Allowing hits to be registered on ships with lengths other than 4
我正在为一个学校项目用JavaScript制作《战舰》,我被卡住了。
计算机随机生成船只,用户必须通过输入坐标来尝试击沉计算机的所有船只。船上的命中被保存在阵列中。该数组包含表示船的长度的零(因此长度为4的船有一个包含4个零的数组)。当一艘船被击中时,0变为1。如果所有元素都为1,则船会下沉。问题是,我的代码记录了命中次数,但只有当你命中长度为4的船时,才会将其放入数组中。
有人能帮我吗?以下是"游戏"本身的代码:
function game() {
inputArray = [4, 3, 2];
var boats = randomBoats(inputArray);
var currentBoat = 0;
var sunkenBoat = 0;
var numberOfTurns = 0;
while (sunkenBoat !== inputArray.length) {
var hit = false;
var target = "(" + prompt("Enter targetcoordinate (x,y)") + ")";
var targetString = target.replace(/'s+/g, '');
for (var i = 0; i !== inputArray.length; i++) {
for (var j = 0; j !== boats[i].usedPositions().length; j++) {
console.log(targetString)
if (targetString === boats[i].usedPositions()[j].toString()) {
raak = true;
boats[i].hits[j] = 1;
console.log(boats[i].hits);
currentBoat = boats[i];
} else {
currentBoat = boats[i];
}
}
}
console.log(currentBoat.hits);
console.log(allEquals(currentBoat.hits, 1));
if (hit)
alert("Hit!");
else
alert("Miss!");
if (allEquals(currentBoat.hits, 1)) {
alert("Boat with length " + currentBoat.hits.length + " has sunken!");
sunkenBoat++;
}
numberOfTurns++
}
alert("You've won! You did it in " + numberOfTurns + " turns.")
}
问题在于内循环中的其他,因为您处理了每艘船(外循环)和所有位置(内循环)的
else {
currentBoat = boats[i];
}
总是将当前的船设置为最后一艘[i];
当你发现命中时,你也不需要处理任何其他位置或船只,所以当你检测到命中时,早点休息:
raak = false;
for(var i = 0; i < inputArray.length && !raak; i++) {
for(var j = 0; j !== boats[i].usedPositions().length; j++) {
console.log(targetString)
if(targetString === boats[i].usedPositions()[j].toString()) {
raak = true;
boats[i].hits[j] = 1;
console.log(boats[i].hits);
currentBoat = boats[i];
break;
}
}
}
相关文章:
- 如何验证表单控制数据大小不超过2.5 mb
- 战舰游戏:允许在长度不超过4的战舰上注册命中
- 谷歌在IE浏览器中注册不起作用
- For 循环不迭代,输出的数据不超过第一个任务
- 协调拖动移动不超过 30 FPS
- 正则表达式表示数字,不超过 3 位数字,十进制可以是 .50 或 .00
- Ajax 注册不返回任何值或错误
- 画布图像数据获取的值不超过 102,000 个
- 输入字段中不超过两个单词
- 有没有一个好的内联解决方案可以在不超过定义值的情况下进行累加
- parse.com用户注册不起作用的问题
- 不超过两个重复字母/数字的正则表达式
- ng重复计数-筛选器更新次数不超过一次
- 在javascript中使用一个函数的时间不超过2秒内1次
- 在不超过堆栈限制的情况下,迭代或递归大量庞大函数的最佳方式是什么
- 将文本大小更改为不超过表单输入的宽度
- 随机设置图像之间不超过长度
- 只有当表达式匹配长度不超过12个字符时,Regex才进行匹配
- 将画布从一页复制到另一页,而不超过最大字符限制
- 删除长度不超过6的列表元素