JS学习日记--打砖块游戏

面向对象思想

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#show{
				width: 200px;
				height: 600px;
				position: absolute;
				left:1122px ;
				top:50px;
				background-color: gray;
				color: blue;
				line-height: 100px;
				font-size: larger;
				align-self: center;
			}
			#lose{
				position: absolute;
				top: 300px;
				left: 300px;
				font-size: xx-large;
				display: none;
			}
			li{
				position: absolute;
				list-style-type: none;
				background-color: #000000;
				width: 90px;
				height: 30px;
				border: 1px solid white;
			}
			#box{
				position: absolute;
				width: 920px;
				height: 600px;
				left: 200px;
				top: 50px;
				border: 2px solid red;
			}
			#board{
				position: absolute;
				top:590px;
				left: 300px;
				width: 200px;
				height: 10px;
				background-color: black;
			}
			#bubble{
				position: absolute;
				top: 565px;
				left: 360px;
				width: 25px;
				height: 25px;
				background-color: #FF0000;
				border-radius: 50%;
			}
		</style>
		
		<script type="text/javascript">
			window.onload=function(){
				function $(id){
					return document.getElementById(id);
				}
				function rand(min,max){
					return Math.floor(Math.random()*(max-min+1))+min
				}
				
				//打砖块构造函数
				function BlockBreak(){
					this.box=$('box');//容器
					this.list=document.getElementsByTagName('li');//砖块
					this.board=$('board');//挡板
					this.ball=$('bubble');//小球
					this.fx=3;//横向
					
					this.fy=-3;//纵向
					this.leftInit=0;//砖块left初始值
					this.topInit=0;//砖块top初始值
				}
				//初始化功能 摆放每一个砖块的位置
				BlockBreak.prototype.init=function(){
					for(var i=0;i<this.list.length;i++){
						this.list[i].style.backgroundColor="rgb("+rand(0,255)+","+rand(0,255)+","+rand(0,255)+")";
						var x=this.leftInit*this.list[0].offsetWidth;
						var y=this.topInit;
						this.list[i].style.left=x+'px';
						this.list[i].style.top=y+'px';
						this.leftInit++

						//换行
						if((i+1)%10==0){
							this.leftInit=0;
							this.topInit+=this.list[0].offsetHeight;
						}
						
					}
				}
				//挡板运动
				
				BlockBreak.prototype.keydown=function(){
					var that=this;
					var mleft=false;
					var mright=false;
					
					//因为按键之后第一次跟第之后的移动之间会有延迟,这是操作系统的问题防止连按两次
					//所以就不把移动放在这里了,把治理放一个标志,移动放在定时器里
					document.onkeydown=function(e){
						var e=e||event;
						if(e.keyCode==37){
							mleft=true;
						}
						if(e.keyCode==39){
							mright=true;
							
						}
					}
					document.onkeyup=function(){
						mleft=false;
						mright=false;
					}
				setInterval(function(){
					
					console.log(mleft);
					if (mleft){
						that.board.style.left=that.board.offsetLeft-15+'px';
						if(that.board.offsetLeft<=0){
							that.board.style.left=0;
						}
					}else if(mright){
						that.board.style.left=that.board.offsetLeft+15+'px';
						if(that.board.offsetLeft>=720){
							that.board.style.left=720+'px';
						}
					}
					
					
				},50)	
					
					
				}
				var times=0;
				var score=0;
								//小球运动
				BlockBreak.prototype.move=function(){
					var timer=null;
					var that=this;
					timer=setInterval(function(){
						that.ball.style.left=that.ball.offsetLeft+that.fx+'px';
						that.ball.style.top=that.ball.offsetTop+that.fy+'px';
					//小球四个方向反弹
					if(that.ball.offsetTop<=0){
						that.fy*=-1;
					}
					if(that.ball.offsetLeft<=0){
						that.fx*=-1;
					}
					if(that.ball.offsetLeft>=(that.box.offsetWidth-that.ball.offsetWidth)){
						that.fx*=-1;
						
					}
					if(that.ball.offsetTop>=(that.box.offsetHeight-that.ball.offsetHeight)){
						//游戏结束
						
						$('lose').style.display='block';
						clearInterval(timer);
						$('res').innerHTML='游戏结束'+"<br>";
					}
					//小球挡板碰撞反弹
					if(that.ball.offsetTop+that.ball.offsetHeight>=that.board.offsetTop){
						if(that.ball.offsetLeft+that.ball.offsetWidth>=that.board.offsetLeft){
							if(that.ball.offsetLeft<=that.board.offsetLeft+that.board.offsetWidth){
								that.fy*=-1;
								times++;
								$('times').innerHTML=times+'次'+'<br>';
							}
						}
					}
					//小球砖块反弹
					//以一个小球为基准 遍历所有砖块,找到满足条件的砖块
						for(var i=0;i<that.list.length;i++)
						{
							if(that.ball.offsetTop<=that.list[i].offsetTop+that.list[i].offsetHeight){
								if(that.ball.offsetLeft>=that.list[i].offsetLeft){
									if(that.ball.offsetLeft<=that.list[i].offsetLeft+that.list[i].offsetWidth){
										that.fy*=-1;
										that.list[i].style.display='none';
										score++;
										$('score').innerHTML=score+'分'+'<br>';
									}
								}
							}
							 
						}
						
					},10)
				}
				var bb=new BlockBreak();
				bb.init();
				$('start').onclick=function(){
					$('times').innerHTML=0+'次'+'<br>';
					$('score').innerHTML=0+'分'+"<br>";
					$('res').innerHTML= "正在游戏"+"<br>";
					bb.keydown();
					bb.move();
					
				}
				
			}
		</script>
	</head>
	<body>
		<div id="container">
			<div id="show">
				<span id="info">游戏重要信息<br></span>
				<span>当前时间:</span>
				<span id="time">加载中...<br></span>
				<span>游戏状态:</span>
				<span id="res">加载中...<br></span>
				<span>挡板打球次数:</span>
				<span id="times">加载中...<br></span>
				<span>游戏得分:</span>
				<span id="score">加载中...</span>
			</div>
		
		
		
		<!----游戏区域--->
		<div id="box">
			<ul>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		<div id="bubble"></div>
		<div id="board"></div>
		<div id="lose"><h1>Game  Over!</h1></div>
		</div>
		
		<button type="button" id="start">开始游戏</button>
		
		</div>
	</body>
</html>

复制粘贴即运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值