到目前为止,我正在努力提供将船只放置在船上的功能,并且在某些可用领域中,我对于检查功能存在一些问题。我的基本想法是有一种方法将在单击按钮时调用:

$("#dodaj1x1").click(function(){
        var raspolozivo=parseInt($("#raspolozivo1x1").text());
        if(raspolozivo>0){

            generisi1x1();//call for function that generate random field

            var novoRaspolozivo= raspolozivo-1;
            $("#raspolozivo1x1").html(novoRaspolozivo);
        }
        else{
            alert("Rasporedjeni svi raspolozivi brodovi ovog tipa!");
        }
    });


它将调用函数以生成随机字段:

function generisi1x1(){
            var minR = 0;
            var maxR = 9;
            var minK = 0;
            var maxK = 9;
            randRed=Math.floor(Math.random() * (maxR - minR + 1)) + minR;
            randKol=Math.floor(Math.random() * (maxK - minK + 1)) + minK;
            proveri1x1(randRed,randKol);//call to function to check is field available
    }


比函数generisi1x1()调用检查该字段是否可用的函数:

function proveri1x1(randRed,randKol){
        for(i=randRed-1;i<randRed+2;i++){
            for(j=randKol-1;j<randKol+2;j++){
                if($(".red"+i+".kolona"+j+"").hasClass('deoBroda')){
                    alert("red:"+" "+i+" kolona:"+j);
                    generisi1x1();
                }
                else { postavi1x1(randRed,randKol);}
            }
        }
    }


我的问题是,有时这种方法效果很好(至少看起来很不错,也许是纯粹的运气),有时它只生成3艘船1x1(应该有4艘),有时它向我显示有关问题的消息并生成5艘船(在正确的地方4个,在错误的地方1个)等等。

坏情况的打印屏幕:Added ship 1x1 on position 5,3 right next to ship 4x1

这是整个代码的实时演示:Live demo

到目前为止,我已经准备好插入4x1和1x1船只,并且只检查1x1,计划对所有船只都做同样的事情,任何帮助都会很大。

最佳答案

如果proveri1x1()执行检查并返回truefalse,并且generisi1x1()执行postavi1x1()操作,您会更容易理解。

function generisi1x1() {
    var minR = 0, maxR = 9, minK = 0, maxK = 9;
    randRed = Math.floor(Math.random() * (maxR - minR + 1)) + minR;
    randKol = Math.floor(Math.random() * (maxK - minK + 1)) + minK;
    if(proveri1x1(randRed, randKol)) { //call to function to check is field available
        postavi1x1(randRed,randKol);//set
    } else {
        generisi1x1();//try again
    }
}

function proveri1x1(randRed, randKol) {
    for(var i=randRed-1; i<randRed+2; i++) {
        for(var j=randKol-1; j<randKol+2; j++) {
            if($(".red" + i + ".kolona" + j).hasClass('deoBroda')) {
                return false;
            }
        }
    }
    return true;//<<<< note the position of this return statement
}

关于javascript - 我正在尝试使用jQuery创建“沉船”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26350181/

10-11 15:04