JS小游戏-宇宙战机

news/2025/2/21 7:27:57/
游戏介绍:
业余时间写的一个飞行射击游戏,纵向,共六关。

游戏需求:
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 = [];// 当前出现的bossvar 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 downswitch(curkey){case 37:case 39:keypriority.left = curkey;    // left rightbreak;case 38:case 40:keypriority.top = curkey;    // up downbreak;}}else{return false;}}if(curkey==13 || is_start==1 && is_lock==0){    // game is start or key=13switch(curkey){case 13: // enterif(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 downif(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'])){ // 打中bosscurboss['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'])){ // 打中bosscurboss['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);    // 自减1var opacity = 100;setOpacity($('bomb'), opacity);disp('bomb', 'show');// 清除所有敌机及敌方子弹is_clear = 1;// 打击bossif(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;    // 每关开始清0var 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 giftvar 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 giftvar 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 giftvar 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 warbosswar = 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 1case 2: // boss 2case 3: // boss 3case 4: // boss 4case 5: // boss 5case 6: // boss 6var 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 overclearInterval(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 子弹徧移* speed 速度*/enftbullet = function(type, oleft, otop, left, top, speed){var bullet = document.createElement('div');setClass(bullet, type);setPosition(bullet, 'left', oleft);setPosition(bullet, 'top', otop);ft.parentNode.appendChild(bullet);var et = setInterval(function(){setPosition(bullet, 'top', getPosition(bullet,'top')+top);setPosition(bullet, 'left', getPosition(bullet,'left')+left);if(getPosition(bullet,'left')>400 || getPosition(bullet,'left')<-30 || getPosition(bullet,'top')<-30 || getPosition(bullet,'top')>640 || is_lock==1 || is_clear==1){clearInterval(et);ft.parentNode.removeChild(bullet);}impact_handle(bullet, et);}, speed);}// boss overbossover = function(){obj = curboss['obj'];obj.parentNode.removeChild(obj);scoreup(6); // boss scorevar dest = document.createElement('div');setClass(dest, 'destroyboss');setPosition(dest, 'top', getPosition(obj, 'top'));setPosition(dest, 'left', getPosition(obj, 'left'));ft.parentNode.appendChild(dest);var step = 0;var et = setInterval(function(){if(step<21){setBgPosition(dest, step*(-150), 0);}else if(step==21){dest.parentNode.removeChild(dest);}else if(step==50){clearInterval(et);levelup();}step++;}, 50);}// continuelevelcontinue = function(){reset_fighter();disp(ft.id, 'show');setProtect();fighter_init();}// 过关levelup = function(){keypriority = {};enemydata = [];curboss = null;level ++;bgsound('pass', false);var processed = 0;var et = setInterval(function(){is_lock = 1;processed = processed + 15;if(getPosition(ft, 'top')>-50){setPosition(ft, 'top', getPosition(ft, 'top')-15);}if(processed>=2500){clearInterval(et);disp(ft.id, 'hide');if(level<=map.length){bgchange(0);msg_show();setTimeout(function(){msg_hide();start();}, 1500);}else{gameclear();    // 通关}}}, 25);}// 更新分数scoreup = function(type){if(typeof(scoretag[type])!='undefined'){score = score + scoretag[type] * level;setHtml('score', score);if(score > hiscore){hiscore = score;setHtml('hiscore', hiscore);}}}// 子弹升级powerup = function(){power = power+1>4? 4 : power+1;}    // 炸弹增加bombup = function(){bombnum ++;setHtml('bombnum', bombnum);}// 战机增加fighterup = function(){fighternum ++;setHtml('fighternum', fighternum);}// 保护状态setProtect = function(){is_protect = 1;if(is_pile==1){setClass(ft, 'fighter_sp');}else{setClass(ft, 'fighter_p');}setTimeout(function(){is_protect = 0;if(is_pile==1){setClass(ft, 'fighter_s');}else{setClass(ft, 'fighter');}}, 3000)}// 碰撞处理impact_handle = function(obj, et){    // et 定时器if(impact(obj, ft) && is_lock==0){    // 产生碰撞if(is_protect==0){destroy(ft);clearInterval(et);ft.parentNode.removeChild(obj);}}}// 全部通关gameclear = function(){is_over = 1;disp('gameclear', 'show');setHtml('clearcon', 'Game Clear' + '<br>' + 'SCORE : ' + score);bgsound('clear', false);bgchange('clear');setTimeout(function(){bgsound();init();}, 16000);}// 游戏结束gameover = function(){is_over = 1;disp('gameover', 'show');setHtml('overcon', 'LEVEL : ' + level + '<br>' + 'SCORE : ' + score);bgsound('over', false);bgchange('over');failtimes++;setTimeout(function(){if(failtimes==3){alert('在游戏开始画面依次输入 ↑ ↑ ↓ ↓ ← → ← → a s a s,再开始游戏,会有惊喜^_^');}bgsound();init();}, 8000);}// 显示讯息msg_show = function(){setHtml('level', 'LEVEL - ' + level);disp('level', 'show');is_lock = 1;}// 隐藏讯息msg_hide = function(){disp('level', 'hide');}// 重置reset = function(){is_start = 0;is_bombing = 0;is_lock = 1;is_over = 0;is_clear = 0;is_protect = 0;level = 1;power = 1;ackey = {};keypriority = {};enemydata = [];score = 0;fighternum = 3;bombnum = 3;setHtml('hiscore', hiscore);setHtml('score', score);setHtml('fighternum', fighternum);setHtml('bombnum', bombnum);reset_fighter();reset_pile();disp('op', 'show');disp('gameover', 'hide');disp('gameclear', 'hide');bgchange(0);}// 重置战机位置reset_fighter = function(){setPosition(ft, 'top', 640);setPosition(ft, 'left', 175);setClass(ft, 'fighter');}// 重置蓄力reset_pile = function(){is_pile = 0;pilenum = 0;if(is_protect==1){setClass(ft, 'fighter_p');}else{setClass(ft, 'fighter');}}// 战机初始化fighter_init = function(){var et = setInterval(function(){if(getPosition(ft, 'top')>400){setPosition(ft, 'top', getPosition(ft, 'top')-12);}else{clearInterval(et);is_lock = 0;action();}}, 30);}// 密技30命cheat = function(){if(cheatcode.join(',')=='38,38,40,40,37,39,37,39,65,83,65,83,13'){fighternum = 30;setHtml('fighternum', fighternum);}cheatcode = [];}// 背景控制bgmove = function(obj){var step = 1;var et = setInterval(function(){var bgpos = getBgPosition(obj);if(bgpos['top']==640){setBgPosition(obj, 0, 0);    // reset}else{setBgPosition(obj, bgpos['left'], bgpos['top']+step);}}, 50);}// 背景切换bgchange = function(file){var obj = $('gameplane');setClass(obj, 'gameplane bg'+file);}// 音乐控制bgsound = function(file, loop){var id = 'audioplayer';if(typeof(file)!='undefined'){if(typeof(loop)=='undefined'){loop = false;}var audiofile = [];audiofile['mp3'] = 'music/' + file + '.mp3';audiofile['ogg'] = 'music/' + file + '.ogg';audioplayer(id, audiofile , loop);}else{audioplayer(id);}}return this;})();



http://www.ppmy.cn/news/377724.html

相关文章

Python实现飞机大战小游戏(含源码+图片资源)

Python实现飞机大战小游戏&#xff08;含源码图片资源&#xff09; 1. 项目描述2. 依赖包导入3. 代码实现3.1 类构建3.2 初始化设置3.3 排行榜功能3.4 主循环 4. 效果展示4.1游戏开始界面&#xff1a;4.2破纪录界面显示&#xff1a;4.3排行榜功能&#xff1a; 5. 不足和改进 1.…

史上最清晰的雷霆战机游戏开发全过程(基于java,素材和源码均齐全)

前情提要 此次咕咕为大家准备了雷霆战机游戏开发的全过程&#xff0c;我将整个开发都写在了文档中&#xff0c;有图有真相&#xff0c;步步到位&#xff0c;供大家进行细节功能实现上的参考&#xff0c;除此之外&#xff0c;游戏所需的图片与音乐素材、逻辑脑图都一 一放在了文…

【Canvas】童年玩过的雷霆战机你还记得吗?

按键机的年代&#xff0c;想必大家都玩过类似雷电&#xff0c;雷霆战机之类的飞行射击类游戏吧&#xff0c;今天我就试着用canvas来还原一下游戏场景。 素材准备 还原场景的第一步是准备素材&#xff0c;首先我们需要一架雷霆战机&#xff0c;经过九牛二虎之力&#xff0c;我…

前端案例:飞机大战( js+dom 操作,代码完整,附图片素材)

目录 一、案例效果 二、实现思路 三、完整代码详细注释 四、涉及要点 五、案例素材 一、案例效果 二、实现思路 创建游戏背景板&#xff1b;创建我方战机&#xff0c;鼠标进入游戏面板后其随鼠标轨迹运动&#xff1b; onmousemove创建子弹&#xff0c;让子弹周期性的在战…

飞机大战——图文详解

文章目录 1.前言2.效果展示3.图片素材的准备4.需要构建的函数5.变量的定义6.数据的初始化7.画面的呈现8.飞机移动的实现9.子弹的构建和移动9.1子弹的构建9.2子弹的移动 10.敌机的创建和移动11.敌机消灭函数12.结束语13.完整代码14.内容更新 1.前言 本次需要用到easyx图形库&am…

自动化运维工具—Ansible

一、Ansible概述 1.1 Ansible是什么 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配…

MySQL索引:让你的数据库查询快到起飞!

&#x1f495;世界上最美好的东西之一&#xff0c;就是你每天都有机会开始全新的一天。&#x1f495; &#x1f43c;作者&#xff1a;不能再留遗憾了&#x1f43c; &#x1f386;专栏&#xff1a;MySQL学习&#x1f386; &#x1f697;本文章主要内容&#xff1a;详细介绍如何查…

中国联通 光猫 吉比特 G-140W-UG 管理员 账号密码

账号&#xff1a;cuadmin 密码&#xff1a;cuadmin &#xff08;均是小写&#xff09;