html5遊戲開發之-----祖瑪小遊戲

</pre><pre name="code" class="javascript">
</pre><pre name="code" class="javascript">
</pre><pre name="code" class="javascript">
/*祖瑪小遊戲相信很多人玩過,
		今天我嘗試在html5的畫布上嘗試用js寫了一個小遊戲,
		開過過程的感悟是:
		遇到一堆代碼的時候,應該首先得出一個整體的框架
		然後根據這個粗略的框架進行分塊開發
		即使剛開始的時候毫無頭緒
		也要即刻動手
		昨天在看jQuery源碼的時候
		看着8千行的代碼
		如果硬着頭皮從第一行開始看
		保證過不了多久便放棄了
		正確的做法是
		從剛開始通讀全文劃分功能塊
		先從簡單的或者跟現有知識相關聯的入手
		然後各個擊破
		在每一個板塊集中全部精力攻克
		不想其他的模塊或者是整體
		這應該是模塊化設計的東西吧
		這纔是真理..........嘿嘿 */



<!DOCTYPE html>
		
	

<html>
	<head>
		<meta charset="UTF-8">
		
		<title></title>
		<style type="text/css">
		*{margin: 0; padding: 0;}
		body{background: black;}
		#div1{background:white; width: 600px; margin: 20px auto;}
		</style>
		<script type="text/javascript">
		window.οnlοad=function(){
			//加載畫布
			var oC=document.getElementById('c1');
			var oGc=oC.getContext('2d');  //有這句話才能在畫布上寫東西
			var i=0;
			var iRotate=0; //青蛙旋轉速度
			
			var yImg=new Image();  //加載青蛙
			
			yImg.src='img/person.png';
			yImg.οnlοad=function(){
			
			setInterval(function(){  //外圍小球定時器
			oGc.clearRect(0,0,oC.width,oC.height);
			//每隔30ms畫一個背景+小球
			oGc.beginPath();
			oGc.arc(300,200,200,-90*Math.PI/180,180*Math.PI/180,false);
			oGc.stroke();
			
			oGc.beginPath();
			oGc.arc(250,200,150,180*Math.PI/180,360*Math.PI/180,false);
			oGc.stroke();
			 
			oGc.beginPath();
			oGc.arc(400,200,20,0*Math.PI/180,360*Math.PI/180,false);
			oGc.stroke();
		    
			oGc.beginPath();
			oGc.arc(i++,i++,20,0*Math.PI/180,360*Math.PI/180,false);
			oGc.stroke();
			//畫小球
			for(var i=0;i<ball.length;i++){
				
				oGc.beginPath();
				oGc,moveTo(ball[i].x,ball[i].y);  //將畫筆移動到開始位置,準備畫小球
				oGc.arc(ball[i].x,ball[i].y,20,0*Math.PI/180,360*Math.PI/180,false); //0度從右邊中間開始
				oGc.fill();  //填充顏色,默認是黑色
			}
			
			//青蛙旋轉
			oGc.save();
			oGc.translate(300,200);
			oGc.rotate(iRotate); //通過iRotate控制青蛙跟着鼠標轉
			oGc.translate(-40,-40);

			oGc.drawImage(yImg,0,0);
			oGc.restore(); 
			//吐出來紅色小球
			for(var i=0;i<bullet.length;i++){
				oGc.save();
				oGc.fillStyle='red';
				oGc.beginPath();     //每次畫圖,beginPath()和restore()是必須
				oGc,moveTo(bullet[i].x,bullet[i].y);
				oGc.arc(bullet[i].x,bullet[i].y,20,0*Math.PI/180,360*Math.PI/180,false);
				oGc.fill();
				oGc.restore(); 
			}
			
			
			},1000/60);
			setInterval(function(){
				
				for(var i=0;i<ball.length;i++){
					ball[i].num++;  //num爲角度
					
					 //當小球運動到左邊中心的時候需要改變方向,因爲兩個圓的半徑不一樣
					if(ball[i].num==270){
						ball[i].r=150; 
						ball[i].startX=250;
						ball[i].startY=50;
					}
					if(ball[i].num==270+180){
						window.location.reload(); //當有小球到達終點的時候,有細節蘇,重新加載
					alert('遊戲結束');
					}
					ball[i].x=Math.sin(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startX;
					ball[i].y=ball[i].r-Math.cos(ball[i].num*Math.PI/180)*ball[i].r+ball[i].startY;
				}
					for(var i=0;i<bullet.length;i++){
					bullet[i].x=bullet[i].x+bullet[i].sX;
					bullet[i].y=bullet[i].y+bullet[i].sY;
					
					
					}
					for(var i=0;i<bullet.length;i++){
					for(var j=0;j<ball.length;j++){
					if(pz(bullet[i].x,bullet[i].y,ball[j].x,ball[j].y)){
						
						bullet.splice(i,1);  //兩個小球碰撞後通過刪除數組使小球消失
						ball.splice(j,1);
						break;
					
					}
					
					
					
					}
					
					
					
					}
			
			},30);
			
			var ball=[];
			
			
			setInterval(function(){
				//通過數組保存小球運動數據可以方便後期拓展
				ball.push(
					{
						x:300,
						y:0,
						r:200,
						num:0,
						startX:300,
						startY:0
						 
						
					}
				)
				
			},350);
			
			//鼠標移動,中心圖片跟着變化
			oC.οnmοusemοve=function(ev){
			var ev=ev||window.event; //鼠標兼容性設置
			var x=ev.clientX-oC.offsetLeft;
			var y=ev.clientY-oC.offsetTop;
		
			var a=x-300;
			var b=y-200;
			
			var c=Math.sqrt(a*a+b*b);
		

  			//已下是設置青蛙跟着鼠標旋轉
  			//高中數學....
			
			if(a>0 && b>0){
				iRotate=Math.asin(b/c)+90*Math.PI/180;
			
			}else if(a>0){
				iRotate=Math.asin(a/c);
			}
			if(a<0 && b>0){
			iRotate=-(Math.asin(b/c)+90*Math.PI/180);
			
			
			}else if(a<0){
			iRotate=Math.asin(a/c);
			}
			
			};
			//吐出來的小球
			var bullet=[];
			oC.οnmοusedοwn=function(ev){
			var ev=ev||window.event;
			var x=ev.clientX-oC.offsetLeft;
			var y=ev.clientY-oC.offsetTop;
		
			var a=x-300;
			var b=y-200;
			
			var c=Math.sqrt(a*a+b*b);
			
			var speed=5;  //吐出來小球小球運動素的
			var sX=speed*a/c;
			var sY=speed*b/c;
			bullet.push(
			{
			x:300,
			y:200,
			sX:sX,
			sY:sY
				
			
			});
				
			}
			};
			//碰撞檢測函數
			function pz(x1,y1,x2,y2){
			var a=x1-x2;
			var b=y1-y2;
			var c=Math.sqrt(a*a+b*b);
			if(c<40){
					return 40;
					
			}else{
					return false;
			}
			
			
			
			}
			
			
			
		}
		

		</script>
		
	</head>
	<body>
	<div id="div1">
	<canvas id="c1" width="600" height="600"></canvas>
		
	</div>
				

	</body>
</html>
</pre><pre name="code" class="javascript"><img src="https://img-blog.csdn.net/20160424104647522?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
</pre><pre name="code" class="javascript"><img src="https://img-blog.csdn.net/20160424104709165?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
</pre><pre name="code" class="javascript">
</pre><pre name="code" class="javascript">
<img src="https://img-blog.csdn.net/20160424104618240?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章