我在战舰游戏上工作。当前的genShips函数应该检查是否已经标记了coorinate x:y及其surroindings的div。如果它们被标记,则尝试使用新的x和y,如果它们没有标记,也就是说没有附近的船只,则将船放在x:y,x + 1:y上。船只总是1x2和水平。角落可以触摸,但两侧都不能接触。
见http://jsfiddle.net/u43703ms/1/
上的完整代码只是功能本身。
function genShips() {
var gridLength = $("#option").val();
while (true) {
var y = Math.floor(((Math.random() * gridLength)));
var x = Math.floor(((Math.random() * gridLength)));
var x2 = x + 1;
$("#info").html(x + ":" + y);
if
(
$("#grid .cell[data-x="+x+"][data-y="+y+"]").hasClass("ship")
|| ($("#grid .cell[data-x="+x+"][data-y="+(y-1)+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+x+"][data-y="+(y+1)+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+(x-1)+"][data-y="+y+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+(x+1)+"][data-y="+y+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+(x2-1)+"][data-y="+y+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+x2+"][data-y="+(y+1)+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+x2+"][data-y="+(y-1)+"]").hasClass("ship"))
|| ($("#grid .cell[data-x="+(x2+1)+"][data-y="+y+"]").hasClass("ship"))
)
{
console.log("dont print ship");
}
else {
console.log("print ship");
$("#grid .cell[data-x="+x+"][data-y="+y+"]").attr("class", "ship");
$("#grid .cell[data-x="+x2+"][data-y="+y+"]").attr("class", "ship");
break;
}
}
}
Generate为您提供所需的网格化(从下拉菜单中选择),genShips尝试将船放在网格上。现在它只是因为某种原因没有在div上看到“ship”类,或者我的if语句有缺陷。
为了更好地解释我的if语句,它基本上可以控制是否在x,y,上,下,左,右,上和右上方为x2,即第二个框。
答案 0 :(得分:2)
变化: -
.attr("class", "ship");
于: -
.addClass("ship");
在您的完整代码中
function klikk(x, y) {
$(".cell").click(function() {
$(this).attr("class", "ship");
});
}
.attr("class", "ship");
正在替换所有类(.cell
),只留下.ship
。所以永远不会找到.cell
hasClass
.ship
。
答案 1 :(得分:0)
我一直在盯着试图完成你想要实现的目标的代码。我认为它非常整洁/酷。 ; - )
我认为你想要&& 而不是 ||
没有进一步检查逻辑是否正确与&&但是||似乎没有凝聚我。
尝试使用 addClass 和 removeClass 而不是 Attr(类," someclass"),因为后者删除了任何其他这也可能不是意图。