DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript綜合知識 >> javascript貪吃蛇完整版
javascript貪吃蛇完整版
編輯:JavaScript綜合知識     

 這篇文章主要是對javascript貪吃蛇完整版(源碼)進行了詳細的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助

javascript貪吃蛇完整版 注釋完整,面向對象 代碼如下: <html> <head>     <title>貪吃蛇 Snake v2.4</title> <style>     body{         font-size:9pt;     }     table{         border-collapse: collapse;         border:solid #333 1px;     }     td{         height: 10px;         width: 10px;         font-size: 0px;     }     .filled{         background-color:blue;     } </style> </head> <script>     function $(id){return document.getElementById(id);} /************************************************************** * javascript貪吃蛇 v2.4 <br /> * v2.4修正了蛇身顏色可以隨著蛇前進而移動 **************************************************************/     //貪吃蛇類     var Snake = {         tbl: null,         /**         * body: 蛇身,數組放蛇的每一節,         * 數據結構{x:x0, y:y0, color:color0},         * x,y表示坐標,color表示顏色         **/         body: [],         //當前移動的方向,取值0,1,2,3, 分別表示向上,右,下,左, 按鍵盤方向鍵可以改變它         direction: 0,         //定時器         timer: null,         //速度         speed: 250,         //是否已經暫停         paused: true,         //行數         rowCount: 30,         //列數         colCount: 30,         //初始化         init: function(){             var colors = ['red','orange','yellow','green','blue','purple','#ccc'];             this.tbl = $("main");             var x = 0;             var y = 0;             var colorIndex = 0;             //產生初始移動方向             this.direction = Math.floor(Math.random()*4);             //構造table             for(var row=0;row<this.rowCount;row++){                 var tr=this.tbl.insertRow(-1);                 for(var col=0;col<this.colCount;col++) {                     var td=tr.insertCell(-1);                 }             }             //產生20個松散節點             for(var i=0; i<10; i++){                 x = Math.floor(Math.random()*this.colCount);                 y = Math.floor(Math.random()*this.rowCount);                 colorIndex = Math.floor(Math.random()*7);                 if(!this.isCellFilled(x,y)){                     this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];                 }             }             //產生蛇頭             while(true){                 x = Math.floor(Math.random()*this.colCount);                 y = Math.floor(Math.random()*this.rowCount);                 if(!this.isCellFilled(x,y)){                     this.tbl.rows[y].cells[x].style.backgroundColor = "black";                     this.body.push({x:x,y:y,color:'black'});                     break;                 }             }             this.paused = true;             //添加鍵盤事件             document.onkeydown= function(e){                 if (!e)e=window.event;                 switch(e.keyCode | e.which | e.charCode){                   case 13: {                     if(Snake.paused){                       Snake.move();                       Snake.paused = false;                     }                     else{                        //如果沒有暫停,則停止移動                       Snake.pause();                       Snake.paused = true;                     }                     break;                   }                     case 37:{//left                         //阻止蛇倒退走                         if(Snake.direction==1){                             break;                         }                         Snake.direction = 3;                         break;                     }                     case 38:{//up                        //快捷鍵在這裡起作用                       if(event.ctrlKey){                          Snake.speedUp(-20);                         break;                       }                         if(Snake.direction==2){//阻止蛇倒退走                             break;                         }                         Snake.direction = 0;                         break;                     }                     case 39:{//right                         if(Snake.direction==3){//阻止蛇倒退走                             break;                         }                         Snake.direction = 1;                         break;                     }                     case 40:{//down                       if(event.ctrlKey){                          Snake.speedUp(20);                         break;                       }                         if(Snake.direction==0){//阻止蛇倒退走                             break;                         }                         Snake.direction = 2;                         break;                     }                 }             }         },         //移動         move: function(){             this.timer = setInterval(function(){                 Snake.erase();                 Snake.moveOneStep();                 Snake.paint();             }, this.speed);         },         //移動一節身體         moveOneStep: function(){             if(this.checkNextStep()==-1){                 clearInterval(this.timer);                 alert("Game over!/nPress Restart to continue.");                 return;             }             if(this.checkNextStep()==1){                 var _point = this.getNextPos();                 var _x = _point.x;                 var _y = _point.y;                 var _color = this.getColor(_x,_y);                 this.body.unshift({x:_x,y:_y,color:_color});                 //因為吃了一個食物,所以再產生一個食物                 this.generateDood();                 return;             }             //window.status = this.toString();             var point = this.getNextPos();             //保留第一節的顏色             var color = this.body[0].color;             //顏色向前移動             for(var i=0; i<this.body.length-1; i++){               this.body[i].color = this.body[i+1].color;             }             //蛇尾減一節, 蛇尾加一節,呈現蛇前進的效果             this.body.pop();             this.body.unshift({x:point.x,y:point.y,color:color});             //window.status = this.toString();         },         //探尋下一步將走到什麼地方         pause: function(){           clearInterval(Snake.timer);           this.paint();         },         getNextPos: function(){             var x = this.body[0].x;             var y = this.body[0].y;             var color = this.body[0].color;             //向上             if(this.direction==0){                 y--;             }             //向右             else if(this.direction==1){                 x++;             }             //向下             else if(this.direction==2){                 y++;             }             //向左             else{                 x--;             }             //返回一個坐標             return {x:x,y:y};         },         //檢查將要移動到的下一步是什麼         checkNextStep: function(){             var point = this.getNextPos();             var x = point.x;             var y = point.y;             if(x<0||x>=this.colCount||y<0||y>=this.rowCount){                 return -1;//觸邊界,游戲結束             }             for(var i=0; i<this.body.length; i++){                 if(this.body[i].x==x&&this.body[i].y==y){                     return -1;//碰到自己的身體,游戲結束                 }             }             if(this.isCellFilled(x,y)){                 return 1;//有東西             }             return 0;//空地         },         //擦除蛇身         erase: function(){             for(var i=0; i<this.body.length; i++){                 this.eraseDot(this.body[i].x, this.body[i].y);             }         },         //繪制蛇身         paint: function(){             for(var i=0; i<this.body.length; i++){                 this.paintDot(this.body[i].x, this.body[i].y,this.body[i].color);             }         },         //擦除一節         eraseDot: function(x,y){             this.tbl.rows[y].cells[x].style.backgroundColor = "";         },         paintDot: function(x,y,color){             this.tbl.rows[y].cells[x].style.backgroundColor = color;         },         //得到一個坐標上的顏色         getColor: function(x,y){             return this.tbl.rows[y].cells[x].style.backgroundColor;         },         //用於調試         toString: function(){             var str = "";             for(var i=0; i<this.body.length; i++){                 str += "x:" + this.body[i].x + " y:" + this.body[i].y + " color:" + this.body[i].color + " - ";             }             return str;         },         //檢查一個坐標點有沒有被填充         isCellFilled: function(x,y){             if(this.tbl.rows[y].cells[x].style.backgroundColor == ""){                 return false;             }             return true;         },         //重新開始         restart: function(){             if(this.timer){                 clearInterval(this.timer);             }             for(var i=0; i<this.rowCount;i++){               this.tbl.deleteRow(0);             }             this.body = [];             this.init();             this.speed = 250;         },         //加速         speedUp: function(time){           if(!this.paused){             if(this.speed+time<10||this.speed+time>2000){               return;             }             this.speed +=time;             this.pause();             this.move();           }         },         //產生食物。         generateDood: function(){           var colors = ['red','orange','yellow','green','blue','purple','#ccc'];         var x = Math.floor(Math.random()*this.colCount);             var y = Math.floor(Math.random()*this.rowCount);             var colorIndex = Math.floor(Math.random()*7);             if(!this.isCellFilled(x,y)){                 this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];             }         }     }; </script> <body onload="Snake.init();"> /*************************************************************<br /> * javascript貪吃蛇 v2.4<br /> **************************************************************/<br /> <table id="main" border="1" cellspacing="0" cellpadding="0"></table> <input type="button" id="btn" value="開始/暫停" />點左邊按鈕或按Enter開始/暫停游戲<br /> <input type="button" id="reset" value="重新開始" /><br /> <input type="button" id="upSpeed" value="加速" />點左邊按鈕或按Ctrl + ↑加速<br /> <input type="button" id="downSpeed" value="減速" />點左邊按鈕或按Ctrl + ↓減速 <script>   $('btn').onclick = function(){     if(Snake.paused){       Snake.move();       Snake.paused = false;     }     else{       Snake.pause();       Snake.paused = true;     }   };   $("reset").onclick = function(){     Snake.restart();     this.blur();   };   $("upSpeed").onclick = function(){     Snake.speedUp(-20);   };   $("downSpeed").onclick = function(){     Snake.speedUp(20);   }; </script> </body> </html>
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved