鱼C论坛

 找回密码
 立即注册
查看: 1679|回复: 4

[作品展示] 使用html5编写的贪吃蛇

[复制链接]
发表于 2024-1-27 14:34:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一点沙 于 2024-1-27 14:35 编辑
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.    <meta charset="UTF-8">
  5.    <title>贪吃蛇晓铀袭</title>
  6.    <style>
  7.        body {
  8.            display: flex;
  9.            height: 100vh;
  10.            margin: 0;
  11.            padding: 0;
  12.            justify-content: center;
  13.            align-items: center;
  14.        }
  15.    </style>
  16. </head>
  17. <body>
  18.    <canvas id="can" width="400" height="400" style="background-color: black">对不起,您的浏览器不支持canvas</canvas>
  19.    <script>
  20.        var snake = [41, 40],       //snake队列表示蛇身,初始节点存在但不显示
  21.            direction = 1,          //1表示向右,-1表示向左,20表示向下,-20表示向上
  22.            food = 43,              //食物的位置
  23.            n,                      //与下次移动的位置有关
  24.            box = document.getElementById('can').getContext('2d');
  25.                                    //从0到399表示box里[0~19]*[0~19]的所有节点,每20px一个节点

  26.        function draw(seat, color) {
  27.            box.fillStyle = color;
  28.            box.fillRect(seat % 20 *20 + 1, ~~(seat / 20) * 20 + 1, 18, 18);
  29.                                    //用color填充一个矩形,以前两个参数为x,y坐标,后两个参数为宽和高。
  30.        }

  31.        document.onkeydown = function(evt) {   
  32.                                    //当键盘上下左右键摁下的时候改变direction
  33.            direction = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(evt || event).keyCode - 37] || direction) ? direction : n;
  34.        };

  35.        !function() {
  36.            snake.unshift(n = snake[0] + direction);   
  37.                                    //此时的n为下次蛇头出现的位置,n进入队列
  38.            if(snake.indexOf(n, 1) > 0 || n < 0 || n > 399 || direction == 1 && n % 20 == 0 || direction == -1 && n % 20 == 39) {
  39.                                    //if语句判断贪吃蛇是否撞到自己或者墙壁,碰到时返回,结束程序
  40.                return alert("GAME OVER!");
  41.            }
  42.            draw(n, "lime");        //画出蛇头下次出现的位置
  43.            if(n == food) {         //如果吃到食物时,产生一个蛇身以外的随机的点,不会去掉蛇尾
  44.                while (snake.indexOf(food = ~~(Math.random() * 400)) > 0);
  45.                draw(food, "yellow");
  46.            } else {                //没有吃到食物时正常移动,蛇尾出队列
  47.                draw(snake.pop(),"black");
  48.            }
  49.            setTimeout(arguments.callee, 150);      
  50.                                    //每隔0.15秒执行函数一次,可以调节蛇的速度
  51.        }();
  52.    </script>
  53. </body>
  54. </html>
复制代码


在记事本里复制进去,把后缀名改成.html,然后双击运行。
如果好玩麻烦评个分谢谢

评分

参与人数 2荣誉 +10 鱼币 +5 贡献 +6 收起 理由
歌者文明清理员 + 5 + 3
cjjJasonchen + 5 + 5 + 3 无条件支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-27 16:36:01 | 显示全部楼层
厉害
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-1-27 16:41:32 | 显示全部楼层
看起来不错哦,学习亿下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-3 11:29:27 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-4-21 22:33:31 | 显示全部楼层
赞  不错哟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表