zoukankan      html  css  js  c++  java
  • 贪吃蛇-html

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <title>Snke-L</title>
      5     
      6     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
      7     <meta http-equiv="description" content="this is my page">
      8     <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      9     
     10     <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
     11     <style type="text/css">
     12         body{
     13         background:#9E9ED8;
     14         }
     15         h1{
     16         text-align:center;
     17         font-family:"楷体";
     18         text-shadow:2px 2px 5px #000;
     19         color:#fff;
     20         }
     21         .info{
     22         background:#fff;
     23         width:50%;
     24         margin:0 auto;
     25         font-size:16px;
     26         font-family:"宋体";
     27         text-align:center;
     28         box-shadow:1px 2px 5px #000;
     29         }
     30     </style>
     31   </head>
     32   <!--
     33        onload="say('大家好!我是贪吃蛇页面,加载完毕!');"
     34        <body> 页面加载之后弹出对话框
     35   -->
     36   <body>
     37     <h1>L-贪吃蛇游戏开发</h1>
     38     <div align=center>
     39         <div class = "info">分数:<span id="scoreSpan"></span>&nbsp;&nbsp;&nbsp;&nbsp;速度:<span id="speedSpan"></span></div>
     40         <canvas align=center id="myCanvas" width="450" height="450" 
     41         style="border:1px solid #000;background:rgba(46, 122, 125, 0.58);">
     42         </canvas>
     43         <audio src="bg.mp3" id="bg" ></audio>
     44     </div>
     45         <!--
     46             第一部分:可见的部分
     47             1.绘制表格 长30 宽30 每个正方形的格子边长 15
     48             2.在第一行画一条蛇
     49             3.在最中央画一个食物
     50             
     51             第二部分:让蛇动起来(通过键盘上下左右控制)
     52             1.先让蛇的头部动
     53             2.让身体跟着头一起动
     54                 (算法)
     55             3.让蛇可以吃食物
     56                 (1)增加身体长度
     57                 (2)产生新食物
     58                 (3)将食物产生的位置随机
     59             第三部分:(自动运动,判断蛇的死亡)
     60         -->
     61         <script type="text/javascript">
     62             //获取绘图的环境
     63             var canvas = document.getElementById("myCanvas");
     64             var cxt = canvas.getContext("2d");
     65             var width = 15;
     66             var flag = false;
     67             var score = 0;
     68             var speed = 500;
     69             //绘制一个表格 30*30
     70             //绘图前,需要清空画板
     71             cxt.clearRect(0,0,450,450);
     72             cxt.strokeStyle = "white";
     73             //代表蛇的身体节点
     74             //X 横向坐标
     75             //Y 纵向坐标
     76             //F 移动方向    上    2    下    -2    左    1    右    -1
     77             function Cell(x,y,f){
     78                 this.x = x;
     79                 this.y = y;
     80                 this.f = f;
     81                 
     82             }
     83             //定义食物对象
     84             function Food(x,y){
     85                 this.x = x;
     86                 this.y = y;
     87             }
     88             //在中间产生一个食物
     89             var food = new Food(15,15);
     90             //初始化蛇的身体
     91             var snake = []; //蛇 数组
     92             var length = 6;
     93             //    上    2    下    -2    左    1    右    -1
     94             for(var i = 0;i < length;i++){
     95                 snake[i] = new Cell(i,0,-1);
     96             }
     97             
     98             //画制蛇的身体
     99             function drawSnake(){
    100                 cxt.clearRect(0,0,450,450);
    101                 cxt.strokeStyle = "white";
    102 /*                 //纬界线--start
    103                 for(var i = 0;i < 30;i++ ){
    104                     cxt.beginPath();//表示开始 路径
    105                     cxt.moveTo(0,i*width);//画笔起点位置
    106                     cxt.lineTo(450,i*width);//画笔结束位置
    107                     cxt.closePath();
    108                     cxt.stroke();//画制
    109                 }
    110                 //end--纬界线
    111                 
    112                 //经界线--start
    113                 for(var i = 0;i<30;i++){
    114                     cxt.beginPath();//表示开始 路径
    115                     cxt.moveTo(width*i,0);//画笔起点位置
    116                     cxt.lineTo(width*i,450);//画笔结束位置
    117                     cxt.closePath();
    118                     cxt.stroke();//画制
    119                 }            
    120                 //end--经界线
    121  */                for(var i = 0;i<snake.length;i++){
    122                     cxt.fillStyle = "black";
    123                     if(i == snake.length-1){
    124                         cxt.fillStyle = "red";
    125                     }
    126                     cxt.beginPath();
    127                     cxt.rect(snake[i].x*width,snake[i].y*width,width,width);
    128                     cxt.closePath();
    129                     cxt.fill();
    130                 }
    131                 //如果吃到了食物
    132                 var head = snake[snake.length-1];
    133                 if(head.x == food.x && head.y == food.y){
    134                     document.getElementById("bg").play;
    135                     //重新产生食物
    136                     randomFood();
    137                     var newCell = new Cell(head.x,head.y,head.f);
    138                     switch(newCell.f){
    139                         case 2:
    140                             newCell.y--;
    141                             break;
    142                         case 1:
    143                             newCell.x--;
    144                             break;
    145                         case -2:
    146                             newCell.y++;
    147                             break;
    148                         case -1:
    149                             newCell.x++;
    150                             break;
    151                     }
    152                     snake[snake.length] = newCell;
    153                     score+=10;
    154                     if(speed!=50){
    155                         speed-=30;
    156                     }
    157                 }
    158                 document.getElementById("scoreSpan").innerHTML = score;
    159                 document.getElementById("speedSpan").innerHTML = Math.round(1000/speed*100)/100 + "c/s";
    160                 cxt.fillStyle = "white";
    161                 cxt.beginPath();
    162                 cxt.rect(food.x*width,food.y*width,width,width);
    163                 cxt.closePath();
    164                 cxt.fill();
    165             }
    166             //监听键盘事件
    167             document.onkeydown = function(e){
    168                 var code = e.keyCode;
    169                 //    左    37    上    38    右    39    下    40
    170                 var direction; //方向
    171                 //    上    2    下    -2    左    1    右    -1
    172                 switch(code){
    173                     case 37:
    174                         direction = 1;
    175                         break;
    176                     case 38:
    177                         direction = 2;
    178                         break;
    179                     case 39:
    180                         direction = -1;
    181                         break;
    182                     case 40:
    183                         direction = -2;
    184                         break;
    185                 }
    186                 if(code == 32){
    187                     flag = !flag;
    188                 }
    189                 var head = snake[snake.length-1];
    190                 if((head.f+direction)!=0&&code>=37&&code<=40){
    191                     moveSnake(direction);
    192                 }
    193             }
    194             //移动蛇的方法
    195             function moveSnake(direction){
    196                 if(!flag){
    197                     return false;
    198                 }
    199                 var newSnake = [];
    200                 var head = snake[snake.length-1];
    201                 var newCell = new Cell(head.x,head.y,head.f);
    202                 for(var i = 1;i < snake.length;i++){
    203                     newSnake[i-1] = snake[i];
    204                 }
    205                 newSnake[snake.length-1] = newCell;
    206                 newCell.f = direction;
    207                 switch(direction){
    208                 //    上    2    下    -2    左    1    右    -1
    209                     case 2:
    210                         newCell.y--;
    211                         break;
    212                     case 1:
    213                         newCell.x--;
    214                         break;
    215                     case -2:
    216                         newCell.y++;
    217                         break;
    218                     case -1:
    219                         newCell.x++;
    220                         break;
    221                 }
    222                 snake = newSnake;
    223                 if(checkDeath()){
    224                     drawSnake();
    225                 }                
    226             }
    227             //产生随机的食物
    228             function randomFood(){
    229                 //Math.random() 0~1
    230                 var foodX = Math.ceil(Math.random()*28)+1;
    231                 var foodY = Math.ceil(Math.random()*28)+1;
    232                 //判断产生的食物是否跟蛇的身体有冲突
    233                 for(var i = 0;i < snake.length;i++){
    234                     //蛇的节点中的坐标跟食物的坐标重叠
    235                     if(snake[i].x==foodX&&snake[i].y==foodY){
    236                         randomFood();
    237                     }
    238                 }
    239                 food = new Food(foodX,foodY);
    240             }
    241             function moveClock(){
    242                 moveSnake(snake[snake.length-1].f);
    243                 setTimeout("moveClock()",speed)
    244             }
    245             function checkDeath(){
    246                 var head = snake[snake.length-1];
    247                 //判断是不是跨过了边界
    248                 if(head.x>=30||head.y>=30||head.x<0||head.y<0){
    249                     alert("Game Over");
    250                     window.location.reload();
    251                     flag = false;
    252                     return false;
    253                 }
    254                 //判断是不是咬了自己
    255                 for(var i = 0;i < snake.length-1;i++){
    256                     if(head.x==snake[i].x&&head.y==snake[i].y){
    257                         alert("Game Over");
    258                         window.location.reload();
    259                         flag = false;
    260                         return false;
    261                     }
    262                 }
    263                 return true;
    264             }
    265             drawSnake();
    266             moveClock();
    267         </script>
    268   </body>
    269 </html>
  • 相关阅读:
    linq to access 简单实现 实例demo
    FCKEDITOR中文使用说明 js调用
    asp.net mvc 随想
    fccms 小型简单个人blog源码
    PHP文件上传路径
    前端优化技巧(一)
    会话框拖拽效果实现
    phpmailer配置
    上传图片动态预览(兼容主流浏览器)
    Java将多个list对象根据属性分组后合并成一个新的集合
  • 原文地址:https://www.cnblogs.com/zzuLiang/p/4677078.html
Copyright © 2011-2022 走看看