跳转到内容
aswind7
GitHub
Blog

贪吃蛇

原生dom实现的贪吃蛇

鼠标操作上下左右箭头 利用dom来演示,点击查看效果: demo

核心算法


// 产生一个食物
function makeFood() {
	var temp = Math.random() * 20; // temp 值为[0, 20)
	var x = Math.floor(Math.random() * 20);
	var y = Math.floor(Math.random() * 20);
	// console.log(snake);
	food = [x, y];
	//若产生的食物坐标是蛇身体,则重新产生
	// 由于index不能数组找数组,所以转换为字符串查找
	while (snake.join("").indexOf(food.join("")) != -1) {
		food = [Math.floor(Math.random() * 20), Math.floor(Math.random() * 20)];
	}
	// console.log("最终的食物坐标" + food[0] + food[1]);
	getTd(food[0], food[1]).id = "food";
	foodCount++;
}

function action(t) {
	var head = getSnakeHead(t);
	var flag = 0; //看撞墙,吃食物,或者正常前进的状态
	//看是否撞墙撞身体
	if (judgeWall(head[0], head[1], t) || judgeBody(head[0], head[1], t)) {
		flag = 1;
		gameOver();
		return;
	}
	// 看是否有食物,若有食物则不move了,只需要重新渲染蛇等
	if (judgeFood(head[0], head[1], t)) {
		flag = 2;
		getTd(food[0], food[1]).id = ""; //食物消失
		foodCount--;
		score++; //加分数
		showScore.innerHTML = "分数是:" + score;
		snake.push([food[0], food[1]]);
		renderSnake(); //重新渲染蛇
		makeFood();
	}
	// 既没有撞墙也没有食物,则move
	if (flag == 0) {
		move(t);
	}
}