⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscreen.java~5~

📁 手机游戏小游戏 合金弹头 J2ME S60模拟器源代码
💻 JAVA~5~
📖 第 1 页 / 共 5 页
字号:
         movis_defin[i][MOVI_DEFIN_LINKY] = in.read();
         movis_defin[i][MOVI_DEFIN_FRAMW] = movis_image[i].getWidth() / movis_defin[i][MOVI_DEFIN_FRAME];
         movis_defin[i][MOVI_DEFIN_FRAMH] = movis_image[i].getHeight();
       }
     }catch(Exception e){}
   }

   private final void movi_load(InputStream in) throws IOException {
     for (int i = in.read() - 1; i >= 0; i--)
       movi_create(in.read(), readByte(in) * 8, readByte(in) * 8, 0, 0, 0, 0, -1, MOVI_DEATH_EVER);
   }

   private final void movi_create(int movi_index, int pos_x, int pos_y, int spd_x,
                                  int spd_y, int accelx, int accely, int direct, int death){
     int[] movi = new int[MOVI_COUNT];
     movi[MOVI_DEFID] = movi_index;
     movi[MOVI_POS_X] = pos_x;
     movi[MOVI_POS_Y] = pos_y;

     movi[MOVI_FRAML] = movis_defin[movi_index][MOVI_DEFIN_LINKX];
     movi[MOVI_FRAMT] = movis_defin[movi_index][MOVI_DEFIN_LINKY];
     movi[MOVI_FRAMR] = movis_defin[movi_index][MOVI_DEFIN_FRAMW] - movis_defin[movi_index][MOVI_DEFIN_LINKX];
     movi[MOVI_FRAMB] = movis_defin[movi_index][MOVI_DEFIN_FRAMH] - movis_defin[movi_index][MOVI_DEFIN_LINKY];

     movi[MOVI_FACEW] = movis_image[movi_index].getWidth();
     movi[MOVI_FRAMH] = movis_image[movi_index].getHeight();
     movi[MOVI_FRAME] = movis_defin[movi_index][MOVI_DEFIN_FRAME];
     movi[MOVI_FRAMW] = movis_defin[movi_index][MOVI_DEFIN_FRAMW];
     movi[MOVI_INDEX] = 0;
     movi[MOVI_SPD_X] = spd_x;
     movi[MOVI_SPD_Y] = spd_y;
     movi[MOVI_ACCEX] = accelx;
     movi[MOVI_ACCEY] = accely;
     movi[MOVI_DIREC] = direct;
     movi[MOVI_DEATH] = death;
     movis.addElement(movi);
   }
   private final void movi_run(){
     for(int i = movis.size() - 1; i >= 0; i--){
       int[] movi = (int[])movis.elementAt(i);
       int movi_l = movi[MOVI_POS_X] - ((movi[MOVI_DIREC] == -1)? movi[MOVI_FRAML]: movi[MOVI_FRAMR]);
       int movi_t = movi[MOVI_POS_Y] - movi[MOVI_FRAMT];
       int movi_r = movi[MOVI_POS_X] + ((movi[MOVI_DIREC] == -1)? movi[MOVI_FRAMR]: movi[MOVI_FRAML]);
       int movi_b = movi[MOVI_POS_Y] + movi[MOVI_FRAMB];
       switch(movi[MOVI_DEATH]){
         case MOVI_DEATH_ONCE: if(movi[MOVI_INDEX] == movi[MOVI_FRAME] - 1) movis.removeElementAt(i); break;
         case MOVI_DEATH_SIDE: if(!visible(movi_l, movi_t, movi_r, movi_b)) movis.removeElementAt(i); break;
       }
       movi[MOVI_POS_X] += movi[MOVI_SPD_X] / 100;
       movi[MOVI_POS_Y] += movi[MOVI_SPD_Y] / 100;
       movi[MOVI_SPD_X] += movi[MOVI_ACCEX];
       movi[MOVI_SPD_Y] += movi[MOVI_ACCEY];
       movi[MOVI_INDEX] = (movi[MOVI_INDEX] < movi[MOVI_FRAME] - 1) ? movi[MOVI_INDEX] + 1: 0;
     }
   }

  private final void movi_draw(){
    //画动画物体
    for(int i = movis.size() - 1; i >= 0; i--){
      int[] movi = (int[])movis.elementAt(i);
      int movi_l = movi[MOVI_POS_X] - ((movi[MOVI_DIREC] == -1)? movi[MOVI_FRAML]: movi[MOVI_FRAMR]);
      int movi_t = movi[MOVI_POS_Y] - movi[MOVI_FRAMT];
      int movi_r = movi[MOVI_POS_X] + ((movi[MOVI_DIREC] == -1)? movi[MOVI_FRAMR]: movi[MOVI_FRAML]);
      int movi_b = movi[MOVI_POS_Y] + movi[MOVI_FRAMB];
      int draw_x = (movi[MOVI_DIREC] == -1) ?
                    movi_l - movi[MOVI_INDEX] * movi[MOVI_FRAMW]:
                    movi_r + movi[MOVI_INDEX] * movi[MOVI_FRAMW] - movi[MOVI_FACEW];
      if(visible(movi_l, movi_t, movi_r, movi_b)){
        clipRect(movi_l, movi_t, movi[MOVI_FRAMW], movi[MOVI_FRAMH]);
        g.drawImage(movis_image[movi[MOVI_DEFID]],
                    draw_x - position_x, movi_t - position_y,
                    (movi[MOVI_DIREC] == -1)? 0: 0x2000);
      }
    }
  }


  /**********************************************
   * 转换图形翻转属性
   * @param rotate int 地图中用到的翻转数据
   * @return int nokia j2me api中的图形翻转数据
   **********************************************/
  private int translateRotate(int rotate){
    switch(rotate){
      case 1: return 0x2000;
      case 2: return 0x4000;
      case 3: return 90;
      case 4: return 180;
      case 5: return 270;
      default:return 0;
    }
  }


  //****************************************************************************
  // 游戏中的文字提示信息
  //****************************************************************************
  private String message_prompt = null;
  private final void message_prompt(String msg){
    message_prompt = msg;
    refresh();
  }
  private final void message_prompt_show(){
    if(message_prompt == null) return;
    drawframe(15, 54, screen_w - 15, 74);
    g.setColor(0xFFFFFF);
    g.drawString(message_prompt, screen_w >> 1, 57, 0x11);
  }

  /**********************************************
   * 主角被怪物攻击
   * @param attack 怪物的攻击力
   **********************************************/
  private final void hero_hitted(int attack){
    if(hero_cflash > 0) return;
    if(attack <= 0) return;
    hero_anima -= attack;
    hero_cflash = 10;
    if(hero_anima <= 0){
      hero_setfirestatus(STATUS_FIRE_DEATHS);
      hero_setaction(HERO_ACTION_SHOTDEAD);
    }
  }

  /**********************************************
   * 判断主角是否和一个矩形发生碰撞
   * @param x int
   * @param y int
   * @param r int
   * @param b int
   * @return boolean
   **********************************************/
  private final boolean hero_nexus(int x, int y, int r, int b) {
    int[] fram = heroaction[hero_action][hero_cframe];
    return !((x > hero_pos_x + fram[HERO_FRAME_RECTW]) ||
             (r < hero_pos_x - fram[HERO_FRAME_RECTW]) ||
             (y > hero_pos_y + hero_frectb) ||
             (b < hero_pos_y - fram[HERO_FRAME_RECTT]));
  }

  //****************************************************************************
  /** @todo: 主角 */
  //****************************************************************************
  private Image hero_face;      //当前主角图形资源
  private int hero_pos_x;       //主角位置X
  private int hero_pos_y;       //主角位置Y
  private int hero_old_x;       //主角上次站立位置X
  private int hero_old_y;       //主角上次站立位置Y
  private int hero_anima = 50;  //生命值
  private int hero_attak = 10;
  private int hero_being = 3;   //生命次数
  private int hero_score = 0;   //得分
  private int hero_spd_y = 0;   //垂直速度 速度数值为实际位移量的10倍
  private int hero_style = 0;   //主角的样式:人物,飞机,坦克

  private int hero_shot_type = 0; //子弹类型
  private int hero_shotcount = 0; //子弹数量
  private int hero_shottally = 0; //子弹延时计数
  private int hero_bombcount = 0; //炸弹数量
  private int hero_bombtally = 0; //炸弹投掷延时
  private int HERO_BOMBTALLY = 5; //投弹延迟常数
  private int hero_add_being = 0; //根据分数添加的人数
  private boolean hero_death = false; //如果主角完成了死亡动作 该标记被设为true 用于新出现主角

  private final int SHOT_TYPE_TOMM = 0;//机枪
  private final int SHOT_TYPE_MISS = 1;//导弹

  private int SPEED_HORZ_ACCEL = 60;   //水平方向加速度
  private int SPEED_VERT_ACCEL = 50;   //垂直方向加速度
  private int SPEED_VERT_START = -180; //起跳初速度
  private int SPEED_VERT_LIMIT = 200;  //垂直方向最大速度

  private int hero_direct = 1; //主角动作的方向 -1:向左 1:向右
  private int hero_cflash;
  private int hero_status;
  private int hero_action;
  private int hero_cframe;
  private int hero_frectw;
  private int hero_frectt;

  private int hero_fire_count = 0;
  private final int hero_frectb = 11;
  //主角状态常数 分两部分 字节低位大状态 高位字节小状态
  private final int STATUS_MAIN = 0xF000;
  private final int STATUS_MAIN_STAND = 0x0000;
  private final int STATUS_MAIN_SQUAT = 0x1000;
  private final int STATUS_MAIN_INAIR = 0x2000;

  private final int STATUS_FIRE = 0xF00;
  private final int STATUS_FIRE_NORMAL = 0x000;
  private final int STATUS_FIRE_ATTACK = 0x100;
  private final int STATUS_FIRE_SWORDS = 0x200;
  private final int STATUS_FIRE_THROWS = 0x300;
  private final int STATUS_FIRE_DEATHS = 0x400;

  private final int STATUS_MOVE = 0xF0;
  private final int STATUS_MOVE_REST = 0x00;
  private final int STATUS_MOVE_MOVE = 0x10;
  private final int STATUS_MOVE_RISE = 0x20;
  private final int STATUS_MOVE_LEAP = 0x30;
  private final int STATUS_MOVE_FALL = 0x40;

  private final int STATUS_PORT = 0xF;
  private final int STATUS_PORT_BASE = 0x0;
  private final int STATUS_PORT_OVER = 0x1;
  private final int STATUS_PORT_DOWN = 0x2;
  //主角动作数据 第一维是表示动作索引 第二维表示帧索引 第三维帧定义
  private int[][][] heroaction;
  private final int HERO_ACTION_STANREST     = 0;
  private final int HERO_ACTION_STANMOVE     = 1;
  private final int HERO_ACTION_STANFALCHION = 2;
  private final int HERO_ACTION_STANTOSSBOMB = 3;
  private final int HERO_ACTION_STANFIREBASE = 4;
  private final int HERO_ACTION_STANFIREOVER = 5;
  private final int HERO_ACTION_STANPORTOVER = 6;
  private final int HERO_ACTION_MOVEFALCHION = 7;
  private final int HERO_ACTION_MOVETOSSBOMB = 8;
  private final int HERO_ACTION_MOVEFIREBASE = 9;
  private final int HERO_ACTION_MOVEFIREOVER = 10;
  private final int HERO_ACTION_MOVEPORTOVER = 11;

  private final int HERO_ACTION_SQUAREST     = 12;
  private final int HERO_ACTION_SQUAMOVE     = 13;
  private final int HERO_ACTION_SQUAFALCHION = 14;
  private final int HERO_ACTION_SQUATOSSBOMB = 15;
  private final int HERO_ACTION_SQUAFIRE     = 16;

  private final int HERO_ACTION_JUMPRISE     = 17;
  private final int HERO_ACTION_RISEFALCHION = 18;
  private final int HERO_ACTION_RISETOSSBOMB = 19;
  private final int HERO_ACTION_RISEFIREBASE = 20;
  private final int HERO_ACTION_RISEFIREOVER = 21;
  private final int HERO_ACTION_RISEFIREDOWN = 22;
  private final int HERO_ACTION_RISEPORTOVER = 23;
  private final int HERO_ACTION_RISEPORTDOWN = 24;

  private final int HERO_ACTION_JUMPLEAP     = 25;
  private final int HERO_ACTION_LEAPFALCHION = 26;
  private final int HERO_ACTION_LEAPTOSSBOMB = 27;
  private final int HERO_ACTION_LEAPFIREBASE = 28;
  private final int HERO_ACTION_LEAPFIREOVER = 29;
  private final int HERO_ACTION_LEAPFIREDOWN = 30;
  private final int HERO_ACTION_LEAPPORTOVER = 31;
  private final int HERO_ACTION_LEAPPORTDOWN = 32;

  private final int HERO_ACTION_JUMPFALL     = 33;
  private final int HERO_ACTION_FALLFALCHION = 34;
  private final int HERO_ACTION_FALLTOSSBOMB = 35;
  private final int HERO_ACTION_FALLFIREBASE = 36;
  private final int HERO_ACTION_FALLFIREOVER = 37;
  private final int HERO_ACTION_FALLFIREDOWN = 38;
  private final int HERO_ACTION_FALLPORTOVER = 39;
  private final int HERO_ACTION_FALLPORTDOWN = 40;

  private final int HERO_ACTION_SHOTDEAD     = 41;
  private final int HERO_ACTION_BOMBDEAD     = 42;

  private final int HERO_ACTION_VICTORY      = 43;
  private final int HERO_ACTION_SCARPSIDE    = 44;

  //主角每一帧包括34个数据 前面6个是 帧的作用区和攻击区
  //后面的数据每7个一组 每一组表示一个图块数据
  private final int HERO_FRAME_COUNT = 20;
  private final int HERO_FRAME_RECTW = 0;
  private final int HERO_FRAME_RECTT = 1;
  private final int HERO_FRAME_FIREX = 2;
  private final int HERO_FRAME_FIREY = 3;
  private final int HERO_FRAME_FIREW = 4;
  private final int HERO_FRAME_FIREH = 5;

  private final int HERO_FRAME_PARTSTART = 6;
  private final int HERO_FRAME_PARTCOUNT = 7;

  private final int HERO_FRAME_FRAML = 0;
  private final int HERO_FRAME_FRAMT = 1;
  private final int HERO_FRAME_FRAMR = 2;
  private final int HERO_FRAME_FRAMB = 3;
  private final int HERO_FRAME_FACEL = 4;
  private final int HERO_FRAME_FACET = 5;
  private final int HERO_FRAME_FACER = 6;
  /**********************************************
   * 装载主角数据
   **********************************************/
  private final void hero_loaddefine(){
    InputStream in = stream_create("/hero.bin");
    try{
      byte[] gifdata = new byte[readWord(in)];
      in.read(gifdata, 6, gifdata.length - 6);
      System.arraycopy("GIF89a".getBytes(), 0, gifdata, 0, 6);
      hero_face = Image.createImage(gifdata,0, gifdata.length);
      heroaction = new int[in.read()][][];
      for(int i = 0; i < heroaction.length; i++){
        int framecount = in.read();
        heroaction[i] = new int[framecount][HERO_FRAME_COUNT];
        for(int j = 0; j < framecount; j++){
          for (int k = 0; k < 6; k++)
            heroaction[i][j][k] = (byte)in.read();
          for(int k = 0; k < 2; k ++){
            for (int l = 0; l < 7; l++)
              heroaction[i][j][6 + k * 7 + l] =
                  (l < 4) ? (byte) in.read() : in.read();
          }
        }
      }
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  /**********************************************
   * 设置主角当前状态
   * @param status_id int 主角状态索引
   **********************************************/
  private final void hero_setmainstatus(int status_id){
    hero_status = (hero_status & ~STATUS_MAIN) | status_id;
  }
  private final void hero_setfirestatus(int status_id){
    hero_status = (hero_status & ~STATUS_FIRE) | status_id;
  }
  private final void hero_setmovestatus(int status_id){
    hero_status = (hero_status & ~STATUS_MOVE) | status_id;
  }
  private final void hero_setportstatus(int status_id){
    hero_status = (hero_status & ~STATUS_PORT) | status_id;
  }
  /**********************************************
   * 设置主角当前的动作
   * @param action_id int 主角动作的索引
   **********************************************/
  private final void hero_setaction(int action_id) {
    if (hero_action == action_id) return;
    hero_action = action_id;
    hero_setcframe(0);
  }
  /**********************************************
   * 设置主角当前帧
   * @param cframe_id int 主角当前帧设置
   **********************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -