网页版别踩白块

给大家推荐个靠谱的公众号程序员探索之路,大家一起加油https://i-blog.csdnimg.cn/blog_migrate/93320939ba8f8b0a898e29429753f496.png ​ 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>别踩白块</title>
		<style>
			#games{
				position:absolute;
				top:100px;
				left:400px;
			}
			#ss{
				position: absolute;
				top: 0px;
				left: 50px;
			}
			#socre{
				position: absolute;
				top: 50px;
				left: 50px;
				width: 100px;
				height: 100px;
				border-radius: 1px;
				border-style: solid;
				border-width: 1px;
				border-color: #00FFFF;
			}
			#start{
				position: absolute;
				top: 500px;
				left: 400px;
			}
			#stop{
				position: absolute;
				top: 500px;
				left: 500px;
			}
			/*
			#end{
				position: absolute;
				top: 200px;
				left: 400px;
			}*/

			#reset{
				position: absolute;
				top: 270px;
				left: 350px;
			}
			#times{
				position: absolute;
				top: 50px;
				left: 600px;
			}
		</style>
	</head>
	<body>
   <canvas id="games" onmousedown="onDown();"></canvas>
   <h3 id="ss">分数:</h3><br/>
   <div id="times"></div>
    <div id="socre">0</div>
    <input id="start" type="image"  src="img/开始.png" onclick="a()"/>
    <input id="stop" type="image"  src="img/暂停.png" onclick="b()"/>
   <!-- <input id="end" type="image" src="img/结束.png" onclick="c()"/>-->
    <input id="reset" type="button" value="重置" onclick="c()"/>
    <script type="text/javascript">
    	var w = 260;
    	var h = 400;
    	var socre = 0;
    	var starttime;
    	var endtime;
    	var allTime = 0;
    	var quicknum = 0.5;
    	function rect(arr,y){
    		//每个rect表示一行
    		//y表示  这一行的高度
    		this.y = y;
    		//arr  是数组  表示 这一行 每个 矩形的颜色
    		this.arr = arr;
    	}
    	//设置画布
    	var games = document.getElementById("games");
    	games.widht = w;
    	games.height = h;
    	var canvas = games.getContext("2d");
    	
    	//设置初始矩形
    	var rectArr = new Array();
    	function drawStartRect(){
    		for(var i = 0;i < 6;i++){
    			var arr = new Array();
    		//0表示 白色  1 表示 红色   2 表示 黑色  3表示 灰色  3以上 还是 灰色
    			for(var j = 0;j < 4;j++){
    				arr[j] = 0;
    			}
    			var num = Math.floor(Math.random()*4);
    			arr[num] = 2;
    			rectArr[i] = new rect(arr,i*100-200);
    		}
    	}
    	drawStartRect();
    	//画出具体的矩形  就是 每一行的矩形
    	function drawRect(){
    		for(var i = 0;i < rectArr.length;i++){
    			for(var j = 0;j < rectArr[i].arr.length;j++){
    				switch(rectArr[i].arr[j]){
    					//白色
    					case 0:{
    						canvas.fillStyle="#ffffff";
    						break;
    					}
    					//红色
    					case 1:{
    						canvas.fillStyle="#ff0000";
    						break;
    					}
    					//黑色
    					case 2:{
    						canvas.fillStyle="#000000";
    						break;
    					}
    					//灰色
    					case 3:{
    						canvas.fillStyle="#dddddd";
    						break;
    					}
    					//大于3同样是灰色
    					default:{
    						canvas.fillStyle="#dddddd"
    					}
    					
    				}
    				canvas.fillRect(j*(w/4),rectArr[i].y,(w/4),(h/4));
    				canvas.strokeStyle="#666666";
    				canvas.strokeRect(j*(w/4),rectArr[i].y,(w/4),(h/4));
    			}
    			
    		}
    		canvas.strokeStyle="#000000";
    		canvas.strokeRect(0,0,w,h);
    		
    	}
    	
    	//让矩形动的方法
    	function run(){
    		drawRect();
    		for(var i = 0;i < rectArr.length;i++){
    			rectArr[i].y += quicknum;
    			
    			if(rectArr[i].y > h){
    				for(var j = 0;j < rectArr[i].arr.length;j++){
    					//有黑块没点此时游戏结束
    					if(rectArr[i].arr[j] == 2){
    						isrunning = false;
    						clearInterval(running);
    						rectArr[i].arr[j] = 1;
    						print();
    						//回退
    						backing = setInterval("goback()" , 1);
    						return;
    					}
    				}
    				
    				//如果出去回收利用的方法  
    				//就是给 这 一行的 四个长方形的颜色 重新为1
    				//然后 随机 产生一位置 为 黑色
    				//最后 将这一行 放到 最上面
    				for(var j = 0;j < 4;j++){
    					rectArr[i].arr[j] = 0;
    				}
    				var num = Math.floor(Math.random()*4);
    				rectArr[i].arr[num] = 2;
    				rectArr[i].y -= (h/4) * 6;
    			}
    			endtime = new Date();
    			allTime = (endtime - starttime - stoptime)/1000;
    			document.getElementById("times").innerHTML=allTime + "秒";
    		}
    		
    	}
    	//用于结束画布的动
    	var running = null;
    	//用于第一次点击使画布动
    	var begin = true;
    	//用于判断 游戏 是否 结束  如果 结束  那么 其他的方块就不能点击了
    	var isrunning = true;
    	function onDown(event){
    		if(begin){
    			if(flagstop){
    				starttime = new Date();
    			}
    			running = setInterval("run();" , 10);
    			begin = false;
    			isrunning = true;
    		}
    		if(isrunning){
    			//获取点击时  的 x y坐标
    			event = event || window.event;
    			//var d = document.getElementById("dd");
    			//document.getElementById("socre").innerHTML=document.getElementById("games").style.left;
    			var x = event.clientX - 400;
    			var y = event.clientY - 100;
    			//每行进行判断  如果 y值在 该行的起始位置(rectArr[i].y)  与结束位置 中间(rectArr[i].y + (h/4))
    			for(var i = 0;i<rectArr.length;i++){
    				if(rectArr[i].y < y && rectArr[i].y + (h/4) > y){
    					var num = Math.floor(x/(w/4));
    					rectArr[i].arr[num]++;
    					drawRect();
    					if(rectArr[i].arr[num] == 1){
    						print();
    						clearInterval(running);
    						isrunning = false;
    						return;
    					}else if(rectArr[i].arr[num] == 3){
    						socre++;
    						var copysocre = socre;
    						if(socre % 10 == 0 ){
    							quicknum = quicknum + 0.2;
    						}
    						document.getElementById("socre").innerHTML=socre;
    					}
    					
    				}
    			}
    		}
    		
    	}
    	//每回退一步都需要 重新把  矩形画一遍 达到更新的 效果
    	//用于记录回退的多少
    	var backnum = 0;
    	//用于结束回退
    	var backing = null;
    	function goback(){
    		if(backnum == (h/4)){
    			clearInterval(backing);
    		}
    		for(var i = 0;i < rectArr.length;i++){
    			rectArr[i].y--;
    		}
    		drawRect();
    		backnum++;
    	}
    	//按钮开始方法
    	//按钮 开始的时候  那么  第一次 点击方块的begin就需要 置为false  然后 记录时间   让画布动起来
		function a() {
			if(flagstop) {
				starttime = new Date();
			}
			running = setInterval("run();", 5);
			begin = false;
			isrunning = true;

		}//按钮暂停方法
		//如果 flagstop  为true  而且点击了 那么 说明 是 走着 要暂停   
		//如果 flagstop  为false  而且点击了 那么 说明 是 暂停 要走   
		var stoptime = 0;
    	var stopstartime = null;
    	var stopendtime = null;
		var flagstop = true;
		function b(){
			if(flagstop && !begin){
				stopstartime = new Date();
				//对应的状态改变
				clearInterval(running);
				flagstop = false;
				isrunning = false;
				begin = true;
			}else if(!flagstop){
				//对应的状态改变
				stopendtime = new Date();
				stoptime = stopendtime - stopstartime;
				running = setInterval("run();" , 5);
				flagstop = true;
				isrunning = true;
				begin = false;
			}
			
		}
		//按钮重置方法
		//让一切变量  恢复初始值
		//停止 画布动的方法  和  回退方法
		function c(){
//			 clearInterval(running);
//  		 clearInterval(backing);
//			 running = null;
//  		 begin = true;
//  		 isrunning = true;
//  		 backnum = 0;
//  		 backing = null;
//  		 socre = 0;
//  		 starttime = null;
//  		 endtime = null;
//  		 allTime = 0;
//  		 quicknum = 0.5;
//  		 flagstop = true;
//  		 drawStartRect();
//  		 drawRect();
//  		 print(); 
			window.location.reload();
		}
		//用于打印分数和秒数
		function print(){
			 document.getElementById("socre").innerHTML=socre + "分"
    		 document.getElementById("times").innerHTML=allTime + "秒";
		}
  	drawRect();
  	print();
    </script>
  </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值