📄 cur.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 + -