别踩白块儿js

来源网易云课堂-燕十八老师小游戏

难点:无缝滚动、自动加速

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content = "width = device-width,initial-scale=1.0">
	<title>黑白棋小游戏</title>

	<style type="text/css">
	*{
		margin: 0;
		padding:0;
	}
	html,body{
		width: 100%;
		height: 100%;
	}
	#main,#container{
		position: relative;
		top: 0;
		margin: auto;
		width:400px;
		height: 400px; 
		box-sizing:content-box;
		background-color: orange;
	}
	#main{
		border: 5px solid black;
		overflow: hidden;
	}
	#container{
		top: -100px;
		background-color: white;
	}
	.row{
		width: 100%;
		height: 100px;
		box-sizing:border-box;

	}
	.cell{
		float: left;
		width: 100px;
		height: 100px;
		border: 1px solid black;
		box-sizing:border-box;
		background-color: white;
	}
	.black{
		background-color: black;
	}


	</style>

</head>
<body>
	<h1>得分:<i id="score">0</i></h1>
	<div id="main">
		<div id="container"></div>
	</div>

	<script type="text/javascript">
	// 定时器操作句柄
	var clock=null; 
	// 全局状态变量,0初始化,1进行中,2暂停,3失败
	var state=0;
	var speed = 3;

	init();
	start();

	function init(){
		for(var i=0;i<4;i++){
			crow();
		}

		$('main').onclick = function(ev){
			judge(ev);
		}
	}

	function start(){
		clock = setInterval('move()',100);
	}

	function $(id){
		return document.getElementById(id);
	}

	function judge(ev){
		if(state == 3){
			alert("game over~已经处于失败状态");
			return;
		}

		if(ev.target.className.indexOf('black') == -1){
			fail();
			}else {
				ev.target.className = "cell";
				ev.target.parentNode.pass = 1;
				console.log(ev.target.parentNode.pass)
				score();
			}
	}

	function score(){
		var newScore = parseInt($('score').innerHTML) + 5;
		$('score').innerHTML = newScore;
		if(newScore % 50 == 0){
			accelerate();
		}
		if(newScore == 5000){
			alert('打爆啦');
		}
	}

	function accelerate(){
		// if(speed == 4){
		// 	speed = 5;
		// }
		// if(speed == 5){
		// 	speed = 10;
		// }
		// if(speed == 10){
		// 	speed = 25;
		// }
		// if(speed ==25){
		// 	speed =50;
		// }
			speed += 1;
	}

	// 创建div.row
	function crow(){
		var con = $('container');
		var row = cdiv('row');
		var classes = createSn();
		for(var i = 0;i < 4;i++){
			row.appendChild(cdiv(classes[i]));
		}

		if(con.firstChild == null){
			con.appendChild(row);
		}else{
			con.insertBefore(row,con.firstChild);
		}
		
	}

	// 删最后一行
	function drow(){
		var con = $('container');
		if(con.length == 6){
			con.removeChild(con.lastChild);
		}
	}


	// 创建div,className类名
	function cdiv(className){
		var div = document.createElement('div');
		div.className = className;
		return div;
	}

	// 随机黑块
	function createSn(){
		var arr = ['cell','cell','cell','cell'];
		var i = Math.floor(Math.random()*4);
		arr[i] = 'cell black';

		return arr;
	}

	// 动画
	function move(){
		var con = $('container');
		var top = parseInt(window.getComputedStyle(con,null)['top']);

		if(speed + top >0){
			top = 0;
		}else{
			top += speed;
		}
		con.style.top = top + 'px';

		if(top == 0){
			crow();
			con.style.top = '-100px';
			drow();
		} else if(top == (-100+speed)) {
			var rows = con.childNodes;
			if((rows.length ==5) &&(rows[rows.length-1].pass !== 1)){
				fail();
			}
		}
	}

	function fail(){
		clearInterval(clock);
		state = 3;
		alert("game over~");
	}
	</script>
</body>
</html>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个纯JavaScript实现“别踩白块”的代码示例: ```html <!DOCTYPE html> <html> <head> <title>别踩白块</title> <style> .container { width: 500px; margin: 0 auto; } .row { height: 100px; display: flex; } .white { background-color: white; border: 1px solid black; flex-grow: 1; } .black { background-color: black; border: 1px solid black; flex-grow: 1; cursor: pointer; } </style> </head> <body> <div class="container"> <div class="row"> <div class="white"></div> <div class="black"></div> <div class="black"></div> <div class="black"></div> </div> <div class="row"> <div class="black"></div> <div class="white"></div> <div class="black"></div> <div class="black"></div> </div> <div class="row"> <div class="black"></div> <div class="black"></div> <div class="white"></div> <div class="black"></div> </div> <div class="row"> <div class="black"></div> <div class="black"></div> <div class="black"></div> <div class="white"></div> </div> </div> <script> var blacks = document.querySelectorAll('.black'); var score = 0; var time = 60; var timer; blacks.forEach(function(black) { black.addEventListener('click', function() { if (this.classList.contains('clicked')) { return; } else if (this.classList.contains('white')) { clearInterval(timer); alert('Game Over! Your score is ' + score); } else { this.classList.add('clicked'); score++; document.getElementById('score').textContent = score; } }); }); timer = setInterval(function() { time--; document.getElementById('time').textContent = time; if (time === 0) { clearInterval(timer); alert('Game Over! Your score is ' + score); } }, 1000); </script> </body> </html> ``` 这个纯JavaScript代码示例与之前的代码示例非常相似,除了将JavaScript代码嵌入到HTML文件中。注意,在这个示例中,我们添加了一个CSS规则来让黑块变成指针形状,以增加游戏体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值