js 貪喫蛇遊戲

今天突然想到可以改變背景色來實現動態效果

因爲之前用的C#.GUI 繪畫過貪喫蛇,所以就試做用js做 了一個

類似的東東,(最近也是在學js......)


好了,我們先來看看運行效果吧:


界面大概就這樣了,很難看,我知道 ,我審美都畸形的..呵呵呵 ,這不是關鍵


再看看js代碼:


<script src="../JS/jquery-1.2.6.min.js" type="text/javascript"></script>
    <script type="text/javascript">
         //*
         //背景顏色 BackColor
         //蛇的顏色 SnakeColor
         //食物的顏色 FoodColor


        var BackColor = "#CCF";
        var SnakeColor="#000";
        var FoodColor = "red";
        var speed = 100;//移動速度

        var Are_X = 40, Are_Y = 40;
        var snake = new Array();
        var pos_y = 1,pos_x = 7;//Snake的頭的位值 x=7,y=1
        var snakelength = 5; //Snake的長
        var ini_length=5;//蛇的初始長度'
        var keynum = 39; //記錄當前的方向
        var timer = null;
        var food_Exit = false;//食物是否喫掉 喫掉爲false
        var food_pos=null;//記錄食物產生的當前位置
        $(document).ready(function () {            
               CreateGrid();
               ini_snake();
               Random_Food();
            $("body").bind("keypress", function (event) {
                if (timer == null) {
                    timer = setInterval("Snake()", speed);
                }
                var key = event.keyCode;
                if (key == 0) {
                    key = event.which;
                }
                if (key >= 37 & key <= 40) {
                    //控制方向
                    if (Math.abs(key - keynum) == 1) {
                        keynum = key;
                    }
                    else {
                        if (keynum == 37 & key != 39)
                            keynum = key;
                        if (keynum == 40 & key != 38) {
                            keynum = key;
                        }

                    }
                }
            });
        });
        //用計時器移動snake
        function Snake() {
            switch (keynum) {
                case 37:
                    Move_left();
                    paintsnake();
                    break;
                case 38:
                    Move_up();
                    paintsnake();
                    break;
                case 39:
                    Move_right();
                    paintsnake();
                    break;
                case 40:
                    Move_down();
                    paintsnake();
                    break;
            }
        }
        //初始化一條小蛇
        function ini_snake() {
            $("#mySnaketable tr td").css("background-color", BackColor);
            for (var i = 0; i < snakelength; i++) {
                var head = $("#mySnaketable  tr td").get(pos_y * 40 + pos_x - i);
                head.style.background = SnakeColor;
                snake[i] = pos_y.toString() + "," + (pos_x - i).toString();
            }
        }
        function paintsnake() {
            $("#mySnaketable tr td").css("background-color", BackColor);
            for (var i = 0; i < snakelength; i++) {
                var y = parseInt(snake[i].split(',')[0]);
                var x = parseInt(snake[i].split(',')[1]);
                if (y >= 40 || x >= 40 || y < 0 || x < 0) {
                    alert("Game Over! 您得:" + (snakelength - ini_length).toString()+"分- -!");
                    Ini_Data();
                    break;
                }
                var tr = $("#mySnaketable tr");
                tr[y + 1].cells[x].style.background = SnakeColor;

                //畫出食物來
                if (food_Exit == true) {
                    var y = parseInt(food_pos.split(',')[0]);
                    var x = parseInt(food_pos.split(',')[1]);
                    var tr = $("#mySnaketable tr");
                    tr[y + 1].cells[x].style.background =FoodColor;
                    
                }
            }
        }
        //初始化數據
        function Ini_Data() {
            clearInterval(timer);
            snake = new Array();
            snakelength = 5; //Snake的長
            keynum = 39; //記錄當前的方向
            ini_snake();
            Random_Food();
            timer = null;

        }
        //改變蛇節點座標
        function Init_AllDot() {
            for (var i = snakelength - 1; i > 0; i--) {
                snake[i] = snake[i - 1];
            }
        }
        //向右移動
        function Move_right() {
            Init_AllDot();
            var y = parseInt(snake[0].split(',')[0]);
            var x = parseInt(snake[1].split(',')[1]);
            snake[0] = y.toString() + "," + (x + 1).toString();
            if (snake[0] == food_pos) {
                snakelength += 1;
                food_Exit = false;
                //喫掉食物,產生下一個食物
                food_pos = null;
                Random_Food();
            }
        }
        //向下移動
        function Move_down() {
            Init_AllDot();
            var y = parseInt(snake[0].split(',')[0]);
            var x = parseInt(snake[1].split(',')[1]);
            snake[0] = (y + 1).toString() + "," + (x).toString();

            if (snake[0] == food_pos) {
                snakelength += 1;
                food_Exit = false;
                //喫掉食物,產生下一個食物
                food_pos = null;
                Random_Food();
            }

        }
        //向上移動
        function Move_up() {
            Init_AllDot();
            var y = parseInt(snake[0].split(',')[0]);
            var x = parseInt(snake[1].split(',')[1]);
            snake[0] = (y - 1).toString() + "," + (x).toString();

            if (snake[0] == food_pos) {
                snakelength += 1;
                food_Exit = false;
                //喫掉食物,產生下一個食物
                food_pos = null;
                Random_Food();
            }

        }
        //向左移動
        function Move_left() {
            Init_AllDot();
            var y = parseInt(snake[0].split(',')[0]);
            var x = parseInt(snake[1].split(',')[1]);
            snake[0] = (y).toString() + "," + (x - 1).toString();

            if (snake[0] == food_pos) {
                snakelength += 1;
                food_Exit = false;
                //喫掉食物,產生下一個食物
                food_pos = null;
                Random_Food();
            }
   

        }
        //產生隨即食物
        function Random_Food() {
            while (true) {
                var rx = Math.floor(Math.random() * (Are_X - 1) + 1);
                var ry = Math.floor(Math.random() * (Are_Y - 1) + 1);
                var pos = ry.toString() + "," + rx.toString();
                if (!isUse(pos)) {
                    var tr = $("#mySnaketable tr");
                    tr[ry + 1].cells[rx].style.background = FoodColor;
                    food_pos = pos;
                    food_Exit = true;
                    break;
                }
            }

        }
        function isUse(pos) {
            for (var i = 0; i < snake.length; i++) {
                if (snake[i] == pos) {
                    return true;
                }
            }
            return false;
        }

          function CreateGrid() {
            $("body").append("<div id='mySnakediv' align='center' style='padding:50px;'></div>");
            $("#mySnakediv").append("<table id='mySnaketable' cellpadding='1' cellspacing='1' border='5' style='border-collapse: collapse;border-color: Gray;border-style:ridge;'></table>");
           // $("#mySnaketable").addClass("tb");
            $("#mySnaketable").append("<tr><th colspan='40' align='center' style='background-color:Blue'>40*40的格子</th></tr>");
            for (var i = 0; i < 40; i++) {
                $("#mySnaketable").append("<tr id='" + i + "'></tr>");
                for (var j = 0; j < 40; j++) {
                    $("#" + i.toString()).append("<td style='width: 10px;height: 10px;border-color:Silver;border-style:ridge;'></td>");
                }
            }
        }
 </script>

自己還寫了一點點css,小小的控制一下樣式:


HTML代碼倒沒寫什麼

js中還是少了一樣,就是射自己跟自己相交致死,這個我沒弄,有興趣的朋友要可以去搞搞..



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