利用ChatMe写一个简易的贪吃蛇小游戏 (有效可用)

博主使用ChatMe生成了一个贪吃蛇小游戏的代码,代码包含HTML和JS,但存在无法暂停和回车加速的问题。经过优化,虽然实现了暂停功能,但加速问题仍未解决。ChatMe在生成代码时展现了良好的编码规范,但逻辑处理仍有待加强。
摘要由CSDN通过智能技术生成

前序:前一段时间在都以上看到国内利用ChatGpt 3 做了一个手机软件,今天休息没事就用了一下,看看有没有什么有意思的事情,于是就利用他做了一个贪吃蛇的网页小游戏

有想了解ChatMe的朋友可以通过链接看一下他的抖音账号ChatMe抖音账号

聊天截图:

当然过程之中忘记截图了,没法让大家直观地感受到他的生成速度,主观来讲的话还是不慢的,怎么形容呢,跟大家平时用小黑窗口运行代码时的输出速度差不多,这里他不仅生成了js代码,也把html页面中的标签在最近下面告诉我们,基本就是无脑cv了,方便大家观看我把他回复的部分一代码形式呈现给大家,也方便大家复制

好的,下面是一份可用的贪吃蛇游戏代码,注释以及简单的关卡和速度设置。
```javascript
// 获取 canvas 元素
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

// 设置 canvas 大小
canvas.width = 400;
canvas.height = 400;

// 定义变量和常量
const blockSize = 10; // 块大小
let snake = [{x: 20, y: 20}]; // 蛇的初始位置
let direction = 'right'; // 蛇的初始方向
let food = null; // 食物初始位置
let score = 0; // 初始得分
let interval = null; // 计时器

// 画出蛇和食物
function draw() {
  // 清空画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  
  // 画蛇
  snake.forEach((block) => {
    ctx.fillStyle = 'green';
    ctx.fillRect(block.x, block.y, blockSize, blockSize);
  });
  
  // 画食物
  if (food) {
    ctx.fillStyle = 'red';
    ctx.fillRect(food.x, food.y, blockSize, blockSize);
  }
}

// 生成随机食物
function generateFood() {
  const x = Math.floor(Math.random() * (canvas.width / blockSize)) * blockSize;
  const y = Math.floor(Math.random() * (canvas.height / blockSize)) * blockSize;
  
  // 如果食物与蛇重合,重新生成
  if (snake.some((block) => block.x === x && block.y === y)) {
    generateFood();
  } else {
    food = {x, y};
  }
}

// 移动蛇
function move() {
  // 添加一个新的蛇头
  let x = snake[0].x;
  let y = snake[0].y;
  switch (direction) {
    case 'up':
      y -= blockSize;
      break;
    case 'down':
      y += blockSize;
      break;
    case 'left':
      x -= blockSize;
      break;
    case 'right':
      x += blockSize;
      break;
  }
  
  // 如果蛇吃到了食物,长度加一,重新生成食物
  if (x === food.x && y === food.y) {
    snake.unshift({x, y});
    score++;
    generateFood();
  } else {
    // 否则移除最后一个块,添加一个新的块
    snake.pop();
    snake.unshift({x, y});
  }
  
  // 如果蛇头撞到了边界或者自己的身体,游戏结束
  if (x < 0 || x >= canvas.width || y < 0 || y >= canvas.height || snake.some((block, index) => index > 0 && block.x === x && block.y === y)) {
    clearInterval(interval);
    alert(`游戏结束!得分:${score}`);
  }
  
  draw();
}

// 开始游戏
function start() {
  // 初始化蛇和食物
  snake = [{x: 20, y: 20}];
  direction = 'right';
  generateFood();
  score = 0;
  
  // 设置速度
  const speed = document.getElementById('speed').value;
  interval = setInterval(move, speed);
}

// 监听键盘事件
document.addEventListener('keydown', (event) => {
  switch (event.keyCode) {
    case 37:
      if (direction !== 'right') {
        direction = 'left';
      }
      break;
    case 38:
      if (direction !== 'down') {
        direction = 'up';
      }
      break;
    case 39:
      if (direction !== 'left') {
        direction = 'right';
      }
      break;
    case 40:
      if (direction !== 'up') {
        direction = 'down';
      }
      break;
  }
});

// 开始按钮点击事件
document.getElementById('start').addEventListener('click
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ashindn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值