本文實例講述了JS小游戲的宇宙戰機源碼,分享給大家供大家參考。具體介紹如下:
一、游戲介紹:
這是一款飛行射擊游戲,縱向,共六關。
二、游戲需求:
1.戰機可發射子彈,子彈可通過獲取道具升級。
2.戰機可放bomb,可獲取道具增加數量。
3.戰機可蓄力攻擊。
4.道具有三種,分別是升級子彈,增加bomb數量,增加戰機數量。
5.每關音樂不同。
6.戰機被擊落后再進入戰場,有保護狀態。
7.敵機AI設計。
游戲運行如下圖所示:
完整實例代碼點擊此處本站下載。
三、Javascript源碼部分:
/** 宇宙戰機* Author: fdipzone* Date: 2013-02-12* Ver: 1.0*/window.onload = function(){ var gameimg = [ 'images/fighter.png', 'images/fighter_p.png', 'images/fighter_s.png', 'images/fighter_sp.png', 'images/shot.png', 'images/destroy.png', 'images/destroy_boss.png', 'images/enemy.png', 'images/bullet.png', 'images/gift.png', 'images/bomb.png', 'images/boss1.png']; var callback = function(){ var gameplane = $('gameplane'); fighter.init(); fighter.bgmove(gameplane); } img_preload(gameimg, callback);};/** fighter class */var fighter = (function(){ var hiscore = 10000; // 最高分 var score = 0; // 當前分 var fighternum = 3; // 戰機數量 var bombnum = 3; // 炸彈數量 var ft = null; // 戰機對象 var is_start = 0; // 是否已開始游戲 var is_bombing = 0; // 是否爆炸中 var is_lock = 1; // 是否鎖定 var is_over = 0; // 是否已結束 var is_clear = 0; // 清屏 var is_pile = 0; // 是否已達成蓄力 var is_protect = 0; // 是否保護狀態 var pilenum = 0; // 已蓄力數量 var ackey = {}; // 記錄鍵是否按下 var keypriority = {}; // 沖突鍵優先級 var gamekey = [37,38,39,40,83,65]; // 游戲的按鍵 var scoretag = [0,20,30,40,50,60,500]; // 不同敵機的分數 var level = 1; // 關數 var power = 1; // 戰機子彈威力 var cheatcode = []; // 記錄cheat輸入 var failtimes = 0; // 挑戰失敗次數 // boss 數據 var bossdata = [ {'armor':500, 'left':136, 'top':-169, 'step':30}, {'armor':1000, 'left':136, 'top':-169, 'step':30}, {'armor':1500, 'left':136, 'top':-169, 'step':30}, {'armor':2000, 'left':136, 'top':-169, 'step':30}, {'armor':2500, 'left':136, 'top':-169, 'step':30}, {'armor':3000, 'left':136, 'top':-169, 'step':30}, ]; // 出現的敵機 var enemydata = []; // 當前出現的boss var curboss = null; // 關卡數據 var map = [ // level 1 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] }, // level 2 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] }, // level 3 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] }, // level 4 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] }, // level 5 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] }, // level 6 { 'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]], 'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms3500':[[1, 10, 12, -23, 190, 10]], 'ms5500':[[3, 800, 2, 100, -50, 10]], 'ms7500':[[3, 800, 2, 200, 450, -10]], 'ms8000':[[1, 10, 11, -23, 100, 10]], 'ms9500':[[3, 800, 2, 100, -50, 10]], 'ms11500':[[3, 800, 2, 200, 450, -10]], 'ms13500':[[3, 800, 2, 100, -50, 10]], 'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]], 'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]], 'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms38000':[[1, 10, 11, -23, 10, 10]], 'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]], 'ms45500':[[3, 800, 2, 50, -50, 10]], 'ms47500':[[3, 800, 2, 150, 450, -10]], 'ms49500':[[3, 800, 2, 50, -50, 10]], 'ms51500':[[3, 800, 2, 150, 450, -10]], 'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]], 'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]], 'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]], 'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]], 'ms71000':[[1, 10, 13, -23, 220, 10]], 'ms76000':[] } ]; // 初始化 init = function(){ ft = $('fighter'); reset(); key_event(); } // 開始游戲 start = function(){ is_clear = 0; is_protect = 0; disp(ft.id, 'show'); reset_fighter(); reset_pile(); process(); bgsound(level, true); bgchange(level); fighter_init(); } // 設置事件 key_event = function(){ document.onkeydown = function(e){ var e = e || window.event; var curkey = e.keyCode || e.which || e.charCode; if(is_start==0){ if(cheatcode.length>12){ cheatcode.shift(); } cheatcode.push(curkey); // 記錄用戶輸入的cheatcode } if(is_start==1 && in_array(curkey,gamekey)){ if(ackey[curkey.toString()]==0 || typeof(ackey[curkey.toString()])=='undefined' || !in_array(curkey,[83,65])){ // 射擊與炸彈連按屏蔽 ackey[curkey.toString()] = 1; // save key down switch(curkey){ case 37: case 39: keypriority.left = curkey; // left right break; case 38: case 40: keypriority.top = curkey; // up down break; } }else{ return false; } } if(curkey==13 || is_start==1 && is_lock==0){ // game is start or key=13 switch(curkey){ case 13: // enter if(is_start==0){ is_start=1; disp('op', 'hide'); msg_show(); setTimeout(function(){ msg_hide(); cheat(); start(); }, 1500); } break; case 83: // 射擊 shot(); break; case 65: // 炸彈 bomb(); break; } } } document.onkeyup = function(e){ var e = e || window.event; var curkey = e.keyCode || e.which || e.charCode; if(is_start==1 && in_array(curkey,gamekey)){ ackey[curkey.toString()] = 0; // release key down if(curkey==83){// 釋放蓄力攻擊 if(is_pile==1){ pile_shot(); } reset_pile(); } } } } // 循環執行的動作 action = function(){ var movestep = 5; // 移動步長 var et = setInterval(function(){ if(is_start==0 || is_lock==1){ clearInterval(et); } // 移動 if(ackey['37']==1 && (ackey['39']==0 || keypriority.left==37)){ // 沖突時判斷優先級 if(getPosition(ft,'left')<movestep){ setPosition(ft, 'left', 0); // left }else{ setPosition(ft, 'left', getPosition(ft,'left') - movestep); } } if(ackey['38']==1 && (ackey['40']==0 || keypriority.top==38)){ if(getPosition(ft, 'top')<movestep){ setPosition(ft, 'top', 0); // top }else{ setPosition(ft, 'top', getPosition(ft,'top') - movestep); } } if(ackey['39']==1 && (ackey['37']==0 || keypriority.left==39)){ if(400-(getPosition(ft,'left')+50)<movestep){ setPosition(ft, 'left', 350); //width-fighter.width }else{ setPosition(ft, 'left', getPosition(ft,'left') + movestep); } } if(ackey['40']==1 && (ackey['38']==0 || keypriority.top==40)){ if(640-(getPosition(ft,'top')+50)<movestep){ setPosition(ft, 'top', 590); // height-fighter.height }else{ setPosition(ft, 'top', getPosition(ft,'top') + movestep); } } // 蓄力攻擊 if(ackey['83']==1){ if(pilenum<1000){ pilenum = pilenum + 20; }else if(is_pile==0){ is_pile = 1; if(is_protect==1){ setClass(ft, 'fighter_sp'); }else{ setClass(ft, 'fighter_s'); } } } }, 20); } // 戰機射擊 shot = function(){ // 創建子彈 var bullet = document.createElement('div'); var offsetx; switch(power){ case 1: offsetx = 20; break; case 2: offsetx = 15; break; case 3: offsetx = 10; break; case 4: offsetx = 4; break; } setClass(bullet, 'shot' + power); // 設置子彈初始位置 setPosition(bullet, 'top', getPosition(ft, 'top')-30); setPosition(bullet, 'left', getPosition(ft, 'left') + offsetx); ft.parentNode.appendChild(bullet); // 設置子彈運動 var et = setInterval(function(){ if(getPosition(bullet,'top')<=-30 || is_lock==1){ clearInterval(et); ft.parentNode.removeChild(bullet); // 釋放子彈 } for(var i=0; i<enemydata.length; i++){ if(enemydata[i]!=null){ if(impact(bullet, enemydata[i])){ // 打中敵機 destroy(enemydata[i]); scoreup(enemydata[i].type); enemydata[i] = null; clearInterval(et); ft.parentNode.removeChild(bullet); } } } if(curboss!=null){ // boss 戰 if(impact(bullet, curboss['obj'])){ // 打中boss curboss['armor']=parseInt(curboss['armor'])-power*10; clearInterval(et); ft.parentNode.removeChild(bullet); } } setPosition(bullet, 'top', getPosition(bullet, 'top')-15); }, 30) } // 蓄力射擊 pile_shot = function(){ var pilebullet = document.createElement('div'); setClass(pilebullet, 'pileshot'); // 設置子彈初始位置 setPosition(pilebullet, 'top', getPosition(ft, 'top')-30); setPosition(pilebullet, 'left', getPosition(ft, 'left')); ft.parentNode.appendChild(pilebullet); var et = setInterval(function(){ if(getPosition(pilebullet,'top')<=-85 || is_lock==1){ clearInterval(et); ft.parentNode.removeChild(pilebullet); // 釋放子彈 } for(var i=0; i<enemydata.length; i++){ if(enemydata[i]!=null){ if(impact(pilebullet, enemydata[i])){ // 打中敵機 destroy(enemydata[i]); scoreup(enemydata[i].type); enemydata[i] = null; } } } if(curboss!=null){ // boss 戰 if(impact(pilebullet, curboss['obj'])){ // 打中boss curboss['armor']=parseInt(curboss['armor'])-100; clearInterval(et); ft.parentNode.removeChild(pilebullet); // 釋放子彈 } } setPosition(pilebullet, 'top', getPosition(pilebullet, 'top')-20); }, 30) } // 放炸彈 bomb = function(){ if(is_bombing==0 && bombnum>0){ // 不是爆炸中且有炸彈數 is_bombing = 1; bombnum --; setHtml('bombnum', bombnum); // 自減1 var opacity = 100; setOpacity($('bomb'), opacity); disp('bomb', 'show'); // 清除所有敵機及敵方子彈 is_clear = 1; // 打擊boss if(curboss!=null){ curboss['armor'] = parseInt(curboss['armor'])-300; } var step = 0; var et = setInterval(function(){ // 炸彈效果 if(step<11){ setBgPosition($('bomb'), 0, step*(-280)); }else{ clearInterval(et); disp('bomb', 'hide'); is_bombing = 0; is_clear = 0; } step ++; }, 70); } } // 游戲進程 process = function(){ var leveldata = map[level-1], processed = 0, step = 10; var levelstep = 0; // 每關開始清0 var et = setInterval(function(){ if(is_lock==0){ processed += step; if(attrcount(leveldata)>levelstep){ // 未完成本關 if(leveldata['ms'+processed]){ for(var i=0; i<leveldata['ms'+processed].length; i++){ var msdata = leveldata['ms'+processed][i]; create(msdata); } levelstep ++; // 進度 } }else{ // 已完成本關,進入Boss戰 bosswar(); clearInterval(et); } } if(is_over==1){ clearInterval(et); } }, step); } /* 創建關卡元素 /* msdata:{ num:出現的數量 interval:間隔 type:類型 top:原始top坐標 left:原始left坐標 step:移動距離 } */ create = function(msdata){ var num = msdata[0], interval = msdata[1], type = msdata[2], top = msdata[3], left = msdata[4], step = msdata[5]; var et = setInterval(function(){ if(num>0){ var enft = document.createElement('div'); setClass(enft, 'element' + type); enft.type = type; setPosition(enft, 'top', top); setPosition(enft, 'left', left); ft.parentNode.appendChild(enft); if(type<=10){ enemydata.push(enft); } route(enft, type, step); num--; }else{ clearInterval(et); } }, interval); } // 元素運動軌跡 route = function(enft, type, step){ var et = null; switch(type){ case 1: // 曲線 var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step)); setPosition(enft, 'left', getPosition(enft,'left')+step); count<5? count++ : (count=0, step*=-1); if(getPosition(enft, 'top')>640 || is_over==1 || is_clear==1){ clearInterval(et); ft.parentNode.removeChild(enft); } impact_handle(enft, et); }else{ clearInterval(et); } }, 80); break; case 2: // 橫向 var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'left', getPosition(enft,'left')+step); count<9? count++ : (count=0, attack(enft,1,17,47)); if(getPosition(enft,'left')>400 && step>0 || getPosition(enft,'left')<-50 && step<0 || is_over==1 || is_clear==1){ clearInterval(et); ft.parentNode.removeChild(enft); } impact_handle(enft, et); }else{ clearInterval(et); } }, 80); break; case 3: // 豎向 var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+step); count<9? count++ : (count=0, attack(enft,1,17,47)); if(getPosition(enft,'top')>640 || is_over==1 || is_clear==1){ clearInterval(et); ft.parentNode.removeChild(enft); } impact_handle(enft, et); }else{ clearInterval(et); } }, 75); break; case 4: // 左右循環移動攻擊 var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'left', getPosition(enft,'left')+step); count<10? count++ : (count=0, attack(enft,4,17,31)); if(getPosition(enft,'left')>=350 && step>0 || getPosition(enft,'left')<=0 && step<0){ step*=-1; } if(is_over==1 || is_clear==1){ clearInterval(et); ft.parentNode.removeChild(enft); } impact_handle(enft, et); }else{ clearInterval(et); } }, 80); break; case 5: // 從后面攻擊 var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+step); count<9? count++ : (count=0, attack(enft,1,17,-17)); if(getPosition(enft,'top')<-32 || is_over==1 || is_clear==1){ clearInterval(et); ft.parentNode.removeChild(enft); } impact_handle(enft, et); }else{ clearInterval(et); } }, 75); break; case 11: // power gift var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step)); setPosition(enft, 'left', getPosition(enft,'left')+step); count<5? count++ : (count=0, step*=-1); if(getPosition(enft, 'top')>640 || is_over==1){ clearInterval(et); ft.parentNode.removeChild(enft); } if(impact(enft, ft) && is_lock==0){ // 獎勵與戰機相撞 powerup(); ft.parentNode.removeChild(enft); clearInterval(et); } }else{ clearInterval(et); } }, 80); break; case 12: // bomb gift var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step)); setPosition(enft, 'left', getPosition(enft,'left')+step); count<5? count++ : (count=0, step*=-1); if(getPosition(enft, 'top')>640 || is_over==1){ clearInterval(et); ft.parentNode.removeChild(enft); } if(impact(enft, ft) && is_lock==0){ // 獎勵與戰機相撞 bombup(); ft.parentNode.removeChild(enft); clearInterval(et); } }else{ clearInterval(et); } }, 80); break; case 13: // fighter gift var count = 0; et = setInterval(function(){ if(node_exist(enft)){ setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step)); setPosition(enft, 'left', getPosition(enft,'left')+step); count<5? count++ : (count=0, step*=-1); if(getPosition(enft, 'top')>640 || is_over==1){ clearInterval(et); ft.parentNode.removeChild(enft); } if(impact(enft, ft) && is_lock==0){ // 獎勵與戰機相撞 fighterup(); ft.parentNode.removeChild(enft); clearInterval(et); } }else{ clearInterval(et); } }, 80); break; } } // 銷毀 destroy = function(dobj){ // dobj:被銷毀的對象 var dest = document.createElement('div'); setClass(dest, 'destroy'); setPosition(dest, 'top', getPosition(dobj, 'top')); setPosition(dest, 'left', getPosition(dobj, 'left')); ft.parentNode.appendChild(dest); if(dobj.id=='fighter'){ // 戰機被擊中 disp(dobj.id, 'hide'); power = 1; bombnum = 3; fighternum--; setHtml('fighternum', fighternum); setHtml('bombnum', bombnum); is_lock = 1; }else{ dobj.parentNode.removeChild(dobj); } var step = 0; var et = setInterval(function(){ if(step<11){ setBgPosition(dest, step*(-48), 0); step++; }else{ if(dobj.id=='fighter'){ setTimeout(function(){ if(fighternum>0){ levelcontinue(); }else{ if(curboss!=null){ obj = curboss['obj']; obj.parentNode.removeChild(obj); } gameover(); //戰機全部被擊中,游戲結束 } },1000); } dest.parentNode.removeChild(dest); clearInterval(et); } }, 50); } // boss war bosswar = function(){ var boss = bossdata[level-1]; var bossft = document.createElement('div'); setClass(bossft, 'boss' + level); setPosition(bossft, 'left', boss['left']); setPosition(bossft, 'top', boss['top']); ft.parentNode.appendChild(bossft); curboss = {"armor":boss['armor'],"obj":bossft}; switch(level){ case 1: // boss 1 case 2: // boss 2 case 3: // boss 3 case 4: // boss 4 case 5: // boss 5 case 6: // boss 6 var step = -3; var count = 0; var et = setInterval(function(){ if(getPosition(bossft,'top')<50){ // boss 進場 setPosition(bossft, 'top', getPosition(bossft, 'top')+5); }else{ if(curboss['armor']<=0){ // boss over clearInterval(et); bossover(); }else{ if(step<0){ // 左移動 if(getPosition(bossft,'left')>10){ setPosition(bossft, 'left', getPosition(bossft, 'left')+step); }else{ step*=-1; } } if(step>0){ // 右移動 if(getPosition(bossft,'left')<260){ setPosition(bossft, 'left', getPosition(bossft, 'left')+step); }else{ step*=-1; } } if(count>=35 && count%35==0){ attack(bossft, 1, 30, 30); attack(bossft, 1, 80, 30); } if(count>=60 && count%60==0){ attack(bossft, 2, 15, 75); attack(bossft, 2, 105, 75); } if(count>=100 && count%100==0){ attack(bossft, 3, 60, 92); } count<8400? count++ : count=0; } } }, boss['step']); break; } } /* attack * obj 敵機 * type 攻擊類型 * left 子彈初始left * top 子彈初始top */ attack = function(obj, type, left, top){ if(is_lock==1){ return false; // 如已鎖定不射擊 } var oleft = getPosition(obj, 'left')+left; var otop = getPosition(obj, 'top')+top; switch(type){ case 1: //向戰機攻擊 // 子彈初始位置與戰機位置 var opoint = {x:oleft+7, y:otop+7}; var dpoint = {x:getPosition(ft,'left')+25, y:getPosition(ft,'top')+25}; var p = vector(opoint, dpoint, 8); enftbullet('bullet', oleft, otop, p[0], p[1], 35); break; case 2: //直線攻擊 var num = 3; var st = setInterval(function(){ if(num>0){ enftbullet('bullet', oleft, otop, 0, 8, 35); num --; }else{ clearInterval(st); } }, 150); break; case 3: // 散開攻擊 var num = 3; var st = setInterval(function(){ if(num>0){ switch(num){ case 1: enftbullet('sbullet', oleft, otop, 0, 8, 35); break; case 2: enftbullet('sbullet', oleft, otop, 3, 8, 35); break; case 3: enftbullet('sbullet', oleft, otop, -3, 8, 35); break; } num --; }else{ clearInterval(st); } }, 0); break; case 4: // 小散開攻擊 var num = 3; var st = setInterval(function(){ if(num>0){ switch(num){ case 1: enftbullet('bullet', oleft, otop, 0, 8, 35); break; case 2: enftbullet('bullet', oleft, otop, 3, 8, 35); break; case 3: enftbullet('bullet', oleft, otop, -3, 8, 35); break; } num --; }else{ clearInterval(st); } }, 0); break; } } /* enft bullet * type 子彈類型 * oleft,otop 子彈初始位置 * left,top 子彈亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb 国产亚洲欧洲在线| 精品国产91久久久| 精品国产一区二区三区久久狼黑人| 国产成人91久久精品| 国产精品日韩欧美综合| 日韩在线播放一区| 91精品国产乱码久久久久久久久| 欧美高清在线观看| 国产不卡av在线免费观看| 国产一区二区视频在线观看| 国产精品第8页| 欧美激情在线有限公司| 亚洲娇小xxxx欧美娇小| 国产精品日韩在线一区| 欧美夫妻性生活xx| 精品久久香蕉国产线看观看gif| 国产一区二区av| 欧美专区中文字幕| 狠狠色狠狠色综合日日五| 欧美成人免费在线视频| 国产精品美女在线| 久久久久99精品久久久久| 欧美日韩精品二区| 久久99久久亚洲国产| 亚洲欧洲国产精品| 日韩中文视频免费在线观看| 国产精品麻豆va在线播放| 亚洲男女自偷自拍图片另类| 久久精品这里热有精品| 久久久久久久久爱| 日韩欧美成人网| 欧美疯狂性受xxxxx另类| 欧美日韩国产精品一区| 欧美国产日韩二区| 成人久久久久久久| 亚洲精品91美女久久久久久久| 欧美日韩激情小视频| 欧美黄色性视频| 98精品国产自产在线观看| 久久国内精品一国内精品| 久久久久在线观看| 欧美刺激性大交免费视频| 欧美人与物videos| 亚洲国产精品电影在线观看| 91精品美女在线| 国产丝袜一区二区| 国产专区欧美专区| 色天天综合狠狠色| 国产精品扒开腿做| 在线精品高清中文字幕| 国产日韩欧美视频| 91手机视频在线观看| 欧美综合在线第二页| 亚洲aa在线观看| 色婷婷亚洲mv天堂mv在影片| 在线国产精品播放| 久久精品夜夜夜夜夜久久| 91久久国产婷婷一区二区| 久久久久久av| 97视频在线看| 亚洲91精品在线观看| 91牛牛免费视频| 日韩高清电影免费观看完整| 亚洲欧美制服综合另类| 欧美日本国产在线| 亚洲大胆人体视频| 亚洲第一福利视频| 91色精品视频在线| 欧美日韩国产精品| 丝袜一区二区三区| 色噜噜久久综合伊人一本| 欧美精品日韩www.p站| 国产亚洲视频在线观看| 黑人狂躁日本妞一区二区三区| 国产精品aaaa| 在线观看免费高清视频97| 国产精品网红直播| 国内精品视频在线| 正在播放亚洲1区| 亚洲理论在线a中文字幕| 一区二区三区四区在线观看视频| 一本大道香蕉久在线播放29| 欧美在线视频一二三| 国语自产精品视频在线看一大j8| 91精品久久久久久久久中文字幕| 国产在线高清精品| 亚洲欧美三级在线| 久久久久久久久久久国产| 狠狠色狠狠色综合日日五| 亚洲最新视频在线| 亚洲自拍偷拍色图| 人人澡人人澡人人看欧美| 欧美精品国产精品日韩精品| 亚洲视频电影图片偷拍一区| 成人激情视频小说免费下载| 亚洲精美色品网站| 最近中文字幕mv在线一区二区三区四区| 91九色精品视频| 欧美www在线| 国产精品爽黄69| 亚洲第一天堂无码专区| 日韩av电影在线播放| 欧美大肥婆大肥bbbbb| 欧美性猛交xxxx久久久| 国产原创欧美精品| 亚洲国产成人在线播放| 欧洲美女免费图片一区| 97av在线视频| 亚洲一区二区免费在线| 国产精品视频在线播放| 精品一区二区三区四区| 美女999久久久精品视频| 亚洲图片欧美午夜| 亚洲国产精品va在线看黑人动漫| 成人免费自拍视频| 91亚洲精华国产精华| 久久久久久高潮国产精品视| 91精品久久久久久久久久久久久| 日韩精品视频在线| 亚洲精品suv精品一区二区| 在线成人激情视频| 91沈先生作品| 国产成人avxxxxx在线看| 尤物99国产成人精品视频| 欧美www在线| 亚洲自拍中文字幕| 久久av在线看| 亚洲精品98久久久久久中文字幕| 97超碰国产精品女人人人爽| 91久久久久久久| 亚洲欧美国产高清va在线播| 久久久av免费| 国产精品v日韩精品| 在线观看精品自拍私拍| 国产精品黄色影片导航在线观看| 国产美女91呻吟求| 久久久久久一区二区三区| 久久久国产精品一区| 精品视频久久久久久| 清纯唯美亚洲综合| 亚洲成年网站在线观看| 亚洲欧美综合v| 亚洲欧洲日产国码av系列天堂| 91精品免费久久久久久久久| 国内精品久久久久久久久| 永久免费看mv网站入口亚洲| 国产精品福利久久久| zzijzzij亚洲日本成熟少妇| 国产精品高潮呻吟久久av无限| 国产国语刺激对白av不卡| 午夜精品久久久久久久男人的天堂| 欧美孕妇与黑人孕交| 曰本色欧美视频在线| 91色在线观看| 日本伊人精品一区二区三区介绍| 久久色精品视频| 国内精品久久久久久久久| 久久夜色精品国产| 57pao国产成人免费| 日本不卡高字幕在线2019| 成人精品一区二区三区电影免费| 亚洲综合中文字幕68页| 国产在线视频不卡| 伊人久久久久久久久久久|