JS小游戏-宇宙战机

来源:互联网 发布:青少年安全上网软件 编辑:程序博客网 时间:2024/04/30 07:47
游戏介绍:
业余时间写的一个飞行射击游戏,纵向,共六关。

游戏需求:
1.战机可发射子弹,子弹可通过获取道具升级。
2.战机可放bomb,可获取道具增加数量。
3.战机可蓄力攻击。
4.道具有三种,分别是升级子弹,增加bomb数量,增加战机数量。
5.每关音乐不同。
6.战机被击落后再进入战场,有保护状态。
7.敌机AI设计。


游戏图片:





源文件下载地址: 点击下载


在线游戏地址:开始游戏


JavaScript部分:

[javascript] view plain copy
print?
  1. /** 宇宙战机 
  2. *   Author: fdipzone 
  3. *   Date:   2013-02-12 
  4. *   Ver:    1.0 
  5. */  
  6. window.onload = function(){  
  7.     var gameimg = [  
  8.         'images/fighter.png',   
  9.         'images/fighter_p.png',   
  10.         'images/fighter_s.png',  
  11.         'images/fighter_sp.png',   
  12.         'images/shot.png',   
  13.         'images/destroy.png',   
  14.         'images/destroy_boss.png',  
  15.         'images/enemy.png',   
  16.         'images/bullet.png',   
  17.         'images/gift.png',   
  18.         'images/bomb.png',   
  19.         'images/boss1.png'];  
  20.   
  21.     var callback = function(){  
  22.         var gameplane = $('gameplane');  
  23.         fighter.init();  
  24.         fighter.bgmove(gameplane);  
  25.     }  
  26.     img_preload(gameimg, callback);  
  27. };  
  28.   
  29.   
  30. /** fighter class */  
  31. var fighter = (function(){  
  32.       
  33.     var hiscore = 10000;                    // 最高分  
  34.     var score = 0;                          // 当前分  
  35.     var fighternum = 3;                     // 战机数量  
  36.     var bombnum = 3;                        // 炸弹数量  
  37.     var ft = null;                          // 战机对象  
  38.     var is_start = 0;                       // 是否已开始游戏  
  39.     var is_bombing = 0;                     // 是否爆炸中  
  40.     var is_lock = 1;                        // 是否锁定  
  41.     var is_over = 0;                        // 是否已结束  
  42.     var is_clear = 0;                       // 清屏  
  43.     var is_pile = 0;                        // 是否已达成蓄力  
  44.     var is_protect = 0;                     // 是否保护状态  
  45.     var pilenum = 0;                        // 已蓄力数量  
  46.     var ackey = {};                         // 记录键是否按下  
  47.     var keypriority = {};                   // 冲突键优先级  
  48.     var gamekey = [37,38,39,40,83,65];      // 游戏的按键  
  49.     var scoretag = [0,20,30,40,50,60,500];  // 不同敌机的分数  
  50.     var level = 1;                          // 关数      
  51.     var power = 1;                          // 战机子弹威力  
  52.     var cheatcode = [];                     // 记录cheat输入  
  53.     var failtimes = 0;                      // 挑战失败次数  
  54.       
  55.     // boss 数据  
  56.     var bossdata = [  
  57.                     {'armor':500, 'left':136, 'top':-169, 'step':30},  
  58.                     {'armor':1000, 'left':136, 'top':-169, 'step':30},  
  59.                     {'armor':1500, 'left':136, 'top':-169, 'step':30},  
  60.                     {'armor':2000, 'left':136, 'top':-169, 'step':30},  
  61.                     {'armor':2500, 'left':136, 'top':-169, 'step':30},  
  62.                     {'armor':3000, 'left':136, 'top':-169, 'step':30},  
  63.                    ];  
  64.   
  65.     // 出现的敌机  
  66.     var enemydata = [];  
  67.   
  68.     // 当前出现的boss  
  69.     var curboss = null;  
  70.       
  71.     // 关卡数据  
  72.     var map = [  
  73.         // level 1  
  74.         {  
  75.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  76.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  77.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  78.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  79.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  80.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  81.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  82.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  83.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  84.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  85.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  86.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  87.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  88.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  89.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  90.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  91.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  92.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  93.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  94.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  95.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  96.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  97.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  98.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  99.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  100.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  101.             'ms76000':[]  
  102.         },  
  103.         // level 2  
  104.         {  
  105.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  106.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  107.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  108.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  109.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  110.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  111.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  112.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  113.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  114.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  115.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  116.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  117.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  118.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  119.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  120.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  121.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  122.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  123.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  124.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  125.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  126.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  127.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  128.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  129.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  130.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  131.             'ms76000':[]  
  132.         },  
  133.         // level 3  
  134.         {  
  135.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  136.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  137.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  138.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  139.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  140.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  141.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  142.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  143.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  144.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  145.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  146.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  147.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  148.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  149.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  150.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  151.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  152.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  153.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  154.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  155.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  156.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  157.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  158.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  159.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  160.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  161.             'ms76000':[]  
  162.         },  
  163.         // level 4  
  164.         {  
  165.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  166.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  167.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  168.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  169.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  170.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  171.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  172.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  173.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  174.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  175.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  176.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  177.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  178.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  179.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  180.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  181.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  182.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  183.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  184.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  185.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  186.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  187.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  188.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  189.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  190.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  191.             'ms76000':[]  
  192.         },  
  193.         // level 5  
  194.         {  
  195.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  196.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  197.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  198.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  199.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  200.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  201.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  202.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  203.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  204.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  205.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  206.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  207.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  208.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  209.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  210.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  211.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  212.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  213.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  214.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  215.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  216.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  217.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  218.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  219.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  220.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  221.             'ms76000':[]  
  222.         },  
  223.         // level 6  
  224.         {  
  225.             'ms50':[[3, 680, 1, -50, 10, 10],[3, 680, 1, -50, 290, 10]],   
  226.             'ms2500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  227.             'ms3500':[[1, 10, 12, -23, 190, 10]],  
  228.             'ms5500':[[3, 800, 2, 100, -50, 10]],  
  229.             'ms7500':[[3, 800, 2, 200, 450, -10]],  
  230.             'ms8000':[[1, 10, 11, -23, 100, 10]],  
  231.             'ms9500':[[3, 800, 2, 100, -50, 10]],  
  232.             'ms11500':[[3, 800, 2, 200, 450, -10]],  
  233.             'ms13500':[[3, 800, 2, 100, -50, 10]],  
  234.             'ms15500':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  235.             'ms20000':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  236.             'ms25000':[[1, 10, 4, 150, -50, 10],[1, 10, 4, 250, 400, -10],[1, 10, 4, 100, 400, -10]],  
  237.             'ms30000':[[3, 800, 5, 692, 90, -10],[3, 800, 5, 692, 280, -10]],  
  238.             'ms35000':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  239.             'ms38000':[[1, 10, 11, -23, 10, 10]],  
  240.             'ms40000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  241.             'ms42500':[[3, 680, 1, -50, 70, 10],[3, 680, 1, -50, 220, 10]],  
  242.             'ms45500':[[3, 800, 2, 50, -50, 10]],  
  243.             'ms47500':[[3, 800, 2, 150, 450, -10]],  
  244.             'ms49500':[[3, 800, 2, 50, -50, 10]],  
  245.             'ms51500':[[3, 800, 2, 150, 450, -10]],  
  246.             'ms55500':[[3, 800, 3, -50, 90, 10],[3, 800, 3, -50, 280, 10]],  
  247.             'ms60000':[[3, 800, 3, -50, 30, 10],[3, 800, 3, -50, 340, 10]],  
  248.             'ms65000':[[1, 10, 4, 100, 400, -10],[1, 10, 4, 300, -50, 10]],  
  249.             'ms68000':[[3, 800, 5, 692, 110, -10],[3, 800, 5, 692, 260, -10]],  
  250.             'ms71000':[[1, 10, 13, -23, 220, 10]],  
  251.             'ms76000':[]  
  252.         }  
  253.     ];  
  254.   
  255.   
  256.     // 初始化  
  257.     init = function(){  
  258.         ft = $('fighter');  
  259.         reset();  
  260.         key_event();  
  261.     }  
  262.   
  263.   
  264.     // 开始游戏  
  265.     start = function(){  
  266.         is_clear = 0;  
  267.         is_protect = 0;  
  268.         disp(ft.id, 'show');  
  269.         reset_fighter();  
  270.         reset_pile();  
  271.         process();  
  272.         bgsound(level, true);  
  273.         bgchange(level);  
  274.         fighter_init();  
  275.     }  
  276.   
  277.   
  278.     // 设置事件  
  279.     key_event = function(){  
  280.   
  281.         document.onkeydown = function(e){  
  282.             var e = e || window.event;  
  283.             var curkey = e.keyCode || e.which || e.charCode;  
  284.   
  285.             if(is_start==0){   
  286.                 if(cheatcode.length>12){  
  287.                     cheatcode.shift();  
  288.                 }  
  289.                 cheatcode.push(curkey); // 记录用户输入的cheatcode  
  290.             }  
  291.               
  292.             if(is_start==1 && in_array(curkey,gamekey)){  
  293.                 if(ackey[curkey.toString()]==0 || typeof(ackey[curkey.toString()])=='undefined' || !in_array(curkey,[83,65])){    // 射击与炸弹连按屏蔽  
  294.                     ackey[curkey.toString()] = 1;    // save key down  
  295.                     switch(curkey){  
  296.                         case 37:  
  297.                         case 39:  
  298.                             keypriority.left = curkey;    // left right  
  299.                             break;  
  300.                         case 38:  
  301.                         case 40:  
  302.                             keypriority.top = curkey;    // up down  
  303.                             break;  
  304.                     }  
  305.                 }else{  
  306.                     return false;  
  307.                 }  
  308.             }  
  309.               
  310.             if(curkey==13 || is_start==1 && is_lock==0){    // game is start or key=13  
  311.                 switch(curkey){  
  312.                     case 13: // enter  
  313.                         if(is_start==0){  
  314.                             is_start=1;  
  315.                             disp('op''hide');  
  316.                             msg_show();  
  317.                             setTimeout(function(){  
  318.                                 msg_hide();  
  319.                                 cheat();  
  320.                                 start();  
  321.                             }, 1500);  
  322.                         }  
  323.                         break;  
  324.   
  325.                     case 83: // 射击  
  326.                         shot();  
  327.                         break;  
  328.   
  329.                     case 65: // 炸弹  
  330.                         bomb();  
  331.                         break;  
  332.                 }  
  333.             }  
  334.         }  
  335.   
  336.         document.onkeyup = function(e){  
  337.             var e = e || window.event;  
  338.             var curkey = e.keyCode || e.which || e.charCode;  
  339.             if(is_start==1 && in_array(curkey,gamekey)){  
  340.                 ackey[curkey.toString()] = 0;    // release key down  
  341.                   
  342.                 if(curkey==83){// 释放蓄力攻击  
  343.                     if(is_pile==1){  
  344.                         pile_shot();  
  345.                     }  
  346.                     reset_pile();  
  347.                 }  
  348.             }  
  349.         }  
  350.   
  351.     }  
  352.   
  353.   
  354.     // 循环执行的动作  
  355.     action = function(){  
  356.         var movestep = 5;    // 移动步长  
  357.         var et = setInterval(function(){  
  358.             if(is_start==0 || is_lock==1){  
  359.                 clearInterval(et);  
  360.             }  
  361.               
  362.             // 移动  
  363.             if(ackey['37']==1 && (ackey['39']==0 || keypriority.left==37)){    // 冲突时判断优先级  
  364.                 if(getPosition(ft,'left')<movestep){  
  365.                     setPosition(ft, 'left', 0);    // left  
  366.                 }else{  
  367.                     setPosition(ft, 'left', getPosition(ft,'left') - movestep);  
  368.                 }  
  369.             }  
  370.             if(ackey['38']==1 && (ackey['40']==0 || keypriority.top==38)){  
  371.                 if(getPosition(ft, 'top')<movestep){  
  372.                     setPosition(ft, 'top', 0);    // top  
  373.                 }else{  
  374.                     setPosition(ft, 'top', getPosition(ft,'top') - movestep);  
  375.                 }  
  376.             }  
  377.             if(ackey['39']==1 && (ackey['37']==0 || keypriority.left==39)){  
  378.                 if(400-(getPosition(ft,'left')+50)<movestep){  
  379.                     setPosition(ft, 'left', 350);    //width-fighter.width  
  380.                 }else{  
  381.                     setPosition(ft, 'left', getPosition(ft,'left') + movestep);  
  382.                 }  
  383.             }  
  384.             if(ackey['40']==1 && (ackey['38']==0 || keypriority.top==40)){  
  385.                 if(640-(getPosition(ft,'top')+50)<movestep){  
  386.                     setPosition(ft, 'top', 590);    // height-fighter.height  
  387.                 }else{  
  388.                     setPosition(ft, 'top', getPosition(ft,'top') + movestep);  
  389.                 }  
  390.             }  
  391.   
  392.             // 蓄力攻击  
  393.             if(ackey['83']==1){  
  394.                 if(pilenum<1000){  
  395.                     pilenum = pilenum + 20;  
  396.                 }else if(is_pile==0){  
  397.                     is_pile = 1;  
  398.                     if(is_protect==1){  
  399.                         setClass(ft, 'fighter_sp');  
  400.                     }else{  
  401.                         setClass(ft, 'fighter_s');  
  402.                     }  
  403.                 }  
  404.             }  
  405.   
  406.         }, 20);  
  407.     }  
  408.   
  409.   
  410.     // 战机射击  
  411.     shot = function(){  
  412.         // 创建子弹  
  413.         var bullet = document.createElement('div');  
  414.         var offsetx;  
  415.   
  416.         switch(power){  
  417.             case 1:  
  418.                 offsetx = 20;  
  419.                 break;  
  420.             case 2:  
  421.                 offsetx = 15;  
  422.                 break;  
  423.             case 3:  
  424.                 offsetx = 10;  
  425.                 break;  
  426.             case 4:  
  427.                 offsetx = 4;  
  428.                 break;  
  429.         }  
  430.   
  431.         setClass(bullet, 'shot' + power);  
  432.   
  433.         // 设置子弹初始位置  
  434.         setPosition(bullet, 'top', getPosition(ft, 'top')-30);  
  435.         setPosition(bullet, 'left', getPosition(ft, 'left') + offsetx);  
  436.           
  437.         ft.parentNode.appendChild(bullet);  
  438.           
  439.         // 设置子弹运动  
  440.         var et = setInterval(function(){  
  441.             if(getPosition(bullet,'top')<=-30 || is_lock==1){  
  442.                 clearInterval(et);  
  443.                 ft.parentNode.removeChild(bullet);    // 释放子弹  
  444.             }  
  445.   
  446.             for(var i=0; i<enemydata.length; i++){  
  447.                 if(enemydata[i]!=null){  
  448.                     if(impact(bullet, enemydata[i])){    // 打中敌机  
  449.                         destroy(enemydata[i]);  
  450.                         scoreup(enemydata[i].type);  
  451.                         enemydata[i] = null;  
  452.                         clearInterval(et);  
  453.                         ft.parentNode.removeChild(bullet);  
  454.                     }  
  455.                 }  
  456.             }  
  457.   
  458.             if(curboss!=null){    // boss 战  
  459.                 if(impact(bullet, curboss['obj'])){ // 打中boss  
  460.                     curboss['armor']=parseInt(curboss['armor'])-power*10;  
  461.                     clearInterval(et);  
  462.                     ft.parentNode.removeChild(bullet);  
  463.                 }  
  464.             }  
  465.   
  466.             setPosition(bullet, 'top', getPosition(bullet, 'top')-15);  
  467.   
  468.         }, 30)  
  469.     }  
  470.   
  471.   
  472.     // 蓄力射击  
  473.     pile_shot = function(){  
  474.         var pilebullet = document.createElement('div');  
  475.         setClass(pilebullet, 'pileshot');  
  476.   
  477.         // 设置子弹初始位置  
  478.         setPosition(pilebullet, 'top', getPosition(ft, 'top')-30);  
  479.         setPosition(pilebullet, 'left', getPosition(ft, 'left'));  
  480.           
  481.         ft.parentNode.appendChild(pilebullet);  
  482.   
  483.         var et = setInterval(function(){  
  484.             if(getPosition(pilebullet,'top')<=-85 || is_lock==1){  
  485.                 clearInterval(et);  
  486.                 ft.parentNode.removeChild(pilebullet); // 释放子弹  
  487.             }  
  488.   
  489.             for(var i=0; i<enemydata.length; i++){  
  490.                 if(enemydata[i]!=null){  
  491.                     if(impact(pilebullet, enemydata[i])){    // 打中敌机  
  492.                         destroy(enemydata[i]);  
  493.                         scoreup(enemydata[i].type);  
  494.                         enemydata[i] = null;  
  495.                     }  
  496.                 }  
  497.             }  
  498.   
  499.             if(curboss!=null){    // boss 战  
  500.                 if(impact(pilebullet, curboss['obj'])){ // 打中boss  
  501.                     curboss['armor']=parseInt(curboss['armor'])-100;  
  502.                     clearInterval(et);  
  503.                     ft.parentNode.removeChild(pilebullet); // 释放子弹  
  504.                 }  
  505.             }  
  506.   
  507.             setPosition(pilebullet, 'top', getPosition(pilebullet, 'top')-20);  
  508.   
  509.         }, 30)  
  510.     }  
  511.   
  512.   
  513.     // 放炸弹  
  514.     bomb = function(){  
  515.         if(is_bombing==0 && bombnum>0){    // 不是爆炸中且有炸弹数  
  516.             is_bombing = 1;  
  517.             bombnum --;  
  518.             setHtml('bombnum', bombnum);    // 自减1  
  519.   
  520.             var opacity = 100;  
  521.             setOpacity($('bomb'), opacity);  
  522.             disp('bomb''show');  
  523.   
  524.             // 清除所有敌机及敌方子弹  
  525.             is_clear = 1;  
  526.   
  527.             // 打击boss  
  528.             if(curboss!=null){  
  529.                 curboss['armor'] = parseInt(curboss['armor'])-300;  
  530.             }  
  531.   
  532.             var step = 0;  
  533.             var et = setInterval(function(){    // 炸弹效果  
  534.                 if(step<11){  
  535.                     setBgPosition($('bomb'), 0, step*(-280));  
  536.                 }else{  
  537.                     clearInterval(et);  
  538.                     disp('bomb''hide');  
  539.                     is_bombing = 0;  
  540.                     is_clear = 0;  
  541.                 }  
  542.                 step ++;  
  543.             }, 70);  
  544.         }  
  545.     }  
  546.   
  547.   
  548.     // 游戏进程  
  549.     process = function(){  
  550.         var leveldata = map[level-1], processed = 0, step = 10;  
  551.         var levelstep = 0;    // 每关开始清0  
  552.         var et = setInterval(function(){  
  553.             if(is_lock==0){  
  554.                 processed += step;  
  555.                 if(attrcount(leveldata)>levelstep){    // 未完成本关  
  556.                     if(leveldata['ms'+processed]){  
  557.                         for(var i=0; i<leveldata['ms'+processed].length; i++){  
  558.                             var msdata = leveldata['ms'+processed][i];  
  559.                             create(msdata);  
  560.                         }  
  561.                         levelstep ++;    // 进度  
  562.                     }  
  563.                 }else{    // 已完成本关,进入Boss战  
  564.                     bosswar();  
  565.                     clearInterval(et);  
  566.                 }  
  567.             }  
  568.   
  569.             if(is_over==1){  
  570.                 clearInterval(et);  
  571.             }  
  572.   
  573.         }, step);  
  574.     }  
  575.   
  576.   
  577.     /* 创建关卡元素 
  578.     /* msdata:{ 
  579.        num:出现的数量 
  580.        interval:间隔 
  581.        type:类型 
  582.        top:原始top坐标 
  583.        left:原始left坐标 
  584.        step:移动距离 
  585.        } 
  586.     */  
  587.     create = function(msdata){  
  588.         var num = msdata[0],  
  589.             interval = msdata[1],  
  590.             type = msdata[2],  
  591.             top = msdata[3],  
  592.             left = msdata[4],  
  593.             step = msdata[5];  
  594.   
  595.         var et = setInterval(function(){  
  596.                 if(num>0){  
  597.                     var enft = document.createElement('div');  
  598.                     setClass(enft, 'element' + type);  
  599.                     enft.type = type;  
  600.                     setPosition(enft, 'top', top);  
  601.                     setPosition(enft, 'left', left);  
  602.                     ft.parentNode.appendChild(enft);  
  603.                     if(type<=10){  
  604.                         enemydata.push(enft);  
  605.                     }  
  606.                     route(enft, type, step);  
  607.                     num--;  
  608.                 }else{  
  609.                     clearInterval(et);  
  610.                 }  
  611.             }, interval);  
  612.     }  
  613.   
  614.   
  615.     // 元素运动轨迹  
  616.     route = function(enft, type, step){  
  617.         var et = null;  
  618.         switch(type){  
  619.             case 1: // 曲线  
  620.                 var count = 0;  
  621.                 et = setInterval(function(){  
  622.                     if(node_exist(enft)){  
  623.                         setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step));  
  624.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  625.                         count<5? count++ : (count=0, step*=-1);  
  626.                         if(getPosition(enft, 'top')>640 || is_over==1 || is_clear==1){  
  627.                             clearInterval(et);  
  628.                             ft.parentNode.removeChild(enft);  
  629.                         }  
  630.                         impact_handle(enft, et);  
  631.                     }else{  
  632.                         clearInterval(et);  
  633.                     }  
  634.                 }, 80);  
  635.                 break;  
  636.   
  637.             case 2: // 横向  
  638.                 var count = 0;  
  639.                 et = setInterval(function(){  
  640.                     if(node_exist(enft)){  
  641.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  642.                         count<9? count++ : (count=0, attack(enft,1,17,47));  
  643.                         if(getPosition(enft,'left')>400 && step>0 || getPosition(enft,'left')<-50 && step<0 || is_over==1 || is_clear==1){  
  644.                             clearInterval(et);  
  645.                             ft.parentNode.removeChild(enft);  
  646.                         }  
  647.                         impact_handle(enft, et);  
  648.                     }else{  
  649.                         clearInterval(et);  
  650.                     }  
  651.                 }, 80);  
  652.                 break;  
  653.   
  654.             case 3: // 竖向  
  655.                 var count = 0;  
  656.                 et = setInterval(function(){  
  657.                     if(node_exist(enft)){  
  658.                         setPosition(enft, 'top', getPosition(enft,'top')+step);  
  659.                         count<9? count++ : (count=0, attack(enft,1,17,47));  
  660.                         if(getPosition(enft,'top')>640 || is_over==1 || is_clear==1){  
  661.                             clearInterval(et);  
  662.                             ft.parentNode.removeChild(enft);  
  663.                         }  
  664.                         impact_handle(enft, et);  
  665.                     }else{  
  666.                         clearInterval(et);  
  667.                     }  
  668.                 }, 75);  
  669.                 break;  
  670.   
  671.             case 4: // 左右循环移动攻击  
  672.                 var count = 0;  
  673.                 et = setInterval(function(){  
  674.                     if(node_exist(enft)){  
  675.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  676.                         count<10? count++ : (count=0, attack(enft,4,17,31));  
  677.                           
  678.                         if(getPosition(enft,'left')>=350 && step>0 || getPosition(enft,'left')<=0 && step<0){  
  679.                             step*=-1;  
  680.                         }  
  681.   
  682.                         if(is_over==1 || is_clear==1){  
  683.                             clearInterval(et);  
  684.                             ft.parentNode.removeChild(enft);  
  685.                         }  
  686.                         impact_handle(enft, et);  
  687.                     }else{  
  688.                         clearInterval(et);  
  689.                     }  
  690.                 }, 80);  
  691.                 break;  
  692.   
  693.             case 5: // 从后面攻击  
  694.                 var count = 0;  
  695.                 et = setInterval(function(){  
  696.                     if(node_exist(enft)){  
  697.                         setPosition(enft, 'top', getPosition(enft,'top')+step);  
  698.                         count<9? count++ : (count=0, attack(enft,1,17,-17));  
  699.                         if(getPosition(enft,'top')<-32 || is_over==1 || is_clear==1){  
  700.                             clearInterval(et);  
  701.                             ft.parentNode.removeChild(enft);  
  702.                         }  
  703.                         impact_handle(enft, et);  
  704.                     }else{  
  705.                         clearInterval(et);  
  706.                     }  
  707.                 }, 75);  
  708.                 break;  
  709.   
  710.             case 11: // power gift  
  711.                 var count = 0;  
  712.                 et = setInterval(function(){  
  713.                     if(node_exist(enft)){  
  714.                         setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step));  
  715.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  716.                         count<5? count++ : (count=0, step*=-1);  
  717.                         if(getPosition(enft, 'top')>640 || is_over==1){  
  718.                             clearInterval(et);  
  719.                             ft.parentNode.removeChild(enft);  
  720.                         }  
  721.                         if(impact(enft, ft) && is_lock==0){    // 奖励与战机相撞  
  722.                             powerup();  
  723.                             ft.parentNode.removeChild(enft);  
  724.                             clearInterval(et);  
  725.                         }  
  726.                     }else{  
  727.                         clearInterval(et);  
  728.                     }  
  729.                 }, 80);  
  730.                 break;  
  731.   
  732.             case 12: // bomb gift  
  733.                 var count = 0;  
  734.                 et = setInterval(function(){  
  735.                     if(node_exist(enft)){  
  736.                         setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step));  
  737.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  738.                         count<5? count++ : (count=0, step*=-1);  
  739.                         if(getPosition(enft, 'top')>640 || is_over==1){  
  740.                             clearInterval(et);  
  741.                             ft.parentNode.removeChild(enft);  
  742.                         }  
  743.                         if(impact(enft, ft) && is_lock==0){    // 奖励与战机相撞  
  744.                             bombup();  
  745.                             ft.parentNode.removeChild(enft);  
  746.                             clearInterval(et);  
  747.                         }  
  748.                     }else{  
  749.                         clearInterval(et);  
  750.                     }  
  751.                 }, 80);  
  752.                 break;  
  753.   
  754.             case 13: // fighter gift  
  755.                 var count = 0;  
  756.                 et = setInterval(function(){  
  757.                     if(node_exist(enft)){  
  758.                         setPosition(enft, 'top', getPosition(enft,'top')+Math.abs(step));  
  759.                         setPosition(enft, 'left', getPosition(enft,'left')+step);  
  760.                         count<5? count++ : (count=0, step*=-1);  
  761.                         if(getPosition(enft, 'top')>640 || is_over==1){  
  762.                             clearInterval(et);  
  763.                             ft.parentNode.removeChild(enft);  
  764.                         }  
  765.                         if(impact(enft, ft) && is_lock==0){    // 奖励与战机相撞  
  766.                             fighterup();  
  767.                             ft.parentNode.removeChild(enft);  
  768.                             clearInterval(et);  
  769.                         }  
  770.                     }else{  
  771.                         clearInterval(et);  
  772.                     }  
  773.                 }, 80);  
  774.                 break;  
  775.         }  
  776.     }  
  777.   
  778.   
  779.     // 销毁  
  780.     destroy = function(dobj){    // dobj:被销毁的对象  
  781.         var dest = document.createElement('div');  
  782.         setClass(dest, 'destroy');  
  783.         setPosition(dest, 'top', getPosition(dobj, 'top'));  
  784.         setPosition(dest, 'left', getPosition(dobj, 'left'));  
  785.         ft.parentNode.appendChild(dest);  
  786.   
  787.         if(dobj.id=='fighter'){    // 战机被击中  
  788.             disp(dobj.id, 'hide');  
  789.             power = 1;  
  790.             bombnum = 3;  
  791.             fighternum--;  
  792.             setHtml('fighternum', fighternum);  
  793.             setHtml('bombnum', bombnum);  
  794.             is_lock = 1;  
  795.         }else{  
  796.             dobj.parentNode.removeChild(dobj);  
  797.         }  
  798.           
  799.         var step = 0;  
  800.         var et = setInterval(function(){  
  801.             if(step<11){  
  802.                 setBgPosition(dest, step*(-48), 0);  
  803.                 step++;  
  804.             }else{  
  805.                 if(dobj.id=='fighter'){  
  806.                     setTimeout(function(){  
  807.                         if(fighternum>0){  
  808.                             levelcontinue();  
  809.                         }else{  
  810.                             if(curboss!=null){  
  811.                                 obj = curboss['obj'];  
  812.                                 obj.parentNode.removeChild(obj);  
  813.                             }  
  814.                             gameover();    //战机全部被击中,游戏结束  
  815.                         }  
  816.                     },1000);  
  817.                 }  
  818.                 dest.parentNode.removeChild(dest);  
  819.                 clearInterval(et);  
  820.             }  
  821.         }, 50);  
  822.     }  
  823.   
  824.   
  825.     // boss war  
  826.     bosswar = function(){  
  827.         var boss = bossdata[level-1];  
  828.         var bossft = document.createElement('div');  
  829.         setClass(bossft, 'boss' + level);  
  830.         setPosition(bossft, 'left', boss['left']);  
  831.         setPosition(bossft, 'top', boss['top']);  
  832.         ft.parentNode.appendChild(bossft);  
  833.           
  834.         curboss = {"armor":boss['armor'],"obj":bossft};  
  835.   
  836.         switch(level){  
  837.             case 1: // boss 1  
  838.             case 2: // boss 2  
  839.             case 3: // boss 3  
  840.             case 4: // boss 4  
  841.             case 5: // boss 5  
  842.             case 6: // boss 6  
  843.                 var step = -3;  
  844.                 var count = 0;  
  845.                 var et = setInterval(function(){  
  846.                     if(getPosition(bossft,'top')<50){    // boss 进场  
  847.                         setPosition(bossft, 'top', getPosition(bossft, 'top')+5);  
  848.                     }else{  
  849.   
  850.                         if(curboss['armor']<=0){    // boss over  
  851.                             clearInterval(et);  
  852.                             bossover();  
  853.                         }else{  
  854.   
  855.                             if(step<0){ // 左移动  
  856.                                 if(getPosition(bossft,'left')>10){  
  857.                                     setPosition(bossft, 'left', getPosition(bossft, 'left')+step);  
  858.                                 }else{  
  859.                                     step*=-1;  
  860.                                 }  
  861.                             }  
  862.   
  863.                             if(step>0){ // 右移动  
  864.                                 if(getPosition(bossft,'left')<260){  
  865.                                     setPosition(bossft, 'left', getPosition(bossft, 'left')+step);  
  866.                                 }else{  
  867.                                     step*=-1;  
  868.                                 }  
  869.                             }  
  870.   
  871.                             if(count>=35 && count%35==0){  
  872.                                  attack(bossft, 1, 30, 30);  
  873.                                  attack(bossft, 1, 80, 30);  
  874.                             }  
  875.                               
  876.                             if(count>=60 && count%60==0){  
  877.                                 attack(bossft, 2, 15, 75);  
  878.                                 attack(bossft, 2, 105, 75);  
  879.                             }  
  880.   
  881.                             if(count>=100 && count%100==0){  
  882.                                 attack(bossft, 3, 60, 92);  
  883.                             }  
  884.   
  885.                             count<8400? count++ : count=0;  
  886.   
  887.                         }  
  888.                     }  
  889.                 }, boss['step']);  
  890.                 break;  
  891.         }  
  892.     }  
  893.   
  894.   
  895.     /* attack 
  896.     * obj  敌机 
  897.     * type 攻击类型 
  898.     * left 子弹初始left 
  899.     * top  子弹初始top 
  900.     */  
  901.     attack = function(obj, type, left, top){  
  902.         if(is_lock==1){  
  903.             return false;    // 如已锁定不射击  
  904.         }  
  905.   
  906.         var oleft = getPosition(obj, 'left')+left;  
  907.         var otop = getPosition(obj, 'top')+top;  
  908.   
  909.         switch(type){  
  910.   
  911.             case 1: //向战机攻击  
  912.   
  913.                 // 子弹初始位置与战机位置  
  914.                 var opoint = {x:oleft+7, y:otop+7};  
  915.                 var dpoint = {x:getPosition(ft,'left')+25, y:getPosition(ft,'top')+25};  
  916.                 var p = vector(opoint, dpoint, 8);  
  917.   
  918.                 enftbullet('bullet', oleft, otop, p[0], p[1], 35);  
  919.                 break;  
  920.   
  921.             case 2: //直线攻击  
  922.                 var num = 3;  
  923.                 var st = setInterval(function(){  
  924.                     if(num>0){  
  925.                         enftbullet('bullet', oleft, otop, 0, 8, 35);  
  926.                         num --;  
  927.   
  928.                     }else{  
  929.                         clearInterval(st);  
  930.                     }  
  931.                 }, 150);  
  932.                 break;  
  933.   
  934.             case 3: // 散开攻击  
  935.                 var num = 3;  
  936.                 var st = setInterval(function(){  
  937.                     if(num>0){  
  938.                         switch(num){  
  939.                             case 1:  
  940.                                 enftbullet('sbullet', oleft, otop, 0, 8, 35);  
  941.                                 break;  
  942.   
  943.                             case 2:  
  944.                                 enftbullet('sbullet', oleft, otop, 3, 8, 35);  
  945.                                 break;  
  946.   
  947.                             case 3:  
  948.                                 enftbullet('sbullet', oleft, otop, -3, 8, 35);  
  949.                                 break;  
  950.                         }  
  951.   
  952.                         num --;  
  953.   
  954.                     }else{  
  955.                         clearInterval(st);  
  956.                     }  
  957.                 }, 0);  
  958.                 break;  
  959.   
  960.             case 4: // 小散开攻击  
  961.                 var num = 3;  
  962.                 var st = setInterval(function(){  
  963.                     if(num>0){  
  964.                         switch(num){  
  965.                             case 1:  
  966.                                 enftbullet('bullet', oleft, otop, 0, 8, 35);  
  967.                                 break;  
  968.   
  969.                             case 2:  
  970.                                 enftbullet('bullet', oleft, otop, 3, 8, 35);  
  971.                                 break;  
  972.   
  973.                             case 3:  
  974.                                 enftbullet('bullet', oleft, otop, -3, 8, 35);  
  975.                                 break;  
  976.                         }  
  977.   
  978.                         num --;  
  979.   
  980.                     }else{  
  981.                         clearInterval(st);  
  982.                     }  
  983.                 }, 0);  
  984.                 break;  
  985.         }  
  986.     }  
  987.   
  988.   
  989.     /* enft bullet 
  990.     * type 子弹类型 
  991.     * oleft,otop 子弹初始位置 
  992.     * left,top 子弹徧移 
  993.     * speed 速度 
  994.     */  
  995.     enftbullet = function(type, oleft, otop, left, top, speed){  
  996.         var bullet = document.createElement('div');  
  997.         setClass(bullet, type);  
  998.         setPosition(bullet, 'left', oleft);  
  999.         setPosition(bullet, 'top', otop);  
  1000.         ft.parentNode.appendChild(bullet);  
  1001.   
  1002.         var et = setInterval(function(){  
  1003.             setPosition(bullet, 'top', getPosition(bullet,'top')+top);  
  1004.             setPosition(bullet, 'left', getPosition(bullet,'left')+left);  
  1005.   
  1006.             if(getPosition(bullet,'left')>400 || getPosition(bullet,'left')<-30 || getPosition(bullet,'top')<-30 || getPosition(bullet,'top')>640 || is_lock==1 || is_clear==1){  
  1007.                 clearInterval(et);  
  1008.                 ft.parentNode.removeChild(bullet);  
  1009.             }  
  1010.   
  1011.             impact_handle(bullet, et);  
  1012.         }, speed);  
  1013.     }  
  1014.   
  1015.   
  1016.     // boss over  
  1017.     bossover = function(){  
  1018.         obj = curboss['obj'];  
  1019.         obj.parentNode.removeChild(obj);  
  1020.   
  1021.         scoreup(6); // boss score  
  1022.   
  1023.         var dest = document.createElement('div');  
  1024.         setClass(dest, 'destroyboss');  
  1025.         setPosition(dest, 'top', getPosition(obj, 'top'));  
  1026.         setPosition(dest, 'left', getPosition(obj, 'left'));  
  1027.         ft.parentNode.appendChild(dest);  
  1028.   
  1029.         var step = 0;  
  1030.         var et = setInterval(function(){  
  1031.             if(step<21){  
  1032.                 setBgPosition(dest, step*(-150), 0);  
  1033.             }else if(step==21){  
  1034.                 dest.parentNode.removeChild(dest);  
  1035.             }else if(step==50){  
  1036.                 clearInterval(et);  
  1037.                 levelup();  
  1038.             }  
  1039.             step++;  
  1040.         }, 50);  
  1041.     }  
  1042.   
  1043.   
  1044.     // continue  
  1045.     levelcontinue = function(){  
  1046.         reset_fighter();  
  1047.         disp(ft.id, 'show');  
  1048.         setProtect();  
  1049.         fighter_init();  
  1050.     }  
  1051.   
  1052.   
  1053.     // 过关  
  1054.     levelup = function(){  
  1055.         keypriority = {};  
  1056.         enemydata = [];  
  1057.         curboss = null;  
  1058.         level ++;  
  1059.   
  1060.         bgsound('pass'false);  
  1061.   
  1062.         var processed = 0;  
  1063.         var et = setInterval(function(){  
  1064.             is_lock = 1;  
  1065.             processed = processed + 15;  
  1066.               
  1067.             if(getPosition(ft, 'top')>-50){  
  1068.                 setPosition(ft, 'top', getPosition(ft, 'top')-15);  
  1069.             }  
  1070.               
  1071.             if(processed>=2500){  
  1072.                 clearInterval(et);  
  1073.                 disp(ft.id, 'hide');  
  1074.                   
  1075.                 if(level<=map.length){  
  1076.                     bgchange(0);  
  1077.                     msg_show();  
  1078.                     setTimeout(function(){  
  1079.                         msg_hide();  
  1080.                         start();  
  1081.                     }, 1500);  
  1082.                 }else{  
  1083.                     gameclear();    // 通关  
  1084.                 }  
  1085.             }  
  1086.         }, 25);  
  1087.     }  
  1088.   
  1089.   
  1090.     // 更新分数  
  1091.     scoreup = function(type){  
  1092.         if(typeof(scoretag[type])!='undefined'){  
  1093.             score = score + scoretag[type] * level;  
  1094.             setHtml('score', score);  
  1095.             if(score > hiscore){  
  1096.                 hiscore = score;  
  1097.                 setHtml('hiscore', hiscore);  
  1098.             }  
  1099.         }  
  1100.     }  
  1101.   
  1102.   
  1103.     // 子弹升级  
  1104.     powerup = function(){  
  1105.         power = power+1>4? 4 : power+1;  
  1106.     }      
  1107.   
  1108.   
  1109.     // 炸弹增加  
  1110.     bombup = function(){  
  1111.         bombnum ++;  
  1112.         setHtml('bombnum', bombnum);  
  1113.     }  
  1114.   
  1115.   
  1116.     // 战机增加  
  1117.     fighterup = function(){  
  1118.         fighternum ++;  
  1119.         setHtml('fighternum', fighternum);  
  1120.     }  
  1121.   
  1122.   
  1123.     // 保护状态  
  1124.     setProtect = function(){  
  1125.         is_protect = 1;  
  1126.         if(is_pile==1){  
  1127.             setClass(ft, 'fighter_sp');  
  1128.         }else{  
  1129.             setClass(ft, 'fighter_p');  
  1130.         }  
  1131.         setTimeout(function(){  
  1132.             is_protect = 0;  
  1133.             if(is_pile==1){  
  1134.                 setClass(ft, 'fighter_s');  
  1135.             }else{  
  1136.                 setClass(ft, 'fighter');  
  1137.             }  
  1138.         }, 3000)  
  1139.     }  
  1140.   
  1141.   
  1142.     // 碰撞处理  
  1143.     impact_handle = function(obj, et){    // et 定时器  
  1144.         if(impact(obj, ft) && is_lock==0){    // 产生碰撞  
  1145.             if(is_protect==0){  
  1146.                 destroy(ft);  
  1147.                 clearInterval(et);  
  1148.                 ft.parentNode.removeChild(obj);  
  1149.             }  
  1150.         }  
  1151.     }  
  1152.   
  1153.   
  1154.     // 全部通关  
  1155.     gameclear = function(){  
  1156.         is_over = 1;  
  1157.         disp('gameclear''show');  
  1158.         setHtml('clearcon''Game Clear' + '<br>' + 'SCORE : ' + score);  
  1159.         bgsound('clear'false);  
  1160.         bgchange('clear');  
  1161.         setTimeout(function(){  
  1162.             bgsound();  
  1163.             init();  
  1164.         }, 16000);  
  1165.     }  
  1166.   
  1167.   
  1168.     // 游戏结束  
  1169.     gameover = function(){  
  1170.         is_over = 1;  
  1171.         disp('gameover''show');  
  1172.         setHtml('overcon''LEVEL : ' + level + '<br>' + 'SCORE : ' + score);  
  1173.         bgsound('over'false);  
  1174.         bgchange('over');  
  1175.         failtimes++;  
  1176.         setTimeout(function(){  
  1177.             if(failtimes==3){  
  1178.                 alert('在游戏开始画面依次输入 ↑ ↑ ↓ ↓ ← → ← → a s a s,再开始游戏,会有惊喜^_^');  
  1179.             }  
  1180.             bgsound();  
  1181.             init();  
  1182.         }, 8000);  
  1183.     }  
  1184.   
  1185.   
  1186.     // 显示讯息  
  1187.     msg_show = function(){  
  1188.         setHtml('level''LEVEL - ' + level);  
  1189.         disp('level''show');  
  1190.         is_lock = 1;  
  1191.     }  
  1192.   
  1193.   
  1194.     // 隐藏讯息  
  1195.     msg_hide = function(){  
  1196.         disp('level''hide');  
  1197.     }  
  1198.   
  1199.   
  1200.     // 重置  
  1201.     reset = function(){  
  1202.         is_start = 0;  
  1203.         is_bombing = 0;  
  1204.         is_lock = 1;  
  1205.         is_over = 0;  
  1206.         is_clear = 0;  
  1207.         is_protect = 0;  
  1208.         level = 1;  
  1209.         power = 1;  
  1210.         ackey = {};  
  1211.         keypriority = {};  
  1212.         enemydata = [];  
  1213.         score = 0;  
  1214.         fighternum = 3;  
  1215.         bombnum = 3;  
  1216.   
  1217.         setHtml('hiscore', hiscore);  
  1218.         setHtml('score', score);  
  1219.         setHtml('fighternum', fighternum);  
  1220.         setHtml('bombnum', bombnum);  
  1221.   
  1222.         reset_fighter();  
  1223.         reset_pile();  
  1224.   
  1225.         disp('op''show');  
  1226.         disp('gameover''hide');  
  1227.         disp('gameclear''hide');  
  1228.   
  1229.         bgchange(0);  
  1230.     }  
  1231.   
  1232.   
  1233.     // 重置战机位置  
  1234.     reset_fighter = function(){  
  1235.         setPosition(ft, 'top', 640);  
  1236.         setPosition(ft, 'left', 175);  
  1237.         setClass(ft, 'fighter');  
  1238.     }  
  1239.   
  1240.   
  1241.     // 重置蓄力  
  1242.     reset_pile = function(){  
  1243.         is_pile = 0;  
  1244.         pilenum = 0;  
  1245.         if(is_protect==1){  
  1246.             setClass(ft, 'fighter_p');  
  1247.         }else{  
  1248.             setClass(ft, 'fighter');  
  1249.         }  
  1250.     }  
  1251.   
  1252.   
  1253.     // 战机初始化  
  1254.     fighter_init = function(){  
  1255.         var et = setInterval(function(){  
  1256.             if(getPosition(ft, 'top')>400){  
  1257.                 setPosition(ft, 'top', getPosition(ft, 'top')-12);  
  1258.             }else{  
  1259.                 clearInterval(et);  
  1260.                 is_lock = 0;  
  1261.                 action();  
  1262.             }  
  1263.         }, 30);  
  1264.     }  
  1265.   
  1266.   
  1267.     // 密技30命  
  1268.     cheat = function(){  
  1269.         if(cheatcode.join(',')=='38,38,40,40,37,39,37,39,65,83,65,83,13'){  
  1270.             fighternum = 30;  
  1271.             setHtml('fighternum', fighternum);  
  1272.         }  
  1273.         cheatcode = [];  
  1274.     }  
  1275.   
  1276.   
  1277.     // 背景控制  
  1278.     bgmove = function(obj){  
  1279.         var step = 1;  
  1280.         var et = setInterval(function(){  
  1281.             var bgpos = getBgPosition(obj);  
  1282.             if(bgpos['top']==640){  
  1283.                 setBgPosition(obj, 0, 0);    // reset  
  1284.             }else{  
  1285.                 setBgPosition(obj, bgpos['left'], bgpos['top']+step);  
  1286.             }  
  1287.         }, 50);  
  1288.     }  
  1289.   
  1290.   
  1291.     // 背景切换  
  1292.     bgchange = function(file){  
  1293.         var obj = $('gameplane');  
  1294.         setClass(obj, 'gameplane bg'+file);  
  1295.     }  
  1296.   
  1297.   
  1298.     // 音乐控制  
  1299.     bgsound = function(file, loop){  
  1300.         var id = 'audioplayer';  
  1301.           
  1302.         if(typeof(file)!='undefined'){  
  1303.             if(typeof(loop)=='undefined'){  
  1304.                 loop = false;  
  1305.             }  
  1306.   
  1307.             var audiofile = [];  
  1308.             audiofile['mp3'] = 'music/' + file + '.mp3';  
  1309.             audiofile['ogg'] = 'music/' + file + '.ogg';  
  1310.             audioplayer(id, audiofile , loop);  
  1311.         }else{  
  1312.             audioplayer(id);  
  1313.         }  
  1314.     }  
  1315.   
  1316.     return this;  
  1317.   
  1318. })();  


原创粉丝点击