• 贪吃蛇


    这个贪吃蛇是在网上看到的一个例子,于是自己模仿着写了一个

    html代码:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>贪吃蛇</title>
     5     <meta charset="UTF-8">
     6     <meta name="keywords" content="贪吃蛇">
     7     <meta name="Description" content="这是一个初学者用来学习的小游戏">
     8     <style type="text/css">
     9 /*     *{margin:0;} */
    10     .map{
    11         margin:100px auto;
    12         height:600px;
    13         width:900px;
    14         background:#00D0FF;
    15         border:10px solid #AFAEB2;
    16         border-radius:8px;
    17     }
    18     </style>
    19 </head>
    20  
    21 <body>
    22 <div class="map">
    23     <canvas id="canvas" height="600" width="900"></canvas>
    24 </div>
    25  
    26 <script src="snake.js"> </script>
    27 </body>
    28 </html>

    JavaScript代码:

      1  
      2     //获取绘制工具
      3     var c=document.getElementById("canvas");
      4     var ctx=c.getContext("2d");
      5  
      6     var snake =[];//定义一条蛇,画蛇的身体
      7     var snakeCount = 6;//初始化蛇的长度
      8     var foodx =0;
      9     var foody =0;
     10     var togo =0;
     11     function drawtable()//画地图的函数
     12     {
     13         for(var i=0;i<60;i++)//画竖线
     14         {
     15             ctx.strokeStyle="yellow";
     16             ctx.beginPath();
     17             ctx.moveTo(15*i,0);
     18             ctx.lineTo(15*i,600);
     19             ctx.closePath();
     20             ctx.stroke();
     21         }
     22         for(var j=0;j<40;j++)//画横线
     23         {
     24             ctx.strokeStyle="yellow";
     25             ctx.beginPath();
     26             ctx.moveTo(0,15*j);
     27             ctx.lineTo(900,15*j);
     28             ctx.closePath();
     29             ctx.stroke();
     30         }
     31         
     32         for(var k=0;k<snakeCount;k++)//画蛇的身体
     33             {
     34             ctx.fillStyle="black";
     35             if(k==snakeCount-1)
     36             {
     37                 ctx.fillStyle="red";//蛇头的颜色与身体区分开
     38             }
     39             ctx.fillRect(snake[k].x,snake[k].y,15,15);//前两个数是矩形的起始坐标,后两个数是矩形的长宽。
     40             
     41             }
     42             //绘制食物    
     43             ctx.fillStyle ="black";
     44             ctx.fillRect(foodx,foody,15,15);
     45         // ctx.fill();
     46     }
     47      
     48     function start()//定义蛇的坐标
     49     {
     50         //var snake =[];//定义一条蛇,画蛇的身体
     51         //var snakeCount = 6;//初始化蛇的长度
     52         //蛇总是从左上角出发
     53         for(var k=0;k<snakeCount;k++)
     54             {
     55                 snake[k]={x:k*15,y:0};    
     56             }
     57           drawtable();
     58           addfood();//在start中调用添加食物函数 
     59     }
     60  
     61     function addfood()
     62     {
     63     foodx = Math.floor(Math.random()*60)*15; //随机产生一个0-1之间的数
     64     foody = Math.floor(Math.random()*40)*15;
     65         
     66         for (var k=0;k<snake;k++)
     67         {
     68             if (foodx==snake[k].x&&foody==sanke[k].y)//防止产生的随机食物落在蛇身上
     69             {    
     70             addfood();
     71             }
     72         }
     73     }    
     74 
     75    function move()
     76    {
     77     switch (togo)
     78     {
     79     case 1: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y}); break;//向左走
     80     case 2: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15}); break;
     81     case 3: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y}); break;
     82     case 4: snake.push({x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15}); break;
     83     case 5: snake.push({x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y-15}); break;
     84     case 6: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y+15}); break;
     85     default: snake.push({x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});
     86     }
     87     snake.shift();//删除数组第一个元素
     88        ctx.clearRect(0,0,900,600);//清除画布重新绘制
     89        isEat();
     90     isDead();
     91     drawtable();
     92    }             
     93    
     94    function keydown(e)
     95    {
     96    switch(e.keyCode)
     97         {
     98          case 37: togo=1; break;
     99          case 38: togo=2; break;
    100          case 39: togo=3; break;
    101          case 40: togo=4; break;
    102          case 65: togo=5; break;
    103          case 68: togo=6; break;
    104         }
    105    }
    106    
    107    function isEat()//吃到食物后长度加1
    108    {
    109     if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody)
    110    {
    111         addfood();
    112         snakeCount++;
    113         snake.unshift({x:-15,y:-15});
    114    }
    115    
    116    }
    117    
    118    function isDead()
    119    {
    120     if (snake[snakeCount-1].x>885||snake[snakeCount-1].y>585||snake[snakeCount-1].x<0||snake[snakeCount-1].y<0)
    121         {
    122         alert("You are dead,GAME OVER!!!");
    123         clearInterval(move);
    124         //window.location.reload();
    125         }
    126    }
    127    
    128     document.onkeydown=function(e)
    129 {
    130     keydown(e);
    131  
    132 } 
    133 window.onload = function()//调用函数
    134 { 
    135     start();
    136     setInterval(move,100);
    137 //    drawtable();
    138 }
  • 相关阅读:
    opensuse字符和图形界面
    Eclipse编辑器小手段
    切换运行时用户以及用户组
    PHP安装和配置
    Linux程序资源限制简述
    test2234343
    找回Svn和Git不见的文件图标
    SourceInsight使用技巧
    Javascript数组使用方法
    MySQL安装和配置
  • 原文地址:https://www.cnblogs.com/yizhiran/p/12290904.html
Copyright © 2020-2023  润新知