JS貪吃蛇V5隨機食物

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<script type="text/javascript">
    var a = new Array();

    //N爲格子邊長
    N = 10;
    curI = 0;
    curJ = 0;

    //障礙物測試,可轉食物
    boomIJ = 100;
    var curTd;
    var curIJ = 2;

    var body = new Array();

    function move1(curI, curJ) {
        
        //alert(curI+" "+curJ+" "+boomIJ)
        //上版這裏觸雷遊戲結束
        //         if (curI * N + curJ == boomIJ) {
        //             alert("game over!");
        //             return;
        //         }

        //此版改爲吃到食物身體加長且先進行判斷
        if (curI * N + curJ == boomIJ) {
            //擴充身子的位置
            body.push(boomIJ)
            //return;
            
            //吃完長身子後再次出現新食物
            rdmBoom(null);
        }
        

        //將蛇尾顏色置空
        document.getElementById("td" + (body[body.length - 1] + 1)).style.background = "";

        for (var i = body.length - 1; i >= 0; i--) {
            //身子存的是位置
            body[i] = body[i - 1];
        }

        body[0] = curI * N + curJ;

        //重構身子
        for (var i = 0; i < body.length; i++) {
            var idNum = body[i] + 1;
            curTd = document.getElementById(("td" + idNum));
            curTd.style.background = "green";
        }

        

    }

    function init() {

        //初始化活動場地
        for (var i = 0; i < N; i++) {
            a[i] = new Array();
            for (var j = 0; j < N; j++) {
                a[i][j] = 0;
            }
        }

        var table = document.getElementById("table1");
        var n = N;
        for (var i = 0; i < n; i++) {
            var tr = document.createElement("tr");
            for (var j = 0; j < n; j++) {
                var td = document.createElement("td");
                td.setAttribute("id", "td" + (i * n + j + 1));
                td.addEventListener("click", function() {
                    check(this);
                });

                td.style.background = "";
                td.innerHTML = "" + (i * n + j + 1);
                tr.appendChild(td);
            }
            table.appendChild(tr);
        }

        //         var num = Math.floor(Math.random() * 9) + 1;
        //         var idNum = "td" + num;
        //         curTd = document.getElementById(idNum);

        var idNum = "td" + (curIJ + 1);
        curTd = document.getElementById(idNum);

        curTd.style.background = "green";
        curI = parseInt(curIJ / N);
        curJ = parseInt(curIJ % N);

        body.push(2);
        body.push(1);
        body.push(0);

        for (var i = body.length - 1; i >= 0; i--) {
            var tdnum = "td" + (body[i] + 1);
            //alert(document.getElementById(tdnum).innerHTML);
            document.getElementById(tdnum).style.background = "green";
        }
        
        //初始隨機食物
        
        rdmBoom(null);

    }

    function check(td) {
        //boomIJ=parseInt(td.parentElement.rowIndex)*N+parseInt(td.cellIndex));
        i = parseInt(td.parentElement.rowIndex);
        j = parseInt(td.cellIndex);
        boomIJ = i * N + j;
        td.style.background = "red";
        //alert(boomIJ);
    }
    
    //將上版手動設置食物改爲隨機出現
    function rdmBoom(td){
        //var okFood=True
        while(true){
            var num = Math.floor(Math.random() * N*N) +1;
            var i=0;
            for(;i<body.length;i++){
                if(body[i]==num){
                    break;
                }            
            }
            if(i==body.length){
                boomIJ = num;
                var tdnum = "td" + (boomIJ+1);
                //alert(document.getElementById(tdnum).innerHTML);
                document.getElementById(tdnum).style.background = "red";
                break;
            }
        }
    }

    function turn(event) {
        var e = event;//|| window.event || arguments.callee.caller.arguments[0];

        //alert(e.keyCode);
        if (e && e.keyCode == 38) {
            if (curI - 1 >= 0) {
                curI = curI - 1;
                move1(curI, curJ);
            }
            //alert('38=上鍵');

        }

        if (e.keyCode == 39) {
            //             alert('39=右鍵');

            if (curJ + 1 < N) {
                curJ = curJ + 1;

                move1(curI, curJ);
            }

        }

        if (e.keyCode == 37) {
            //alert('37=左鍵');
            if (curJ - 1 >= 0) {
                curJ = curJ - 1;

                move1(curI, curJ);
            }
        }

        if (e && e.keyCode == 40) {
            //alert('40=下鍵');
            if (curI + 1 < N) {
                curI = curI + 1;

                move1(curI, curJ);
            }

        }

    }

    window.onload = init;
</script>
</head>
<body οnkeydοwn="turn(event)">

    <table id="table1" style="width: 50%; height: 300px;" border="1">

    </table>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章