JS小游戏-宇宙战机
来源:互联网 发布:青少年安全上网软件 编辑:程序博客网 时间:2024/04/30 07:47
游戏介绍:
业余时间写的一个飞行射击游戏,纵向,共六关。
游戏需求:
1.战机可发射子弹,子弹可通过获取道具升级。
2.战机可放bomb,可获取道具增加数量。
3.战机可蓄力攻击。
4.道具有三种,分别是升级子弹,增加bomb数量,增加战机数量。
5.每关音乐不同。
6.战机被击落后再进入战场,有保护状态。
7.敌机AI设计。
游戏图片:
业余时间写的一个飞行射击游戏,纵向,共六关。
游戏需求:
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 子弹徧移
- * 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 over
- bossover = function(){
- obj = curboss['obj'];
- obj.parentNode.removeChild(obj);
- scoreup(6); // boss score
- var 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);
- }
- // continue
- levelcontinue = 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;
- })();
阅读全文
0 0
- JS小游戏-宇宙战机
- JS小游戏-宇宙战机
- 用java swing编写的雷霆战机小游戏
- js小游戏
- js小游戏
- 宇宙
- 宇宙
- JS小游戏 - 盖房子
- js 小游戏地址
- JS 双人小游戏
- JS制作的小游戏
- 【转】【经典】js小游戏
- js扫雷小游戏
- js迷宫小游戏
- js键盘小游戏
- js猜数字小游戏
- JS数字拼图小游戏
- JS-贪吃蛇小游戏
- 关于Spring3 MVC的 HttpMediaTypeNotSupportedException
- WEB前端vi
- Redis知识总结
- java多线程编程核心技术(1丶2章)
- ListView 多布局报异常 ArrayIndexOutOfBoundsException
- JS小游戏-宇宙战机
- JAVA基础面试大全
- MySQL主从复制
- mvn命令
- 图的问题
- HDU
- [RK3288][Android6.0] WiFi之NetworkFactory形成的评分机制
- POJ 1661 Help Jimmy【DP】
- Could not find any matches for com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+ as no versions处理