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/
  • 相关阅读:
    Spring Boot 自定义属性 以及 乱码问题
    IDEA 修改文件编码
    Gojs简单例子
    无法转换json问题 Error: Model.nodeDataArray value is not an instance of Array or NodeList or HTMLCollection
    java json转换
    git设置HTTP代理
    thymeleaf中的日期格式化
    thymeleaf:字符串Strings常见的使用方法
    thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
    Thymeleaf教程 (十二) 标签内,js中使用表达式
  • 原文地址:https://www.cnblogs.com/miria-486/p/8472613.html
Copyright © 2011-2022 走看看