js贪吃蛇

想起不来之前在哪里看到过这个贪吃蛇代码,这里做一下笔记。

<!DOCTYPE HTML>
<html lang='en'>
	<head>
		<meta charset='utf-8'>
		<title>document</title>
		<style>
			*{
				margin: 0;
				padding: 0;
			}
			canvas{
				background-color: black;
				border: 1px solid black;
			}
		</style>
	</head>
	<body>
		<canvas width = '400' height='400'></canvas>
		<script>
			var pen = document.querySelector('canvas').getContext('2d')
			 //在canvas上获取2d画笔
			var snake = [42, 41];
			//蛇的坐标,42 % 20 = 2  ~~(42 / 20) = 2 (2,2)
			// 41 % 20 = 1 ~~(41 / 20) = 2(1,2)
			var food = 43;
			var fx = 1;
			var n;
			function draw(num, c){
				pen.fillStyle = c; // 画画颜色
				pen.fillRect(num % 20 * 20 + 1, ~~(num / 20) * 20 + 1, 18, 18);
				 //填充的正方形
			}
			document.onkeydown = function (e) {
				fx = snake[0] - snake[1] == (n = [-1, -20, 1, 20][(event || e).keyCode - 37] || fx) ? fx : n;
			}
			// 新的蛇头 - 旧的蛇头 = -1,表示向左,= -20,表示向上, 1 表示向右,= 20 表示向下。
			!function (){
				//console.log(1)
				snake.unshift(n = snake[0] + fx); // 给蛇添加蛇头
				draw(n, 'green')
				if(n < 0 || n > 400 || fx == 1 && n % 20 == 0 || fx == -1 && n % 20 == 19) 
				// 如果添加的蛇头 < 0 或者 > 400,或者当方向向右,新的蛇头是第一列的值,,或者当方向向左,新的蛇头是最后一列的值。
					return alert('Game over'); // 以上选项表示超出界限。
				if(n == food){ // 如果新添加的蛇头值 == food值,就不断随机0到400的值,直到随机出的值不在snake数组内,跳出循环,给获得n对应的坐标填充黄色。
					while(snake.indexOf(n = ~~(Math.random() * 400)) >= 0);
					//console.log(n)
					food = n
					draw(n, 'yellow');
				}else
					draw(snake.pop(), 'black');
					console.log(snake)
				// 把pop出的蛇尾巴变成黑色,与背景融为一体。
					setTimeout(arguments.callee,180) //表示延时器,每个180s执行该函数
			}()
		</script>
	</body>
</html>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值