亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS小游戲之宇宙戰機源碼詳解

2019-11-20 14:06:25
字體:
來源:轉載
供稿:網友

本文實例講述了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页| 国产在线视频不卡| 伊人久久久久久久久久久|