• 原生js贪吃蛇


    自己来写了一遍原生js的贪吃蛇,素材没找好长得有点丑,功能上满足了,还有一点小bug,转向不能按太快容易出bug,加锁应该可以解决,有时间再加可变难度,背景素材,功能反正先实现到这;

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>贪吃蛇</title>
     6     <link rel="stylesheet" href="css/css.css">
     7 </head>
     8 <body>
     9 <div class="box">
    10     <div id="wrapper"></div>
    11     <div>
    12 
    13         <input type="button" id="button" value="开始游戏">
    14         <span id="score">分数:</span>           
    15     </div>
    16 </div>
    17 <script src="js/demo.js" type="text/javascript"></script>
    18 </body>
    19 </html>
    HTML
     1 * {
     2     margin: 0;
     3     padding: 0;
     4     
     5 }
     6 .box {
     7     width: 1190px;
     8     margin: 10px auto;
     9     position: relative;
    10 }
    11 
    12 #wrapper {
    13     width: 800px;
    14     height: 600px;
    15     position: relative;
    16     border: 1px solid red;
    17     left: 50%;
    18     margin-left: -400px;
    19     margin-top: 30px;
    20 }
    21 #wrapper .body {
    22     background: #00ff80;
    23     border-radius: 6px;
    24 }
    25 #wrapper .food {
    26     background: #ff8000;
    27     border-radius: 6px;
    28 }
    29 
    30 #wrapper .head {
    31     border-radius: 6px;
    32     background: transparent;
    33 }
    34 #wrapper .head::after {
    35     content: "";
    36     width: 0;
    37     height: 2px;
    38     left: 8px;
    39     top: -1px;
    40     border-radius: 6px;
    41     position: absolute;
    42     border: 10px solid transparent;
    43     border-left:10px solid #00ff80;
    44 }
    45 #wrapper .head::before {
    46     content: "";
    47     width: 0;
    48     height: 4px;
    49     left: 0px;
    50     top: -2px;
    51     border-radius: 6px;
    52     position: absolute;
    53     border: 10px solid transparent;
    54     border-left:10px solid #00ff80;
    55 }
    56 
    57 #button {
    58     position: relative;
    59     left: 22%;
    60     margin-top: 20px;
    61     transform: translateX(-50%);
    62     padding: 0 10px;    
    63     height: 50px;
    64     line-height: 50px;
    65     text-align: center;
    66     font-size: 30px;
    67     font-weight: bold;
    68     background: #ff8000;
    69     color: #ffffff;
    70     border-radius: 5px;
    71     border: 0;
    72     cursor: pointer;
    73 }
    74 #score {
    75     position: relative;
    76     left: 20%;
    77     margin-top: 20px;
    78     top: 1px;
    79     transform: translateX(-50%);
    80     padding:5px;    
    81     height: 50px;
    82     line-height: 50px;
    83     text-align: center;
    84     font-size: 30px;
    85     font-weight: bold;
    86     background: #00ff00;
    87     color: #ffffff;
    88     border-radius: 5px;
    89     border: 0;
    90     cursor: pointer;
    91 }
    css
      1 // 思路 :
      2 // 1、初始化:棋盘,蛇,食物;
      3 // 2、蛇动起来,上下左右四个方向;
      4 // 3、判断:蛇头的位置:等于食物蛇+1,等于四周或者等于自身位置,游戏结束;
      5 
      6 
      7 // 初始化
      8 window.onload = function(){
      9     var wrapper = document.getElementById("wrapper");
     10     var wrapperWidth = wrapper.offsetWidth;
     11     var wrapperheight = wrapper.offsetHeight;
     12     // var wrapperleft = wrapper.offsetLeft;
     13     // var wrappertop = wrapper.offsetTop;
     14     var snake = [[3,1,"head"],[2,1,"body"],[1,1,"body"]];
     15     var width = 20; // 元素所占宽度 
     16     var aspect = 39; // 键盘反应keyCode
     17     var foodLeft,foodTop;// 食物位置
     18     var time ; // 定时器
     19     var score = document.getElementById("score");
     20     var bool = true; // 方向锁
     21 
     22 
     23     function init() {
     24         createSnake();
     25         createFood();
     26         // snakeMove("right");
     27         
     28     };
     29     
     30     // 判断结束
     31     function isOver(){
     32         if(snake[0][0] < 0 || snake[0][0] > wrapperWidth/20 - 1 || snake[0][1] < 0 || snake[0][1] > wrapperheight/20 - 1){
     33             return true;
     34         }else {
     35             for (var i = 1; i < snake.length ; i ++){
     36                 if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]){
     37                     return true;
     38                 }
     39             }
     40         }
     41         return false;
     42     }
     43     // 移动 
     44     function snakeMove(){
     45         for (var i = snake.length - 1; i > 0; i --){           
     46             snake[i][0] = snake[i-1][0];
     47             snake[i][1] = snake[i-1][1];
     48         }        
     49         switch (aspect) {
     50             case 39:{                
     51                 snake[0][0] += 1;
     52                 document.getElementsByClassName("head")[0].style.transform = 'rotate(0deg)'; 
     53             }                
     54                 break;        
     55             case 37:{               
     56                 snake[0][0] -= 1;  
     57                 document.getElementsByClassName("head")[0].style.transform = 'rotate(180deg)'; 
     58             }                
     59                 break;        
     60             case 38:{               
     61                 snake[0][1] -= 1;  
     62                 document.getElementsByClassName("head")[0].style.transform = 'rotate(270deg)'; 
     63             }                
     64                 break;        
     65             case 40:{                
     66                 snake[0][1] += 1;  
     67                 document.getElementsByClassName("head")[0].style.transform = 'rotate(90deg)'; 
     68             }                
     69                 break;        
     70             default:
     71                 break;
     72         }                      
     73         if(isOver()){
     74             console.log("over!");
     75             clearInterval(time);
     76         }else {
     77             for (var i = 0; i < snake.length ; i ++){
     78                 wrapper.children[i].style.left = snake[i][0] * width + 'px';
     79                 wrapper.children[i].style.top = snake[i][1] * width + 'px';
     80             }
     81         }
     82         // 改变方向
     83         document.onkeydown = function(event) {
     84             e = event || window.event;            
     85             if (aspect%2 != e.keyCode%2){
     86                 aspect = e.keyCode;
     87             }               
     88         }
     89         if(snake[0][0] == foodLeft && snake[0][1] == foodTop){
     90             var arr = [snake[2][0],snake[2][1],"body"];
     91             snake.push(arr);
     92             wrapper.innerHTML = "";
     93             createSnake();
     94             createFood();
     95         }        
     96     }
     97     // 判断食物位置是否为空位
     98     function isEmpty(){
     99         for (var i = 0; i < snake.length ; i ++){
    100             if (foodLeft == snake[i][0] && foodTop == snake[i][1]){
    101                 return false;                    
    102             }
    103         }
    104         return true;
    105     }
    106     // 创建食物
    107     function createFood(){
    108         for(;;){
    109             foodLeft = Math.floor(Math.random() * (wrapperWidth/20 - 1));
    110             foodTop = Math.floor(Math.random() * (wrapperheight/20 - 1));
    111             if(isEmpty()){
    112                 var food = createSquare(foodLeft,foodTop,"food");
    113                 wrapper.appendChild(food);
    114                 return;
    115             }
    116 
    117             
    118         }               
    119     }
    120     // 创建块方法
    121     function createSquare(left,top,style) {
    122         var square = document.createElement("div");
    123         square.style.position = "absolute";
    124         square.style.width = width - 1 + 'px';
    125         square.style.height = width - 1 + 'px';
    126         square.style.top = top * width + 'px';
    127         square.style.left = left * width + 'px';
    128         square.classList.add(style);
    129         return square;
    130     }
    131     // 创建蛇
    132     function createSnake(){
    133         for(var i = 0 ;i < snake.length; i++){
    134             var temp = createSquare(snake[i][0],snake[i][1],snake[i][2]);
    135             wrapper.appendChild(temp);
    136         }
    137     }
    138     // 显示分数
    139     function showScore(){
    140         score.innerText = "分数: " + (snake.length - 3);
    141     }
    142     init();
    143 
    144     var click = document.getElementById("button");
    145     click.onclick = function(){
    146         time = setInterval(function(){
    147             snakeMove("right");
    148             showScore();
    149         },500)        
    150     }
    151 }
    View Code
  • 相关阅读:
    Firefox+BurpSuite绕过HSTS抓包
    如何在百万行代码中发现隐藏的后门
    10款常见的Webshell检测工具
    真实揭露:一段激情.视频裸.聊被骗的经历
    Kerberos速查表:如何攻击Kerberos
    在线播放视频加密/PDF电子书在线加密
    私人珍藏:WAF攻防实战笔记
    渗透利器 | 提权辅助工具箱
    这些年,我们一直追逐的漏洞利用神器
    如何防止CDN防护被绕过
  • 原文地址:https://www.cnblogs.com/bacydm/p/9766511.html
Copyright © 2020-2023  润新知