第九讲:HTML5中的canvas实现推箱子雏形

<html>
	<head>
		<title>方块的移动</title>
		<script src="../js/jscex.jscexRequire.min.js" type="text/javascript"></script>
		<style type="text/css">
			body{margin:0px;padding:0px;}
			#main{margin: 100 auto 0 auto;border: 10px solid #030303;width:300px;height:460px;border-radius:10px;}
		</style>
	</head>
	
	<body>
		<div id="main">
			<canvas id="mc" width="300px" height="460px">
			</canvas>
		</div>
		<script type="text/javascript">
			var canvas = document.getElementById('mc');
			var cxt = canvas.getContext('2d');
			//定义背景的颜色
			function init_background(){
				cxt.fillStyle = "#6A6C6C";
				cxt.fillRect(0,0,canvas.width,canvas.height);
				cxt.fill();
			}
			//定义移动的红方块
			var red_diamond = {
				x : 200,
				y : 100,
				width : 20,
				height : 20,
				color : "#FC0000"
			}
			//初始化红小方块的方法
			function  init_red_diamond(){
				cxt.fillStyle = red_diamond.color;
				cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
				cxt.fill();
			}
			//定义将被空方块移动的黄方块
			var yellow_diamond = {
				x : 100,
				y : 200,
				width : 20,
				height : 20,
				color : "#F2FA0A"
			}
			//初始化黄小方块的方法
			function  init_yellow_diamond(){
				cxt.fillStyle = yellow_diamond.color;
				cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
				cxt.fill();
			}
			//消除黄小方块的方法
			function clear_yellow_diamond(){
				cxt.fillStyle = "#6A6C6C";
			  cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
			 	cxt.fill();
			}
			//消除红小方块的方法
			function clear_red_diamond(){
				cxt.fillStyle = "#6A6C6C";
			  cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
			 	cxt.fill();
			}
			//定义四个方法,分别控制红小方块四个方向的移动
			function move_right_red_diamond (){//右边
				if(red_diamond.x + red_diamond.width + 5 <= canvas.width){	
					//清除以前的方块
			  	clear_red_diamond();
			  	cxt.fillStyle = red_diamond.color;
			  	red_diamond.x += 20;
			  	cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
			  	cxt.fill();
		  	}
			}
			function move_left_red_diamond(){
				if(red_diamond.x - 5 >= 0 ){
					//清除以前的方块
			  	clear_red_diamond();
			  	cxt.fillStyle = red_diamond.color;
			  	red_diamond.x -= 20;
			  	cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
			  	cxt.fill();
			  }
			}
			function move_up_red_diamond(){
				if(red_diamond.y - 5 >= 0 ){
					//清除以前的方块
			  	clear_red_diamond();
			  	cxt.fillStyle = red_diamond.color;
			  	red_diamond.y -= 20;
			  	cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
			  	cxt.fill();
			  }
			}
			function move_down_red_doamond(){
				if(red_diamond.y + red_diamond.height + 5 <= canvas.height){	
					//清除以前的方块
			  	clear_red_diamond();
			  	cxt.fillStyle = red_diamond.color;
			  	red_diamond.y += 20;
			  	cxt.fillRect(red_diamond.x,red_diamond.y,red_diamond.width,red_diamond.height);
			  	cxt.fill();
			  }
			}
			//定义一个方法用户判断红方块在小方块的哪一方
			var red_diamond_to_yellow_diamond = "";
			function red_diamond_position (){
				if(red_diamond.x + red_diamond.width == yellow_diamond.x && red_diamond.y == yellow_diamond.y){
					red_diamond_to_yellow_diamond = "left";
				}
				if(red_diamond.x == yellow_diamond.x + yellow_diamond.width && red_diamond.y == yellow_diamond.y){
					red_diamond_to_yellow_diamond = "right";
				}
				if(red_diamond.y + red_diamond.height == yellow_diamond.y && red_diamond.x == yellow_diamond.x){
					red_diamond_to_yellow_diamond = "top";
				}
				if(red_diamond.y == yellow_diamond.y + yellow_diamond.height && red_diamond.x == yellow_diamond.x){
					red_diamond_to_yellow_diamond = "down";
				}
			}
			//定义四个方法来移动黄色小方块
			function move_right_yellow_diamond (){//右边
				if(yellow_diamond.x + yellow_diamond.width + 5 <= canvas.width){	
					//清除以前的方块
			  	clear_yellow_diamond();
			  	cxt.fillStyle = yellow_diamond.color;
			  	yellow_diamond.x += 20;
			  	cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
			  	cxt.fill();
		  	}
			}
			function move_left_yellow_diamond(){
				if(yellow_diamond.x - 5 >= 0 ){
					//清除以前的方块
			  	clear_yellow_diamond();
			  	cxt.fillStyle = yellow_diamond.color;
			  	yellow_diamond.x -= 20;
			  	cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
			  	cxt.fill();
			  }
			}
			function move_up_yellow_diamond(){
				if(yellow_diamond.y - 5 >= 0 ){
					//清除以前的方块
			  	clear_yellow_diamond();
			  	cxt.fillStyle = yellow_diamond.color;
			  	yellow_diamond.y -= 20;
			  	cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
			  	cxt.fill();
			  }
			}
			function move_down_yellow_doamond(){
				if(yellow_diamond.y + yellow_diamond.height + 5 <= canvas.height){	
					//清除以前的方块
			  	clear_yellow_diamond();
			  	cxt.fillStyle = yellow_diamond.color;
			  	yellow_diamond.y += 20;
			  	cxt.fillRect(yellow_diamond.x,yellow_diamond.y,yellow_diamond.width,yellow_diamond.height);
			  	cxt.fill();
			  }
			}
			
			//获取键盘点击的事件,以判断小方块想哪里移动
			var direction = "";  
    	document.onkeydown = function (e) { 
    		red_diamond_position(); 
			  if (e.keyCode == 39 ){
			  	if(red_diamond_to_yellow_diamond == "left" && red_diamond.x + red_diamond.width * 2 + 5 <= canvas.width ){
			  		move_right_yellow_diamond();		
			  		move_right_red_diamond();
			  	}else{
			  		if(red_diamond_to_yellow_diamond != "left"){
			  			red_diamond_to_yellow_diamond = "";
			  			move_right_red_diamond();
			  		}	
			  	}
			  };  
	      if (e.keyCode == 37 ) {
	      	if(red_diamond_to_yellow_diamond == "right" && red_diamond.x - 5 - red_diamond.width >= 0){
	      		move_left_yellow_diamond();		
			  		move_left_red_diamond();
	      	}else{
	      		if(red_diamond_to_yellow_diamond != "right"){
	      			move_left_red_diamond();
	      			red_diamond_to_yellow_diamond = "";
	      		}
	      	}
	      };  
	      if (e.keyCode == 38 ){
	      	if(red_diamond_to_yellow_diamond == "down" && red_diamond.y - 5 - red_diamond.height >= 0){
	      		move_up_yellow_diamond();
	      		move_up_red_diamond();
	      	}else{
	      		if(red_diamond_to_yellow_diamond != "down"){
		      		move_up_red_diamond();	      		
		      		red_diamond_to_yellow_diamond = "";
	      		}
	      	}
	      };  
				if (e.keyCode == 40 ){
					if(red_diamond_to_yellow_diamond == "top" && red_diamond.y + red_diamond.height * 2 + 5 <= canvas.height){
	      		move_down_yellow_doamond();	
	      		move_down_red_doamond();
	      	}else{
	      		if(red_diamond_to_yellow_diamond != "top"){
	      			move_down_red_doamond();
	      			red_diamond_to_yellow_diamond = "";
	      		}
	      	}
				};  
			}
			//初始化
			init_background();
			init_red_diamond();
			init_yellow_diamond();
			move_diamond();
		</script>
	</body>
</html>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
箱子是一种经典的益智游戏,HTML5提供了丰富的功能和工具,可以用于设计和开发箱子游戏。以下是一些关键步骤和技术,帮助您开始设计HTML5箱子游戏: 1. 游戏场景设计:确定游戏界面大小和样式。使用HTML5的Canvas元素来绘制游戏场景,并使用CSS样式来美化界面。 2. 关卡设计:设计不同难度的关卡,包括地图布局、箱子位置、目标位置等。可以使用数组或JSON对象来表示关卡信息。 3. 状态管理:使用JavaScript来管理游戏的状态,包括玩家位置、箱子位置、目标位置等。通过监听用户输入事件,实现玩家移动和箱子动的逻辑。 4. 碰撞检测:实现玩家和箱子与墙壁、其他物体之间的碰撞检测。可以使用碰撞框或像素级碰撞检测算法来判断物体是否重叠。 5. 动画效果:为了增加游戏的可玩性和视觉效果,可以使用CSS3或JavaScript动画库来实现平滑的移动和箱子动效果。 6. 存档和关卡编辑器:实现游戏的存档功能,让玩家可以保存当前进度或分享给其他人。另外,开发一个关卡编辑器可以让玩家自定义和分享自己设计的关卡。 7. 移动设备适配:考虑到HTML5游戏可在移动设备上进行游玩,需要做好响应式设计和触摸事件处理,以提供良好的移动端体验。 这些是设计HTML5箱子游戏的一些基本步骤和技术要点。当然,根据您的实际需求和创意,您还可以添加更多功能和特性,以打造出独特的箱子游戏体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值