zoukankan      html  css  js  c++  java
  • 贪吃蛇02---用java script完成贪吃蛇

    <!DOCTYPE html>
    <html>
      <head>
      <meta charset="UTF-8">
        <title>贪吃蛇</title>
      </head>
      
      <body>
       <canvas id="game" width="450" height="450" style="border:1px solid red;margin:30px auto;display:
       block;"></canvas>
       <script type="text/javascript">
         var canvas =  document.getElementById("game");
         //拿到上下文,画图工具
         var cxt = canvas.getContext("2d");
         //每个格子的宽度
         var width = 15;
         //面向对象,蛇的身体是一节一节的
         /*
            定义一个Cell类,具备x和y还具备f
            x和y代表格子的坐标,f代表方向
            f方向
            1代表左,-1代表右
            2代表下,-2代表上
         */
        function Cell(x,y,f){
            this.x=x;
            this.y=y;
            this.f=f;
        }
        function Food(x,y){
            this.x=x;
            this.y=y;
        }
        //蛇的对象  蛇是由Cell组成的
        var snake =[];
        var length = 2;//蛇的长度
        var speed = 100;//100毫秒移动一个单元格
        var food= new Food(15,15);
        //初始化蛇的身体
        for(var i=0;i<length;i++){
         snake[i] = new Cell(i, 0, -1)
        }
        for(var i = 0;i<snake.length;i++){
        var cell= snake[i];
           cxt.fillStyle = "gray";
           if(i==snake.length-1){
             cxt.fillStyle="red";
           }
           cxt.beginPath();
           cxt.rect(cell.x*width ,cell.y*width,width,width);
           cxt.closePath();
           cxt.fill();
        }
         cxt.fillStyle = "green";
           cxt.beginPath();
           cxt.rect(food.x*width ,food.y*width,width,width); 
           cxt.closePath();
           cxt.fill();
           
           //怎么让蛇头跟着键盘动,监听键盘事件
           document.onkeydown = function(e){
             var code = e.keyCode;
             var direction = 0;
             switch(code){
              case 37:direction = 1;break;
              case 38:direction = 2;break;
              case 39:direction = -1;break;
              case 40:direction = -2;break;
              case 87:direction = 2;break;
              case 65:direction = 1;break;
              case 83:direction = -2;break;
              case 68:direction = -1;break;
             }//switch
             var head = snake[snake.length-1];
             if(direction!=0&&(head.f+direction)!=0){
             //调用蛇的移动方法
             moveSnake(direction);
             }//if(direction)
             
           }//function(e)
           function moveSnake(direction){
          
             var head = snake[snake.length-1];//蛇头
             if(!direction){
               direction=head.f;
             }
             var newSnake = [];
             var newHead = new Cell(head.x, head.y, head.f);
             for(var i = 1;i<snake.length;i++){
                newSnake[i-1] = snake[i];
             }
               newHead.f=direction;
               //修改x和y的值
               switch(direction){
                case 1:newHead.x-- ;break;
                 case 2:newHead.y-- ;break;
                  case -1:newHead.x++ ;break;
                   case -2:newHead.y++  ;break;
               }
               newSnake[newSnake.length]=newHead
               snake=newSnake;
               gameOver();
               draw();
             }
              function gameOver(){
             //检查撞到游戏的边框
             var head = snake[snake.length-1];
               if(head.x>=30||head.y>=30||head.x<0||head.y<0){
                  alert("撞墙,游戏结束");
                  window.location.reload();
               }
               //不能咬到自己
               for(var i=0;i < snake.length-1;i++){
                 if(snake[i].x == head.x && snake[i].y == head.y){
                               alert("撞到自己了,游戏结束");
                  window.location.reload();
                 }
               }
              }
             function draw(){
              cxt.clearRect(0, 0, 450, 450);
           cxt.fillStyle = "green";
           cxt.beginPath();
           cxt.rect(food.x*width ,food.y*width,width,width); 
           cxt.closePath();
           cxt.fill();
           //判断蛇的蛇头是不是和食物的坐标重合
           var head = snake[snake.length-1];
            if(head.x==food.x&&head.y==food.y){
              var newHead = new Cell(head.x, head.y, head.f);
               //修改x和y的值
               switch(newHead.f){
                case 1:newHead.x-- ;break;
                 case 2:newHead.y-- ;break;
                  case -1:newHead.x++ ;break;
                   case -2:newHead.y++  ;break;
               }
               snake[snake.length] = newHead; 
               randFood(); 
            }
             for(var i = 0;i<snake.length;i++){
             var cell= snake[i];
             cxt.fillStyle = "gray";
             if(i==snake.length-1){
             cxt.fillStyle="red";
           }
           cxt.beginPath();
           cxt.rect(cell.x*width ,cell.y*width,width,width);
           cxt.closePath();
           cxt.fill();
           }
             }
             function randFood(){
                food.x=Math.ceil(Math.random()*28)+1;
                food.y=Math.ceil(Math.random()*28)+1;
             }
             var autoRun = setInterval(moveSnake,speed); 
        </script>
      </body>
    </html>
     
    
    https://necydcy.me/
  • 相关阅读:
    macbook 无声音解决方案
    webapck dev server代理请求 json截断问题
    百度卫星地图开启
    服务器 nginx配置 防止其他域名绑定自己的服务器
    记一次nginx php配置的心路历程
    遇到npm报错read ECONNRESET怎么办
    运行svn tortoiseSvn cleanup 命令失败的解决办法
    svn add 命令 递归目录下所有文件
    m4出现Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
    Ubuntu下安装GCC,mpc、mpfr、gmp
  • 原文地址:https://www.cnblogs.com/miria-486/p/8472613.html
Copyright © 2011-2022 走看看