`
沙舟狼客
  • 浏览: 161749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用html5中canvas标签写个贪吃蛇

阅读更多
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>沙舟狼客制作</title>

<style type="text/css">
<!--
body{
	margin:0 auto;
	background:#6699FF;
	width:960px;
	height:800px;
}
nav{
	width:960px;
	height:50px;
	float:left;
}
canvas {
	border: thick solid #000000;
	width:500px;
	height:500px;
	float:left;
}
#score{
	width:100px;
	height:500px;
	font-size:18px;
	font-weight:bold;
	float:left;
}
#score span{
	color:#FF0000;
}
-->
</style>
</head>
<body>
<nav>
	贪吃蛇(按键WSAD:分别是上下左右)
</nav>
 <canvas id="canvas" width="500" height="500"> 
 </canvas>

 <div id="score">
 	得分:<span>0</span>
 </div> 
</body>
</html>
 
<script>
	var ctx = document.getElementById("canvas").getContext("2d"); 
	var scoreEl = document.getElementById("score");
	
	//当前前第一结蛇头的位置
	var x = 40;
	var y = 0;
	
	//速度
	var speed = 10 ;
	
	//方向:1:up;2:down;3:left;4:right;
	var d = 4;
	
	//定义蛇身数组
	var snakes = new Array();
	
	//定义食物数组
	var foods = new Array();
	
	//记录分数
	var score = 0;
	//snakes[0] = {x:x,y:y};
	
	//初始化舍身长度
	var len = 5;
	
	//初始化
	function init(){
		ctx.fillStyle = "#ff0000";
		
		//画蛇神
		for(var i = len-1;i>=0;i--){
			snakes[len-1-i] = {x:i*10,y:0};
			ctx.fillRect(snakes[len-1-i].x,snakes[len-1-i].y,10,10);
		}
		
		//花食物
		foods[0] = {x:parseInt(Math.random()*490),y:parseInt(Math.random()*490)};
		ctx.fillRect(foods[0].x,foods[0].y,10,10);
	}
	init();
	print();
	
	//键盘监听
	function keydown(e){
		switch(e.keyCode){
			//上W
			case 87:
				if(d!=2){
					d = 1;
				}
				break;
			//下S
			case 83:
				if(d!=1){
					d = 2;
				}
				break;
			//左A
			case 65:
				if(d!=4){
					d = 3;
				}
				break;
			//右D
			case 68:
				if(d!=3){
				  d = 4;
				}
				break;
			//测试
			case 38:
				addSnake();
				break;
			default:
		}
	}
	
	//画食物和社
	function draw(_x,_y){
		//alert("_x:"+_x+";_y:"+_y);
		ctx.clearRect(0,0,500,500);
		ctx.fillStyle="#996633";
		ctx.fillRect(0,0,500,500);

		ctx.fillStyle="#FF0000";
		
		//循环替代位置,从最后一个开始
		for(var i = len-1;i>=1;i-- ){
			//console.log(i);
			snakes[i].x = snakes[i-1].x;
			snakes[i].y = snakes[i-1].y;	
			ctx.fillRect(snakes[i].x,snakes[i].y, 10, 10);
		}
		snakes[0].x = _x;
		snakes[0].y = _y;
		ctx.fillRect(_x, _y, 10, 10);
		
		ctx.fillStyle="#00FF00";
		for(var i = 0;i<foods.length;i++){
			ctx.fillRect(foods[i].x,foods[i].y,10,10);
		}
		//print();
	}
	//1:up;2:down;3:left;4:right;
	function move(){
		switch(d){
			case 1:
				y = y - speed; 
				if(y<0){
					y = 490;
				}
				break;
			case 2:
				y = y + speed;
				if(y>490){
					y = 0;
				}
				break;
			case 3:
				x = x-speed;
				if(x<0){
					x = 490;
				}
				break;
			case 4:
				x = x + speed;
				if(x>490){
					x = 0;
				}
				break;
			default:
		}
		draw(x,y);
	}
	
	function addSnake(){
		snakes[len]= {x:snakes[len-1].x+10,y:snakes[len-1].y+10};
		len = len + 1;	
	}
	
	function createFood(){
		var fx = parseInt(Math.random()*490);
		var fy = parseInt(Math.random()*490);
		if((Math.abs(fx-x)>=10)&&(Math.abs(fy-y)>=10)){
			foods[foods.length] = {x:fx,y:fy};	
			return false;
		}else{
			return true;
		}
	}
	function deleteFood(fIndex){
		foods.splice(fIndex,1);
	}
	function checkHit(){
		for(var i=0;i<foods.length;i++){
			var fx = foods[i].x;
			var fy = foods[i].y;
			
			if((Math.abs(fx-x)<10)&&(Math.abs(fy-y)<10)){
				addSnake();
				deleteFood(i);
				while(createFood()){
				}
				//createFood();
				score +=10;
				scoreEl.innerHTML = "得分:<span>"+score+"</span>";
			}
		}
	}
	setInterval("move()",50);
	setInterval("checkHit()",50);
	//setInterval("createFood()",5000);
	document.onkeydown = keydown;
	function print(){
		var outString = "";
		for(var i = 0;i<snakes.length;i++){
			outString += i+":{x:"+snakes[i].x+",y:"+snakes[i].y+"};"	
		}
		
		//alert(outString);
		console.log(outString);
	}
	
</script>

 代码注释很详细,希望对大家有所帮助,但是换行的<br/>标签出来,看着很不爽!

 

预览效果图:

  • 大小: 23.7 KB
1
14
分享到:
评论
1 楼 沙舟狼客 2011-07-31  
splice函数简介:
var arr = new Array();
arr.splice(参数1,参数2)
从数组arr中的的 参数1 位置开始删除 参数2 个元素;

canvas中的函数

清除屏幕内容
ctx.clearRect(0,0,500,500); 

填充的颜色
ctx.fillStyle="#996633"; 

画一个矩形
ctx.fillRect(0,0,500,500);


相关推荐

    html5 canvas 实现贪吃蛇

    在这个项目中,“html5 canvas 实现贪吃蛇”,我们将探讨如何利用Canvas API来构建一个经典的贪吃蛇游戏。 首先,我们要理解Canvas的基本结构。一个Canvas元素在HTML中以`&lt;canvas&gt;`标签定义,可以通过`id`属性来...

    Html5-Canvas 贪吃蛇

    这个“Html5-Canvas 贪吃蛇”项目是利用HTML5的Canvas技术和jQuery库来实现的经典游戏——贪吃蛇。下面我们将详细探讨HTML5 Canvas与jQuery在实现这个游戏中的关键知识点。 1. **HTML5 Canvas基本概念**: - ...

    html5canvas开发贪吃蛇游戏

    在这个“html5canvas开发贪吃蛇游戏”项目中,我们将深入探讨如何利用Canvas API构建一款经典的贪吃蛇游戏。 贪吃蛇游戏自1976年首次出现以来,就因其简单的操作和无限的挑战性深受玩家喜爱。在HTML5 Canvas上实现...

    非常简单的canvas贪吃蛇

    【标题】"非常简单的canvas贪吃蛇"是一个利用HTML5的Canvas API实现的贪吃蛇游戏。这个项目展示了如何在网页上用纯JavaScript构建一个基本的游戏框架,通过Canvas的绘图功能来绘制游戏元素,以及处理游戏逻辑。 ...

    HTML5 Canvas贪吃蛇网页游戏.zip

    在这个“HTML5 Canvas贪吃蛇网页游戏”中,我们看到Canvas被用来实现经典的游戏——贪吃蛇。贪吃蛇游戏最早出现在早期的黑白手机上,现在通过HTML5技术,它得以在网页上重现,且具有更高的视觉效果和操作流畅性。 ...

    Javascript + canvas 实现贪吃蛇小游戏

    在本项目中,"Javascript + canvas 实现贪吃蛇小游戏" 是一个利用HTML5的Canvas API和JavaScript语言构建的经典小游戏。Canvas是HTML5的一个重要特性,它允许在网页上进行动态图形绘制,非常适合用于开发此类交互式...

    HTML5 canvas简单贪吃蛇小游戏.zip

    在这个“HTML5 canvas简单贪吃蛇小游戏”中,我们看到Canvas技术被巧妙地应用到了经典的游戏设计中,即大家熟知的贪吃蛇游戏。这个游戏通过JavaScript实现,标签"JS特效-其它代码"提示我们主要关注JavaScript在游戏...

    H5贪吃蛇完整代码(前端HTML CSS JS)

    在HTML5中,我们可以使用`&lt;img&gt;`标签或者CSS的`background-image`属性引用这些图片,提升游戏的视觉表现力。同时,开发者还可以通过JavaScript动态改变图片,实现更丰富的游戏效果。 总结: 这个H5贪吃蛇小游戏的...

    基于H5的贪吃蛇

    在这个基于HTML5的贪吃蛇游戏中,"image"目录下的图片资源可能包括: 1. **蛇的图像**:不同长度的蛇体段图片,用于根据蛇的长度动态组合。 2. **食物图像**:游戏中的食物图标,蛇吃到后会得分并增长。 3. **背景...

    贪吃蛇HTML5代码

    在这个HTML5版本的贪吃蛇游戏中,开发者使用了HTML5、CSS3和JavaScript这三种核心技术来实现。接下来,我们将深入探讨这些技术如何协同工作,构建出这款网页版的贪吃蛇游戏。 首先,HTML5是超文本标记语言的第五个...

    js html5简单的贪吃蛇游戏代码下载

    标签"js html5 贪吃蛇"暗示了这个游戏是用JavaScript和HTML5来实现的一个经典小游戏。JavaScript处理游戏逻辑,而HTML5则提供了展示游戏的平台。在实际的项目中,可能还会结合CSS3来美化游戏界面,如添加动态效果和...

    HTML,Javascript,Canvas网页贪吃蛇游戏

    例如,`&lt;canvas&gt;` 标签是 HTML5 中新增的元素,它提供了一个二维绘图环境,可以用来绘制贪吃蛇和食物。 JavaScript 是一种强大的脚本语言,负责处理游戏的动态行为和交互。在这个游戏中,JavaScript 控制着游戏的...

    h5贪吃蛇动画

    【标签】:“h5贪吃蛇”标签明确了这个压缩包的内容与HTML5技术有关,特别是与Canvas结合制作贪吃蛇游戏的实现方法。HTML5贪吃蛇游戏具有跨平台性,可以在各种现代浏览器上运行,包括手机和桌面设备,因此很适合用于...

    HTML5学习例子——贪吃蛇

    在这个贪吃蛇游戏中,开发者可能使用Canvas来绘制游戏场景,包括蛇、食物以及边界。Canvas通过JavaScript的API进行操作,可以实现像素级别的画图,从而创建出各种复杂的动画效果。 JavaScript在HTML5游戏开发中扮演...

    html5贪吃蛇

    在HTML5贪吃蛇游戏中,Canvas扮演了画布的角色,所有的游戏元素都在这个画布上绘制。Canvas通过JavaScript的绘图API来完成动态图形的绘制,包括蛇、食物以及游戏边界等。开发者可以通过修改蛇的位置和方向,以及判断...

    使用canvas开发贪吃蛇游戏.zip

    在本项目中,我们将深入探讨如何使用HTML5的Canvas API来开发一款经典的“贪吃蛇”游戏。Canvas是一个强大的绘图工具,它允许我们在网页上动态地绘制图形,非常适合用于创建交互式的游戏。 首先,我们需要了解...

    Canvas可爱贪吃蛇动画特效.rar

    Canvas是HTML5中的一个二维绘图元素,&lt;canvas&gt;标签提供了一个画布,开发者可以通过JavaScript的API在这个画布上进行图形绘制。这包括线条、形状、图像,甚至复杂的动画。Canvas API提供了丰富的绘图方法,如`...

    html5的贪吃蛇游戏

    HTML5的贪吃蛇游戏是利用现代Web技术实现的一个经典小游戏。HTML5是超文本标记语言HTML的第五个版本,它引入了许多新的特性和API,极大地增强了网页的交互性和动态性,使得创建复杂的Web应用程序成为可能,而无需...

    基于HTML5的新增标签canvas,借canvas的特性来,进行绘制图形.zip

    描述中的"Canvas_snake_game-master"可能是一个基于`&lt;canvas&gt;`标签实现的贪吃蛇游戏项目。在这样的项目中,开发者通常会用`&lt;canvas&gt;`来绘制游戏场景,利用JavaScript处理游戏逻辑,比如蛇的移动、食物的生成、碰撞...

Global site tag (gtag.js) - Google Analytics