<pre name="code" class="javascript">//為了程式方便,我們定義兩個顏色陣列<br>var heroColor=new Array("#BA9658","#FEF26E"); <br>var enmeyColor=new Array("#00A2B5","#00FEFE"); <br>//其它的敵人坦克,這裡的擴充性,還是不錯的. <br>//子彈類<br>function Bullet(x,y,direct,speed){ <br>this.x=x; <br>this.y =y; <br>this.direct=direct; <br>this.speed=speed; <br>this.timer=null; <br>this.isLive=true; <br>this.run=function run() { <br>//在該表這個子彈的座標時,我們先判斷子彈是否已經到邊界<br>if(this.x=400||this.y=300){ <br>//子彈要停止. <br>window.clearInterval(this.timer); <br>//子彈死亡<br>this.isLive=false; <br> }else{ <br>//這個可以去修改座標<br>switch(this.direct){ <br>case 0: <br>this.y-=this.speed; <br>break; <br>case 1: <br>this.x =this.speed; <br>break; <br>case 2: <br>this.y =this.speed; <br>break; <br>case 3: <br>this <br>break; <br>case 3: <br>this .x-=this.speed; <br>break; <br>} <br>} <br>document.getElementById("aa").innerText="子彈x=" this.x " 子彈y=" this. y; <br>} <br>} <br>//這是一個Tank類別<br>function Tank(x,y,direct,color){ <br>this.x=x; <br>this.y =y; <br>this.speed=1; <br>this.direct=direct; <br>//一個坦克,需要兩個顏色. <br>this.color=color; <br>//上移<br>this.moveUp=function(){ <br>this.y-=this.speed; <br>this.direct=0; <br>} <br>//向右<br>this.moveRight=this.moveRight= function(){ <br>this.x =this.speed; <br>this.direct=1; <br>} <br>//下移<br>this.moveDown=function(){ <br>this .y =this.speed; <br>this.direct=2; <br>} <br>//左<br>this.moveLeft=function(){ <br>this.x-=this.speed; <br>this.direct=3; <br>} <br>} <br>//定義一個Hero類<br>//x 表示坦克的橫坐標, y 表示縱坐標, direct 方向<br>function Hero( x,y,direct,color){ <br>//下面兩句話的作用是透過物件冒充,達到繼承的效果<br>this.tank=Tank; <br>this.tank(x,y,direct ,color); <br>//增加一個函數,射擊敵人坦克. <br>this.shotEnemy=function(){ <br>//創建子彈, 子彈的位置應該和hero有關係,並且和hero的方向有關.!!! <br>//this.x 就是當前hero的橫座標,這裡我們簡單的處理(細化) <br>switch(this.direct){ <br>case 0: <br>heroBullet= new Bullet(this.x 9,this.y,this.direct,1); <br>break; <br>case 1: <br>heroBullet=new Bullet(this.x 30,this.y 9,this. direct,1); <br>break; <br>case 2: <br>heroBullet=new Bullet(this.x 9,this.y 30,this.direct,1); <br>break; <br>case 3: //右邊<br>heroBullet=new Bullet(this.x,this.y 9,this.direct,1); <br>break; <br>} <br>//呼叫我們的子彈run, 50是老師多次測試得到的一個結論. <br>var timer=window.setInterval("heroBullet.run()",50); <br>//把這個timer賦給這個子彈(js物件是引用傳遞! ) <br>heroBullet.timer=timer; <br>} <br>} <br>//定義一個EnemyTank類別<br>function EnemyTank (x,y,direct,color){ <br>//也透過物件冒充,來繼承Tank <br>this.tank=Tank; <br>this.tank(x,y,direct,color); <br>} <br>//畫出自己的子彈,多說一句,你也可以把函數封裝到Hero類別<br>function drawHeroBullet(){ <br>//這裡,我們加入了一句話,但是要知道這裡加,是需要對整個程式有把握<br>if(heroBullet !=null&&heroBullet.isLive){ <br>cxt.fillStyle="#FEF26E"; <br>cxt.fillRect(heroBullet.x,heroBullet.y,2,2); <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>} <br>) //繪製坦克<br>function drawTank(tank){ <br>//考慮方向<br>switch(tank.direct){ <br>case 0: //上<br>case 2:// 下<br>//畫出自己的坦克,使用前面的繪圖技術<br>//設定顏色<br>cxt.fillStyle=tank.color[0]; <br>//韓老師使用先死--->後活(初學者最好用這個方法) <br>//先畫出左面的長方形<br>cxt.fillRect(tank.x,tank.y,5,30); <br>//畫出右邊的矩形(這時請大家思路->一定要一個參照點) <br>cxt.fillRect(tank.x 15,tank.y,5,30); <br>//畫出中間矩形<br>cxt. fillRect(tank.x 6,tank.y 5,8,20); //畫出坦克車的蓋子cxt.fillStyle=tank.color[1]; cxt.arc(tank. x 10,tank.y 15,4,0,360,true); cxt.fill(); //畫出砲筒(直線) cxt.strokeStyle=tank.color[1]; //設定線條的寬度cxt.lineWidth=1.5; cxt.beginPath(); cxt.moveTo(tank.x 10,tank.y 15); if( tank.direct==0){ cxt.lineTo(tank.x 10,tank.y); }else if(tank.direct==2){ cxt.lineTo(tank.x 10,tank.y 30); } cxt.closePath(); cxt.stroke(); break; case 1: //右與左casease 3: //畫出自己的坦克,使用前面的繪圖技術//設定顏色cxt.fillStyle=tank.color[0]; //Han 先生は、最初に die --->live Later を使用します (初心者はこのメソッドを使用するのが最適です) <br>//最初に左側に長方形を描画します <br>cxt.fillRect(tank.x, Tank.y,30 ,5); <br>//右側に長方形を描画します (この時点で考えてください -> 参照点があるはずです) <br>cxt.fillRect(tank.x, Tank.y 15,30, 5); <br>//中央の長方形を描画します<br>cxt.fillRect(tank.x 5, Tank.y 6,20,8); <br>//タンクのカバーを描画します<br>cxt. fillStyle=tank.color[1]; <br>cxt.arc(tank.x 15,tank.y 10,4,0,360,true); <br>cxt.fill(); (直線) <br>cxt.strokingStyle=tank.color[1]; <br>//線の幅を設定します<br>cxt.lineWidth=1.5; <br>cxt.beginPath(); cxt.moveTo(tank. x 15,tank.y 10); <br>//右へ<br>if(tank.direct==1){ <br>cxt.lineTo(tank.x 30,tank. y 10); <br> }else if(tank.direct==3){ //Left<br>cxt.lineTo(tank.x,tank.y 10); <br>} <br>cxt.closePath( ); <br>cxt .ストローク(); <br>ブレーク <br>} <br>} <br><br> <br><pre class="brush:php;toolbar:false">
登入後複製