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

📄 myplayer.java

📁 手机RPG游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
  if((st&GameCanvas.DOWN_PRESSED)!=0){
    if(player_y+1<=maph-imgh) { sy=speed;}
    this.setFrame(3+xn*(step++%4));  }//下

  if(st== 6){    this.setFrame(6+xn*(step++%4));  }//左上
  if(st==68){    this.setFrame(7+xn*(step++%4));  }//左下
  if(st==34){    this.setFrame(5+xn*(step++%4));  }//右上
  if(st==96){    this.setFrame(4+xn*(step++%4));  }//右下

  if((st&GameCanvas.DOWN_PRESSED)!=0||(st&GameCanvas.UP_PRESSED)!=0||(st&GameCanvas.RIGHT_PRESSED)!=0||(st&GameCanvas.LEFT_PRESSED)!=0)
  {}
  else{step=0;this.setFrame(2*xn+3);
    switch (action){
      case 2: this.setFrame(2*xn+1);break;
      case 64:this.setFrame(2*xn+3);break;
      case 4: this.setFrame(2*xn+2);break;
      case 32:this.setFrame(2*xn+0);break;
      case 6: this.setFrame(2*xn+6);break;
      case 68:this.setFrame(2*xn+7);break;
      case 34:this.setFrame(2*xn+5);break;
      case 96:this.setFrame(2*xn+4);break;
    }
    }//什么都没按图片的步长记录设为0

}

//////////////////
private void goHome(){//回城
  MyControl.load.backMapId=0;
  MyControl.gameBoard.boardInit();
}
/////////
private  void playerAddHp(int addhp){//加红
  playerHp+=addhp;
  playerHp=playerHp<this.playerMaxHp?playerHp:this.playerMaxHp;
}
///////
private void playerAddMp(int addmp){//加蓝
  playerMp+=addmp;
  playerMp=playerMp<this.playerMaxMp?playerMp:this.playerMaxMp;
}
/////////

/////////////////////
  public int getPlayer_x() {
    return player_x;
  }
  public int getplayer_y() {
    return player_y;
  }
  ////////////////
  public void showPlayerHpMp(Graphics g){//显示玩家的生命和体力.
    int d=16;
    g.setColor(0xffff00);
    g.drawRect(10,h-d-1,50,5);
    g.drawRect(10,h-d/2-1,50,5);
    g.drawRect(w>>1,h-d/2-1,50,5);
    g.setColor(0xff0000);
    g.fillRect(11,h-d,this.playerHp*50/this.playerMaxHp,4);//生命
    g.setColor(0x0000ff);
    g.fillRect(11,h-d/2,this.playerMp*50/this.playerMaxMp,4);//Mp
    g.drawString("L-"+playerLevel,w-30,h-d,0);
    g.setColor(0x00ffff);
    g.fillRect(w>>1,h-d/2,this.playerEx*50/playerNextEx,4);//经验

    cur.findGoodShow(g);//发现物品。
if(playerHp>0){
    if(playerBooty){//获得战利品????//一次打一个怪时可得好几个。以后要修正。
      cur.findGoods();
      cur.findGood = true;
      cur.findGoodShow(g);
      playerBooty = false;
      if(playerEx>playerNextEx){playerNewMen();}//长级
    }
    }else{
    this.goHome();//玩家死后回村
    playerHp=1;
   // isWarfare=false;
    }

    }
  //////////////////
  private void pressA_NpcSpeak(int st){//按1和npc说话。
    switch(pressA(st)){
     case 2:speakSure=true;break;
     case 3:
     {
     if(hitSmith){showBuyGrid=true;isShowGrid=true;speakSure=false;break;}//如果碰的的铁匠的就显示
     if(hitDrugstore) {showBuyGrid=true;isShowGrid=true;speakSure=false;break;}//如果碰撞的是药店的人显示药店的。
     pressA_Num=1;
     speak_Num=-1;
     speakSure=false;
     }
     default:break;
  }
}
/////////////////////////////
  public void showDrugstoreGrid(Graphics g){//显示药店的物品栏
  if(hitDrugstore && showBuyGrid)
  { cur.DrugstoreGrid(g,curSwap);//写字//画物品//画光标
      }
 }
 ////////////////////////
public void showSmithGrid(Graphics g){//显示铁匠的物品栏
  if(hitSmith && showBuyGrid){
    cur.SmithGrid(g,curSwap);//写字//画物品//画光标
       }
}
  ///////////////
  public void showPlayerGrid(Graphics g){//显示玩家的物品栏,在gameboard.draw 下被调用。
    if(isShowGrid){this.showPlayerArmsGrid(g);////显示玩家的属性栏
      cur.PlayerGrid(g,curSwap);//在玩家物品栏,和上面的光标
    }
  }
///////////////////

  public void changPlayerAttribute(Vector gvs,int Pnum){//改变玩家的属性。

//    "绿石","铜戒","小红","小蓝","辩认",
//    "红石","银戒","中红","中蓝","回城",
//    "蓝石","金戒","大红","大蓝","骷髅",
//    "粉石","钻戒","战甲","头盔","钢靴",
//    "战手","长剑","战盾","战盔","战靴",
//    "护手","青锋","莫邪","腰带","古书",
    int number=((Goods)gvs.elementAt(Pnum)).number;
    switch(number){
    case 2:  ((Goods)gvs.elementAt(Pnum)).n--;    playerAddHp(50);      break;//加红
    case 7:  ((Goods)gvs.elementAt(Pnum)).n--;    playerAddHp(100);     break;
    case 12: ((Goods)gvs.elementAt(Pnum)).n--;    playerAddHp(200);     break;

    case 3:    ((Goods)gvs.elementAt(Pnum)).n--;  playerAddMp(30);     break;//加蓝
    case 8:    ((Goods)gvs.elementAt(Pnum)).n--;  playerAddMp(60);     break;
    case 13:   ((Goods)gvs.elementAt(Pnum)).n--;  playerAddMp(120);    break;

    case 9:
      if(MyControl.load.backMapId!=0){
      ((Goods)gvs.elementAt(Pnum)).n--;
      pressB();
      goHome(); }
      break;//回城
    default:   break;

  }
}
public int  hitBox(Box box[]){//与箱子的碰撞.
    int b=-1;
    for(int i=0;i<box.length;i++)
     {if(collidesWith(box[i],true))
     {b=i;
      return b; }
     }
return b;
}

  ///////////////////////////
private void showPlayerArmsGrid(Graphics g){//显示玩家的属性栏
  Image grid0=MyControl.load.gridImg[0];//属性栏
  int d=15;//行距
  int grid0x=w-grid0.getWidth();
  int grid0y=h-grid0.getHeight();
  int BuyGridxPos=grid0x+5,BuyGridyPos=grid0y+6;
  g.drawImage(grid0,grid0x,grid0y,Graphics.LEFT|Graphics.TOP);
  g.setColor(0xffffff);
  g.drawString(playerName,BuyGridxPos,BuyGridyPos+5*d,0);
  g.drawString(playerLevel+"级",BuyGridxPos+4*d,BuyGridyPos+5*d,0);
  g.drawString("HP "+playerHp+"/"+playerMaxHp,BuyGridxPos,BuyGridyPos+6*d,0);
  g.drawString("MP "+playerMp+"/"+playerMaxMp,BuyGridxPos+3*d,BuyGridyPos+6*d,0);
  g.drawString("攻"+playerHit,BuyGridxPos,BuyGridyPos+7*d,0);
  g.drawString("防"+playerRecovery,BuyGridxPos+3*d,BuyGridyPos+7*d,0);
  g.drawString("经验: "+playerEx+"/"+playerNextEx,BuyGridxPos,BuyGridyPos+8*d,0);
  g.drawString("金币: "+cur.getPlearMoney(),BuyGridxPos,BuyGridyPos+9*d,0);
}
//////////////
////按 3 时,关闭所有打开的窗口。
private void  pressB(){
  showBuyGrid=false;//关闭买卖物品窗口。
  isShowGrid=false;//关闭玩家属性窗口.
  speakSure=false;//关闭对话窗口。
  speak_Num=-1;//为说话的选取给初值。
  pressA_Num=1;//为按1键的次数给初值。
  cur.setCurx();cur.setCury();cur.setNum(0);//给买卖物品栏给初值。
  curSwap=false;//给交换窗口的开关给初值。
}
int orientation=-1;
/////////////
private void playerWar(int st){//战斗状态。
  int xn=16;
  sx=0;sy=0;
  if((st&GameCanvas.RIGHT_PRESSED)!=0){
    if(player_x+1<=mapw-imgw)    { sx=speed;}//边界检测//????????????????????????????????????????????????????????
    this.setFrame(8+xn*(step++%4));    }//右     //这里要修正:视窗没到边界时,这里可不用检测.
  if((st&GameCanvas.LEFT_PRESSED)!=0){
    if(player_x-1>=2)    {   sx=-speed;}
    this.setFrame(10+xn*(step++%4));  }//左
  if((st&GameCanvas.UP_PRESSED)!=0){
    if(player_y-1>=0)    {sy=-speed;}
    this.setFrame(9+xn*(step++%4));  }//上
  if((st&GameCanvas.DOWN_PRESSED)!=0){
    if(player_y+1<=maph-imgh) { sy=speed;}
    this.setFrame(11+xn*(step++%4));  }//下
  if(st== 6){    this.setFrame(14+xn*(step++%4));  }//左上
  if(st==68){    this.setFrame(15+xn*(step++%4));  }//左下
  if(st==34){    this.setFrame(13+xn*(step++%4));  }//右上
  if(st==96){    this.setFrame(12+xn*(step++%4));  }//右下
  if((st&GameCanvas.DOWN_PRESSED)!=0||(st&GameCanvas.UP_PRESSED)!=0||(st&GameCanvas.RIGHT_PRESSED)!=0||(st&GameCanvas.LEFT_PRESSED)!=0){}
  else{       step++;
              switch(action){
              case 2: this.setFrame(xn*(step%4)+9);break;
              case 64:this.setFrame(xn*(step%4)+11);break;
              case 4: this.setFrame(xn*(step%4)+10);break;
              case 32:this.setFrame(xn*(step%4)+8);break;
              case 6: this.setFrame(xn*(step%4)+14);break;
              case 68:this.setFrame(xn*(step%4)+15);break;
              case 34:this.setFrame(xn*(step%4)+13);break;
              case 96:this.setFrame(xn*(step%4)+12);break;
            }
         }
  }
  ////////////
  public void playerAction(int st,int mapw,int maph,Box box[],Monsters monsterCaves,Monsters monsters){

    if((!isShowGrid)&&(!isWarfare)){playerMove(st,mapw,maph);}//如果显示属性栏,人物不能移动。
       else {sx=0;sy=0;}//防止走动时,按开物品栏后,人会走个不停。
    if((st!=0)&&((st&GameCanvas.GAME_A_PRESSED)==0)){action=st;}//记录当前的按键方向
    if(isWarfare){
      playerWar(st);
      if(playerMp>0) {//如果 Mp 没有就不能攻击。
          int mapId=MyControl.load.backMapId;
                switch(mapId){
                  case 1:   monsters.hitPlayer(this);   break;//村外
                  case 2:   monsterCaves.hitPlayer(this);   break;//山洞
                  default:  isWarfare=false;   break;//防止在村中触发战斗状态。
                }
          }else{
          isWarfare=false;
          }
    }
    //在不与npc相碰撞时,按 7 键,打开玩家自已的物品栏。
    if(((st&GameCanvas.GAME_C_PRESSED)!=0)&&(!hitNpcOk)){//打开玩家属性栏。
    this.isShowGrid=true;    //将物品栏的开关分开设
    curSwap=true;//给交换窗口的开关给初值。
    }
    //在交易状态下,按 9 键,在交易栏和玩家物品栏间交换光标。
    if((st&GameCanvas.GAME_D_PRESSED)!=0){
      if((showBuyGrid)){curSwap=!curSwap;}    }

    //所有的取消都有 3 键
    if((st&GameCanvas.GAME_B_PRESSED)!=0){  pressB(); }//窗口的取消。

    //所有的确认键,都用 1 键;
    //(1) 与npc 说话
    if(hitNpcOk){pressA_NpcSpeak(st);}//与npc 说话的确认。在与NPC相碰撞时才可以确认说话,否则无效。
    //(2) 在打开玩家物品栏时。(包括交易状态)
    if((isShowGrid))
    {    if(curSwap){//在交易状态下,光标在玩家物品栏时,按1就是卖。交易栏没开,光标在玩家物品栏,按1就是使用。
            cur.curPlayerGridAction(st,showBuyGrid);}
         else{//在交易状态下的按键的移动按1就是买。//光标在交易栏中
            cur.curNpcGridAction(st,hitDrugstore, hitSmith );  }
    }

    if((st&GameCanvas.GAME_A_PRESSED)!=0){
      //箱子的碰撞
          int mapId=MyControl.load.backMapId;
          int b=hitBox(box);

          if(b>=0){ cur.playerHitBox(box[b]); }
      //与怪物相遇,按1键就攻击。
           if(mapId!=0)  isWarfare=true;

    }//end press A
  }//end playerAction


///////////

/////////


}//end player












⌨️ 快捷键说明

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