js小项目(7)贪吃蛇小游戏

<!DOCTYPE html >
< html lang= "en" >
< head >
     < meta charset= "UTF-8" >
     < title >Document </ title >
</ head >
< link rel= "stylesheet" href= "snake.css" >
< body >
     < div id= "map" ></ div >
     < script >
     var map = {
         width: 900,
         height: 500,
    };
     var box = {
         width: 50,
         height: 50,
    }
     var nums = {
         hnum:map. width/ box. width,
         vnum:map. height/ box. height,
    }
     var DIR = {
         DIR_LEFT: 1,
         DIR_TOP: 2,
         DIR_RIGHT: 3,
         DIR_BOTTOM: 4,
    }
     var dir= DIR. DIR_RIGHT;
     var snake=[];
     var other=[];
     function initMap(){
         var map_target= document. getElementById( "map");
         map_target. style. width= map. width+ "px";
         map_target. style. height= map. height+ "px";
         var newSpan = null;
         for( var i= 1; i<= nums. hnum* nums. vnum; i++){
             var newSpan = document. createElement( 'span');
             newSpan. style. width= box. width+ "px";
             newSpan. style. height= box. height+ "px";
             newSpan. id= i;
             map_target. appendChild( newSpan);
             // console.log(map_target);
             if( i<= 3){
                 newSpan. className = "snake";
                 snake. push( newSpan);
            } else{
                 other. push( newSpan);
            }
        }
    }
     function moveSnake(){
         var headId;
         // console.log(dir);
        
         switch( dir){
             case DIR. DIR_LEFT:
                 headId = parseInt( snake[ snake. length - 1]. id) - 1;
                 if( headId % nums. hnum == 0){
                     headId += nums. hnum;
                }
                 break;
             case DIR. DIR_RIGHT:
                 headId = parseInt( snake[ snake. length - 1]. id) + 1;
                 if( headId % nums. hnum == 1 ){
                     headId -= nums. hnum;
                }
                 break;              
             case DIR. DIR_TOP:
                 headId = parseInt( snake[ snake. length- 1]. id) - nums. hnum;
                 if( headId < 1){
                     headId += nums. hnum * nums. vnum;
                }
                 break;          
             case DIR. DIR_BOTTOM:
                 headId = parseInt( snake[ snake. length- 1]. id) + nums. hnum;
                 if( headId > nums. hnum * nums. vnum){
                     headId -= nums. hnum * nums. vnum;
                }
                 break;
             default:
                 break;              
            
        }
        

         var head= document. getElementById( headId);
         for( var i = 0; i < snake. length; i ++){
             if( headId == snake[ i]. id){
                 alert( "Game over");
                 window. location= window. location;
            }
        }
         var index;
         for( var i= 1; i< other. length; i++){
             if( headId== other[ i]. id){
                 index= i; break;
            }
        }
         // console.log(index);
         other. splice( index, 1);
         snake. push( head);
         if( head. className == "food"){
             // alert(1);
             showFood();
             // console.log(index);
        } else{
             snake[ 0]. className = "";
             other. push( snake. shift());
        }
         head. className = "snake";
    }
     function showFood(){
         // console.log(other.length)
         console. log( 1);     
         var index= Math. floor( Math. random()* other. length);
         other[ index]. className = "food";    
    }
     window. onload= function(){
         initMap();
         setInterval( moveSnake, 200);
         showFood();
         document. onkeydown= function( e){
             switch ( e. keyCode) {
                 case 37:
                     if( dir == DIR. DIR_RIGHT) break; else{ dir = DIR. DIR_LEFT; break}
                 case 38:
                     if( dir == DIR. DIR_BOTTOM) break; else{ dir = DIR. DIR_TOP; break;}
                 case 39:
                     if( dir == DIR. DIR_LEFT) break; else{ dir = DIR. DIR_RIGHT; break}
                 case 40:
                     if( dir == DIR. DIR_TOP) break; else{ dir = DIR. DIR_BOTTOM; break;}
                 default:
                     break;
            }
        }
    }
    
< / script >   
</ body >
</ html >
可以对其进行优化例如加入分数技术,蛇方向的改变优化

猜你喜欢

转载自blog.csdn.net/qq_41208092/article/details/80369213