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

📄 cur.java

📁 手机RPG游戏
💻 JAVA
字号:
package obj;

import javax.microedition.lcdui.game.*;
import javax.microedition.lcdui.*;
import main.*;
import java.io.*;
import java.util.*;
public class Cur    {


//public int Drugstore[]={20,40,80,80,200,25,50,100,100,500};//药店物品的价格。
public int Smith []={100,90,80,120,150,200,180,160,240,300};//铁匠物品的价格。
private Image Img;
private int imgw;
private int imgh;
private int curx=0;//坐标
private int cury=0;
private int num=0;//第几个物品
  int sx;//x,y移动量
  int sy;
  int speed=11;//每次的移动量。
  int d=4;
  int dx=0,dy=0;//整体的偏移量。
int w,h;//屏幕的宽高
int BuyGridxPos,BuyGridyPos;//交易栏的坐标
int stry;//写字的纵坐标。
int strx;

//****************************
   int playerGridImgW=MyControl.load.gridImg[1].getWidth();//玩家物品栏的宽高
   int playerGridImgH=MyControl.load.gridImg[1].getHeight();
   int playerGridImgx=0;
   int playerGridImgy;

   int Pnum=0;
   int Pspeedx=17;
   int Pspeedy=21;
   int Psx,Psy;
   int Pdx=8,Pdy=7;
   int curPy;//光标坐标
   int curPx=playerGridImgx+Pdx;
   int cpy;
   int cpx;
//*****************

    Goods goods[]=new Goods[30];
     Image goodsImg;
    int gs=17;//第gs个是最后一个药品了
public boolean findGood=false;//发现得到物品。
public boolean gridOverstep=false;//物品栏过满。没有空地方了。
    int nn=-1;
    int findn=0;//计数器
   int findtime=15;//发现得到物品。的显示时间
//***************
    Vector gvs;//玩家物品栏
    int maxVector=16;
    int  pMoney;
  //////////////////////////////////
  //这是在交易栏上的从标
  //////////////////////////////
  public Cur(int buyGridx,int buyGridy,int boardw,int boardh,int playerMoney) {

    w=boardw;
    h=boardh;
    BuyGridxPos=buyGridx;
    BuyGridyPos=buyGridy;

    playerGridImgy=h-playerGridImgH;//玩家物品栏的纵坐标。
    curPy=playerGridImgy+Pdy;
    cpy=curPy;
    cpx=curPx;

     curInit(buyGridx,buyGridy);
     pMoney=playerMoney;
     madeGoods();//物品数组。
     gvs=new Vector();
     for(int i=0;i<maxVector;i++){//给物品栏加入元素。
     gvs.addElement(new Goods());
   }
  }

public Vector getVector(){
return gvs;
  }
private void curInit(int x,int y){
  dx=x+5;dy=y+3;
  curx=dx;cury=dy;
  Img=MyControl.load.gridImg[2];//交易栏的图片。
  imgw=Img.getWidth();
  imgh=Img.getHeight();
  stry=dy+4*(speed)+3*d;
  strx=BuyGridxPos+5;
 }

///////////////////////////////
private void madeGoods(){//物品
   for(int i=0;i<goods.length;i++){goods[i]=new Goods(); }//初始化每一个对象。
//  Goods goods[]=new Goods[30];

try { goodsImg = Image.createImage("/res/goods.png");}
catch (IOException ex) {System.out.println("goods.png load defeat!");}
String goodNames[]={//名字
       "绿石","铜戒","小红","小蓝","辩认",
       "红石","银戒","中红","中蓝","回城",
       "蓝石","金戒","大红","大蓝","骷髅",
       "粉石","钻戒","战甲","头盔","钢靴",
       "战手","长剑","战盾","战盔","战靴",
       "护手","青锋","莫邪","腰带","古书",
   };
int goodPrice[]={//价格
          100,50 ,20 ,25 ,80 ,
          200,100,40 ,50 ,100,
          300,150,80 ,100,200,
          400,200,200,80 ,100,
          100,50 ,150,160,200,
          50 ,100,200,100,800,
      };
int goodN[]={//拥有数量
             0,0,0,0,0,
             0,0,0,0,0,
             0,0,0,0,0,
             0,0,0,0,0,
             0,0,0,0,0,
             0,0,0,0,0,
         };
    for(int i=0;i<goods.length;i++){  //初始化物品的数组。
      goods[i].name=goodNames[i];//名字
      goods[i].price=goodPrice[i];//价格
      goods[i].n=goodN[i];//数量
      goods[i].number=i;//编号
      goods[i].img=Image.createImage(goodsImg,//物品图片。
                                     (i%5)*goods[i].imgw,
                                     (i/5)*goods[i].imgh,
                                     goods[i].imgw,
                                     goods[i].imgh,0);
         }

      for(int i=0;i<gs;i++){//药店物品的坐标
      goods[i].imgx=(i%5)*(goods[i].imgw+d)+dx;
      goods[i].imgy=(i/5)*(goods[i].imgh+d)+dy;
      }
      for(int i=0;i<goods.length-gs;i++){//武器店物品的坐标。
      goods[i+gs].imgx=(i%5)*(goods[i+gs].imgw+d)+dx;
      goods[i+gs].imgy=(i/5)*(goods[i+gs].imgh+d)+dy;
      }
 }
////////////////////////////////
  public void curNpcGridAction(int st,boolean hitDrugstore, boolean hitSmith){//在交易物品栏的移动。
     {sx=0;sy=0;}
    if((st&GameCanvas.RIGHT_PRESSED)!=0){//右
      if(curx+1<=imgw-speed-dx)    { sx=speed+d;num++;}
    }
    if((st&GameCanvas.LEFT_PRESSED)!=0){//左
      if(curx-1>=dx)    { sx=-(speed+d);num--;}
    }
    if((st&GameCanvas.UP_PRESSED)!=0){//上
      if(cury-1>=dy)    {sy=-(speed+d);num-=5;}
    }
    if((st&GameCanvas.DOWN_PRESSED)!=0){//下
      if(cury+1<=imgh-dy) { sy=(speed+d);num+=5;}
    }
    curx+=sx;
    cury+=sy;
    if((st&GameCanvas.GAME_A_PRESSED)!=0){//按 1 键确认买物品

      if((hitDrugstore)&&(num<gs)){ goodsBuy(num);}//在药店买物品
      if((hitSmith)&&(num<goods.length-gs)){goodsBuy(num+gs);}//在铁匠买物品

    }
  }
////////////
private void goodsBuy(int Num){//(买物品的实现)
    int n=onceBuy(Num);

       if(n<0){//如果物品栏中没这个物品。
             for(int i=0;i<gvs.size();i++){

                Goods gd=(Goods)gvs.elementAt(i);
                   if(gd.n==0)//如果这个物品栏是空的,就让它等于当前选中的。并且加 1
                     {if( pMoney-goods[Num].price>=0)//有钱吗
                       { ((Goods)gvs.elementAt(i)).set(goods[Num]);//将(Goods)gvs.elementAt(i)给值为goods[num]
                         ((Goods)gvs.elementAt(i)).n++;
                         pMoney-=((Goods)gvs.elementAt(i)).price;//金钱的变化。
                         }

                         return;}

                   if(i==gvs.size()-1){

                     return;}//物品栏没有空的地方了。
                }
       }
       else {//有这个物品了。
             if(((Goods)gvs.elementAt(n)).n<99){
                 if( pMoney-((Goods)gvs.elementAt(n)).price>=0){//有钱吗
                     pMoney-=((Goods)gvs.elementAt(n)).price;//金钱的变化。
                     ((Goods)gvs.elementAt(n)).n++;
                     }
              }
       }
  }
////////////////////
//测物品栏中有没有当前选取的物品。//有这个物品 >=0; 没有为 -1;
  private int onceBuy(int Num){
    for(int i=0;i<gvs.size();i++){
    Goods gd=(Goods)gvs.elementAt(i);
    if(((Goods)gvs.elementAt(i)).name.equals(goods[Num].name)){return i;}
    }
    return -1;
  }
//*****************************************************************************************************************
/////////////////////////////////////////////////////////////////////////////////////
  //
  //这是在玩家物品栏上的坐标。
  ////////////////////////////////////////////////////
  public void curPlayerGridAction(int st,boolean showBuyGrid){//在玩家的物品栏的光标移动

      {Psx=0;Psy=0;}
     if((st&GameCanvas.RIGHT_PRESSED)!=0){
       if(curPx+1<=playerGridImgW-Pspeedx-Pdx)    { Psx=Pspeedx;Pnum++;}
     }
     if((st&GameCanvas.LEFT_PRESSED)!=0){
       if(curPx-1>=Pdx)    { Psx=-Pspeedx;Pnum--;}
     }
     if((st&GameCanvas.UP_PRESSED)!=0){
       if(curPy-1>=h-playerGridImgH+Pdy)    {Psy=-Pspeedy;Pnum-=4;}
     }
     if((st&GameCanvas.DOWN_PRESSED)!=0){
       if(curPy+1<=h-Pspeedy) { Psy=Pspeedy;Pnum+=4;}
     }
     curPx+=Psx;
     curPy+=Psy;
     if((st&GameCanvas.GAME_A_PRESSED)!=0){ //光标在玩家物品栏时,按 1 键卖物品或使用物品。

       if((((Goods)gvs.elementAt(Pnum)).n>0)&&(Pnum<goods.length))//有物品时
             if(showBuyGrid)//显示交易栏时才可以卖。
              {pMoney+=((Goods)gvs.elementAt(Pnum)).price/2;//卖回时,价格是原来的一半
              ((Goods)gvs.elementAt(Pnum)).n--;
              }
              else{//玩家使用物品。
              MyControl.gameBoard.player.changPlayerAttribute(gvs,Pnum);
              }

   }//end (st&GameCanvas.GAME_A_PRESSED)!=0
   }

//////////////////////////////////////
public int getPlearMoney(){
  return pMoney;
  }

  public int getNum(){
    return this.num;
  }
  public void setNum(int n){
    this.Pnum=n;
    this.num=n;
  }
  public void setCurx() {
    curPx=cpx;
    this.curx = dx;
  }
  public void setCury() {
    curPy= cpy;
    this.cury = dy;
  }
  private  void curNpcGridShow(Graphics g ){
    g.setColor(0xff0000);
    g.drawRect(curx,cury,speed,speed);
  }

///////////////////////////
  public void DrugstoreGrid(Graphics g,boolean curSwap){//显示药店的交易栏
    showBuyGrid(g);//交易栏
    for(int i=0;i<gs;i++){//加物品
      g.drawImage(goods[i].img,goods[i].imgx,goods[i].imgy,Graphics.LEFT|Graphics.TOP);
    }
   if(num<gs) {//加物品的价格。
     g.setColor(0xffff00);
     g.drawString(goods[num].name+":"+goods[num].price+"元。",strx,stry,0);
   }
   if(!curSwap){curNpcGridShow(g);}// 光标。
  }
///////////////////
  public void SmithGrid(Graphics g,boolean curSwap){//显示铁匠的交易栏
    showBuyGrid(g);//交易栏

      for(int i=0;i<goods.length-gs;i++){//加物品
        g.drawImage(goods[i+gs].img,goods[i+gs].imgx,goods[i+gs].imgy,Graphics.LEFT|Graphics.TOP);
      }
      if(num<goods.length-gs) {//加物品的价格。
        g.setColor(0xffff00);
        g.drawString(goods[num+gs].name+":"+goods[num+gs].price+"元。",strx,stry,0);
      }
      if(!curSwap){curNpcGridShow(g);}
  }
  /////////////
  private void showBuyGrid(Graphics g){//显示交易栏
    Image buyGridImg=MyControl.load.gridImg[2];
    g.drawImage(buyGridImg,BuyGridxPos,BuyGridyPos,Graphics.LEFT|Graphics.TOP);
  }


/////////////////////////
    public void PlayerGrid(Graphics g,boolean curSwap){//玩家的物品栏
      Image grid1=MyControl.load.gridImg[1];//物品栏
      int grid1x=0;
      int grid1y=h-grid1.getHeight();
      g.drawImage(grid1,grid1x,grid1y,Graphics.LEFT|Graphics.TOP);

     int strx=playerGridImgx+9;//物品坐标
     int stry=playerGridImgy+15;
     int rs=17;//加到x上
     int cs=21;//加到y上
     g.setColor(0xffffff);

     for(int i=0;i<gvs.size();i++){//画物品
       Goods good=(Goods)gvs.elementAt(i);
       if(good.n!=0)//如果拥有物品的个数为0,则不画。
       { g.drawString(Integer.toString(good.n),strx+(i%4)*rs,stry+i/4*cs,0);//拥有物品的个数。
         g.drawImage(good.img,strx+(i%4)*rs,stry+i/4*cs-good.imgh+3,Graphics.TOP|Graphics.LEFT);//画物品。
       }
     }
     if(curSwap){g.setColor(0xff0000);//光标,,,,光标如果在交易栏中,则物品栏中不显示。
      g.drawRect(curPx,curPy,speed,speed);}
  }

//////////////////////
public void playerHitBox(Box box){//与箱子相碰撞得到物品。
    if(box.isopen){return;}//箱子打开过
    else{       box.isopen=true;
                findGood=true;
                this.findGoods();

              }
}
////////////////////

//  int findn=0;//计数器
//   int findtime=10;//发现得到物品。的显示时间
public void findGoodShow(Graphics g){

  if(findGood){//发现物品时说话。
    if(gridOverstep){//物品满了。
          g.setColor(0xff0000);
          g.drawString("发现了"+goods[nn].name+",但我包里没地方了!",20,h-25-findn,0);
          findn++;
              if(findn%findtime==0){
                    findGood=false;
                    gridOverstep=false;
                    nn=-1;
                    findn=0;
                  }
    }
    else{
          g.setColor(0x0000ff);
               g.drawString("太幸运了,得到了"+goods[nn].name+"!",20,h-25-findn,0);


          findn++;
              if(findn%findtime==0){
                    findGood=false;
                    nn=-1;
                    findn=0;
                  }
        }

  }
  }
///////////
//  public void playerBooty(Player player,Graphics g){
//    if(player.playerBooty){
//    findGoods();
//    findGood=true;
//    player.playerBooty=false;
//    }
//
//   // (player.playerLevel+1)*monster.mEX;//经验
//  }
///////////
  public void findGoods(){//发现并得到物品。
  Random br=new Random();
  nn=br.nextInt(goods.length);
  int n=onceBuy(nn);//测出原来有没有这个物品。
          if(n<0){//如果物品栏中没这个物品。
                   for(int i=0;i<gvs.size();i++){
                      Goods gd=(Goods)gvs.elementAt(i);
                         if(gd.n==0)//如果这个物品栏是空的,就让它等于当前选中的。并且加 1
                             { ((Goods)gvs.elementAt(i)).set(goods[nn]);//将(Goods)gvs.elementAt(i)给值为goods[num]
                               ((Goods)gvs.elementAt(i)).n++;
                               gridOverstep=false;
                               return;
                             }
                      if(i==gvs.size()-1){
                        gridOverstep=true;//没这个物品,但物品栏没空地方,报满。
                        return;}//物品栏没有空的地方了。
                      }
             }
             else {//有这个物品了。
                   if(((Goods)gvs.elementAt(n)).n<99){
                          ((Goods)gvs.elementAt(n)).n++;
                          gridOverstep=false;
                    }
                    else{gridOverstep=true;}//有这个物品,但数量大于99报满
             }

  }
//////////////


}

⌨️ 快捷键说明

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