JS的小游戏"贪吃蛇"

贪吃蛇儿时的回忆,今天刚好学习到这了,就刚好做了一个,也是学习了吧,需要掌握的知识:

  1,JS函数的熟练掌握,

  2,JS数组的应用,

  3,JS小部分AJAX的学习

  4,JS中的splice、shift等一些函数的应用,

基本上就这些吧,下面提重点部分:

  前端的页面,这里可自行布局,我这边提供一个我自己的布局:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title>贪吃蛇</title>
	<link rel="stylesheet" type="text/css" href="./css.css">
	<script type="text/javascript" src="./jquery-1.7.2.min.js"></script>
	<script type="text/javascript" src="./js.js"></script>
</head>
<body>
	<div id="info">
		<div id="score">0</div>
		<form action="" id="form" name="form">
			<input type="radio" name=‘time‘ value="500" checked=‘checked‘/>简单
			<input type="radio" name=‘time‘ value="300"/>中等
			<input type="radio" name=‘time‘ value="150"/>高级
			<input type="radio" name=‘time‘ value="50"/>神速
			<input type="button" value="开始" class="button" id="start"/>
			<input type="button" value="重玩" class="button" id="res"/>
		</form>

	</div>
	<div id="main">
		<div id="home">
			<!--<div style="background:url(./images/snake0.png) no-repeat;"></div>
			<div style="background:url(./images/snake1.png) no-repeat; left:20px;"></div>
			<div style="background:url(./images/snake2.png) no-repeat; left:40px;"></div>
			<div style="background:url(./images/snake3.png) no-repeat; left:60px;"></div>-->
		</div>
		<div class="wall left"></div>
		<div class="wall right"></div>
		<div class="wall top"></div>
		<div class="wall bottom"></div>
	</div>
</body>
</html>

这里是css代码:

*{padding: 0px; margin: 0px;font-size: 12px}
body{background: #ccc}
input.button{
	width: 60px;
	cursor: pointer;
}
#info{
	width: 540px;
	height: 30px;
	margin: 30px auto 5px;
	line-height: 30px;
}
#score{
	width: 73px;
	height: 28px;
	padding-left: 64px;
	background: url(./images/score.png) no-repeat;
	float: left;
	font-size: 14px;
	font-weight: 700;
	font-style:italic;
	font-family: ‘微软雅黑‘;
}
#form{
	float: right;
}
#form input{
	vertical-align: middle;
	margin-right: 5px;
}
#main{
	width: 540px;
	height: 500px;
	margin: 0 auto;
	position: relative;
	/*background: #71a000*/

}
#main div{
	width: 20px;
	height: 20px;
	position: absolute;
}
#main #home{
	width: 500px;
	height: 460px;
	left: 20px;
	top: 20px;
	position: relative;
	background: url(./images/background.jpg) no-repeat;
}
#main #home div{
	position: absolute;
}
#main div.wall{
	width: 540px;
	height: 20px;
	background: url("./images/div.jpg") repeat-x;
	position: absolute;
}
#main div.top{
	left:0px;
	top:0px;
}

#main div.bottom{
	left:0px;
	top:480px;
}
#main div.left{
	width: 20px;
	height: 500px;
	background: url(./images/div.jpg) repeat-y;
	left:0px;
	top:0px;
}
#main div.right{
	width: 20px;
	height: 500px;
	background: url(./images/div.jpg) repeat-y;
	left:520px;
	top:0px;
}

.l{
	-moz-transform:rotate(0deg);
	-o-transform:rotate(0deg);
	-webkit-transform:rotate(0deg);
	transform:rotate(0deg);
	/* IE8+ - must be on one line, unfortunately */
	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=1, M12=0, M21=0, M22=1, SizingMethod=‘auto expand‘)";
	/* IE6 and 7 */
	filter: progid:DXImageTransform.Microsoft.Matrix(            M11=1,            M12=0,            M21=0,            M22=1,            SizingMethod=‘auto expand‘);
}
.t{
	-moz-transform:    rotate(90deg);     -o-transform:      rotate(90deg);     -webkit-transform: rotate(90deg);     transform:         rotate(90deg);
	/* IE8+ - must be on one line, unfortunately */    -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=-1.8369701987210297e-16, M12=-1, M21=1, M22=-1.8369701987210297e-16, SizingMethod=‘auto expand‘)";      /* IE6 and 7 */    filter: progid:DXImageTransform.Microsoft.Matrix(            M11=-1.8369701987210297e-16,            M12=-1,            M21=1,            M22=-1.8369701987210297e-16,            SizingMethod=‘auto expand‘);

}
.r{
	-moz-transform:    rotate(180deg);     -o-transform:      rotate(180deg);     -webkit-transform: rotate(180deg);     transform:         rotate(180deg);
	 /* IE8+ - must be on one line, unfortunately */    -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=-1, M12=1.2246467991473532e-16, M21=-1.2246467991473532e-16, M22=-1, SizingMethod=‘auto expand‘)";      /* IE6 and 7 */    filter: progid:DXImageTransform.Microsoft.Matrix(            M11=-1,            M12=1.2246467991473532e-16,            M21=-1.2246467991473532e-16,            M22=-1,            SizingMethod=‘auto expand‘);

}
.b{
	-moz-transform:    rotate(270deg);     -o-transform:      rotate(270deg);     -webkit-transform: rotate(270deg);     transform:         rotate(270deg);
	/* IE8+ - must be on one line, unfortunately */    -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=6.123233995736766e-17, M12=1, M21=-1, M22=6.123233995736766e-17, SizingMethod=‘auto expand‘)";      /* IE6 and 7 */    filter: progid:DXImageTransform.Microsoft.Matrix(            M11=6.123233995736766e-17,            M12=1,            M21=-1,            M22=6.123233995736766e-17,            SizingMethod=‘auto expand‘);

}

JS公共文件

var home = $(‘#home‘);
	var snakeArr = [];
	var direcation = ‘l‘;
	var speed = 0;
	var timer = ‘‘;
	//460/20
	var rows = 23;
	var cols = 25;
	var die = false;			//用于判断是否game over
	var food = [];
	var sorce = 0;				//得分的显示

首先要想有snake就必须创造snake,

for( var i=0; i<4; i++ ){
		//var snakeDiv = document.createElement("div");
		//snakeDiv.style = ‘background:url(./images/snake‘ + i + ‘.png) no-repeat;‘;
		var snakeDiv = $(‘<div style="background:url(./images/snake‘ + i + ‘.png) no-repeat;z-index:999"></div>‘);
		home.append(snakeDiv);
		snakeArr[i] = {r : 10, c : 10 + i, div : snakeDiv, d : direcation};
		setPosition(snakeArr[i]);
	}

有snake之后,自然就是移动了(move):

function  move(){
		var timer = setInterval(function(){
		for( var i=snakeArr.length -1; i>0; i-- ){
			snakeArr[i].c = snakeArr[i-1].c;
			snakeArr[i].r = snakeArr[i-1].r;
			snakeArr[i].d = snakeArr[i-1].d;
			}

			switch(direcation){
			case ‘l‘ :
				snakeArr[0].c--;
				snakeArr[0].d = ‘l‘;
				break;

			case ‘r‘ :
				snakeArr[0].c++;
				snakeArr[0].d = ‘r‘;
				break;

			case ‘t‘ :
				snakeArr[0].r--;
				snakeArr[0].d = ‘t‘;
				break;

			case ‘b‘ :
				snakeArr[0].r++;
				snakeArr[0].d = ‘b‘;
				break;
		}

		//snake的方向控制
		$(window).keydown(function(event){
			switch(event.keyCode){
				case 37 :
					direcation = ‘l‘;
					break;

				case 38 :
					direcation = ‘t‘;
					break;

				case 39 :
					direcation = ‘r‘;
					break;

				case 40 :
					direcation = ‘b‘;
					break;
			}
		});

			//snake事故
			//1. snake撞墙
			if( snakeArr[0].c < 0 || snakeArr[0].r < 0 || snakeArr[0].c >= cols || snakeArr[0].r >= rows ){
					clearInterval(timer);
					die = true;
					alert(‘GAME OVER‘);
			}

			//2. snake撞到自己
			for( var i=1; i<snakeArr.length; i++ ){
				if( snakeArr[0].c == snakeArr[i].c && snakeArr[0].r == snakeArr[i].r ){
					 clearInterval(timer);
					 die = true;
					 alert(‘GAME OVER‘);
				}
			}

			//snake吃水果
			if( snakeArr[0].c == food[0].c && snakeArr[0].r == food[0].r ){
				food[0].div.css({background : ‘url(./images/snake2.png) no-repeat‘});
				snakeArr.splice(snakeArr.length - 1, 0, food[0]);
				food.shift();
				sorce += 10;
				$(‘#score‘).html(sorce);
			}

			//snake产生水果
			if( food.length == 0 ){
				createFood();
			}

			for(var i = 0; i < snakeArr.length; i++){
				setPosition(snakeArr[i]);
			}
		},speed);

}

食物的产生:

function createFood(){
		var r = parseInt(rows * Math.random());
		var c = parseInt(cols * Math.random());
		var casrsh = false;

		//2个水果出现的位置不能一样
		while( food.length == 0 ){
			//判断snake的位置,不能与snake相撞
			for( var i = 0; i < snakeArr.length; i++ ){
				if( r == snakeArr[i].r && c == snakeArr[i].c ){
					casrsh = true;
				}
			}
			//当位置不重叠的时候,产生水果
			if( !casrsh ){
				var i = parseInt(4 * Math.random());
				var foodDiv = $(‘<div style="background:url(./images/fruit‘+ i +‘.png);"></div>‘);
				home.append(foodDiv);
				food.push({r : r, c : c, div : foodDiv});
				setPosition(food[0]);
			}
		}

	}

还有一个重要的功能就是重新设置定位:

function setPosition(obj){
		obj.div.css({left : obj.c * 20, top : obj.r * 20});
		obj.div.removeClass().addClass(obj.d);
	}
	createFood();   //那页面一被加载出来就显示出食物!

关于一些细节的东西,明天在更新了!

    

时间: 2024-08-01 08:19:44

JS的小游戏"贪吃蛇"的相关文章

Pascal小游戏 贪吃蛇

一段未完成的Pascal贪吃蛇 说这段代码未完成其实是没有源代码格式化,FP中一行最多只有255字符宽. uses crt; const screenwidth=50; screenheight=24; wallchar='#'; snakechar='*'; ; type point=record x,y:integer; end; var snake:array [0..500] of point; map:array [0..screenwidth,0..screenheight] of

控制台小游戏-贪吃蛇,c++和c#版

说是c++版,其实只是用到了c++的cout和cin而已.这是我做的第二个控制台游戏,基本上每一行代码都加上了注释. 游戏嘛,我觉得重要的是了解他的思想,所以后期学了面向对象之后这个游戏的代码我也没有重新封装. 下面请看图 代码如下:我是用dev c++写的 1 //注释. ---星辰 2 3 #include <iostream> 4 #include<Windows.h> 5 #include<ctime> 6 #include<cstdlib> 7 #

java小游戏贪吃蛇大作战:来一起回顾童年回忆!

Java小项目之贪吃蛇 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 贪吃蛇,绝对是很多朋友的童年记忆.几乎没有人会说没玩过这款小游戏,因为不管在小灵通手机,直板手机,还是半智能手机,甚至是现在的5G手机,都能看见这款游戏的身影.虽然游戏一直在进化,画面,风格,操作方式越来越精细,但是游戏本质的玩法是没变的,例如蛇不断变大,碰到墙壁会死亡等设定.这篇文章来分享java小游戏贪吃蛇:部分代码展示:这个贪吃蛇小游戏,玩法和操控,都是比较完善的,大家感兴趣的可

这是现代软件工程课结对作业 ——小游戏“贪吃蛇”

Github代码链接 https://github.com/liangjianming/jieduizuoye 实验简介: 本次实验为合作实验 实验分工: 本次选择了经典的游戏贪吃蛇,相信大家都玩过,这次实验分工是这样的: 实验的逻辑框架为讨论之后得出: 如果顺利吃掉食物即为成功,并输出成功,如果撞到自己和墙即为失败,输出游戏失败,添加了一些简单的游戏界面,游戏监听器和线程等, 定义食物是随机的,由 random() 决定, 并控制了窗口大小坐标: 十位*60为横坐标 weix=(int)(fo

手把手教学h5小游戏 - 贪吃蛇

简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yanjd.top 第一步 - 制作想法 游戏如何实现是首要想的,这里我的想法如下: 利用canvas进行绘制地图(格子装). 利用canvas绘制蛇,就是占用地图格子.让蛇移动,即:更新蛇坐标,重新绘制. 创建四个方向按钮,控制蛇接下来的方向. 随机在地图上绘制出果子,蛇移动时"吃"到果子,增

小游戏●贪吃蛇1(利用二维数组制作)

利用二维数组编写简单贪吃蛇小游戏,由于是初学C#,用的是单线程,所以蛇不会自动前进 代码及简要分析如下: 1 //定义地图,0为空,1为墙,2为蛇,3为食物 2 int[,] map = new int[15, 15]{ 3 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 4 {1,2,0,0,0,0,0,0,0,0,0,0,0,0,1}, 5 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 6 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

Java小游戏贪吃蛇

package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Arrays;import java.util.Itera

python pygame做的小游戏(贪吃蛇)

# pygame游戏库,sys操控python运行的环境 import pygame, sys, random # 这个模块包含所有pygame所使用的常亮 from pygame.locals import * # 1,定义颜色变量 # 0-255 0黑色 255白色 redColor = pygame.Color(255, 0, 0) # 背景为黑色 blackColor = pygame.Color(0, 0, 0) # 贪吃蛇为白色 whiteColor = pygame.Color(2

控制台小游戏——贪吃蛇

网上看到的一个贪吃蛇程序,修复了一些bug(如可以直接转反方向,苹果与蛇重叠,撞到自身不会死亡等),下面是源代码. -------------------------------------------------------------------------------------------------- 1 #include<iostream> 2 #include<windows.h> 3 #include<time.h> 4 #include<stdl