计算机软件技术实习 项目二 贪吃蛇的游戏开发(游戏逻辑的JS实现)2-(4)

10 篇文章 0 订阅
2 篇文章 0 订阅

目录

一、简单介绍

二、代码实现


一、简单介绍

        这个贪吃蛇的基本逻辑是基于js20行贪吃蛇代码,这个代码看起来十分短小,但实现了贪吃蛇的所有要求。如,蛇的移动,吃豆子等等。有一点不好,为了追求极简风格,在格式和变量的命名上会有一些问题,导致很难看懂。如果有兴趣可以去搜一下,网上一搜一大把。我为了达到老师的实习要求,在此基础上,增加了计分功能和暂停游戏。

二、代码实现

        主要的东西在注释中已经很详细了,不做过多解释。

<script>
			var snake = [42, 41],//蛇
				douZi = 43,//豆子
				FangXiang = 1,//方向
				score = 0,//得分
				n,//与蛇的移动有关
				isStop = false,//判断游戏是否暂停,初始化为未暂停
				ctx = document.getElementById("can").getContext("2d");//画背景

			/**
			* 吃掉食物后调用的函数
			*/
			function draw(t, color) {
				ctx.fillStyle = color;
				ctx.fillRect(t % 20 * 20 + 1, ~~(t / 20) * 20 + 1, 18, 18);
			}

			/**
			* 用键盘控制蛇移动的方向的函数
			*/
			document.onkeydown = function (e) {
				FangXiang = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(e || event).keyCode - 37] || FangXiang) ? FangXiang : n
			};

			/**
			 *如果鼠标点击暂停按钮,isStop变为true,一下暂停 
			 */
			document.getElementById("stop").onclick = function (e) {
				if (isStop == false) {
					isStop = true;
				} else {
					isStop = false;
				}
			}

			/**
			 * 游戏逻辑控制兼主函数
			 */
			! function () {

				//如果游戏没有暂停,蛇向前移动(蛇头加一),并且如果按了上下左右键,蛇的运动方向改变
				if (isStop == false) {
					snake.unshift(n = snake[0] + FangXiang);

					//如果撞墙或撞到自己,游戏结束,在弹窗显示游戏结束和分数
					if (snake.indexOf(n, 1) > 0 || n < 0 || n > 399 || FangXiang == 1 && n % 20 == 0 || FangXiang == -1 && n % 20 == 19)
						return alert("GAME OVER" + " " + "你的分数是:" + (score - 1));
					draw(n, "Lime");

					//如果吃到了豆子,产出新豆子,分数加一
					if (n == douZi) {
						while (snake.indexOf(douZi = ~~(Math.random() * 400)) >= 0);//随机产生新豆子
						draw(douZi, "Yellow");//豆子颜色是黄色
						document.getElementById("score").innerHTML = score;//更新分数
						score += 1;//分数加一
					}

					//没有吃到蛋也没死,向前走(蛇尾去掉,变为黑色)
					else
						draw(snake.pop(), "Black");
				}

				//如果游戏暂停了,蛇停止更新
				else {
					snake.unshift();
				}

				//设定蛇移动的速度(每隔0.13秒执行一次此函数,改变数字,可以改变蛇移动的速度)
				setTimeout(arguments.callee, 130);
			}();
		</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

段小刀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值