?? 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 + -