?? shopscreen.java
字號:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class ShopScreen extends GameCanvas
implements Runnable
{
//the number after the SHOP_ is the floor num that shop on
public static final int SHOP_3 = 0,
SHOP_5_1 = 1,
SHOP_5_2 = 2,
SHOP_11 = 3,
SHOP_12 = 4,
SHOP_13 = 5;
private Display display;
private GameScreen gameScreen;
private HeroSprite hero;
private boolean isShopping = false;
//for showing different font color when select a item and this trade is success
private boolean tradeSuccess = false;
//hold number of menu items
private int itemNum = 4;
private int curItem;
//private Graphics g;
//hold the space of each item
private int split = 20;
//hold the position and size of item
private int x,// = gameScreen.borderX,
y,// = gameScreen.borderY,
w,h;
private Image borderImage = GameScreen.getImage(GameScreen.IMAGE_BORDER2);
private static final String[][] menuList =
{
{"加800滴血","加攻4","加防4","離開商店"},//SHOP_3
{"提升一級(需要100點)","增加攻擊5(需要30點)","增加防御5(需要30點)","離開商店"},//SHOP_5_1
{"購買一把黃鑰匙($ 10)","購買一把藍鑰匙($ 50)","購買一把紅鑰匙($ 100)","離開商店"},//SHOP_5_2
{"加4000滴血","加攻20","加防20","離開商店"},//SHOP_11
{"賣出一把黃鑰匙($ 7)","賣出一把藍鑰匙($ 35)","賣出一把紅鑰匙($ 70)","離開商店"},//SHOP_12
{"提升三級(需要270點)","增加攻擊17(需要95點)","增加防御17(需要95點)","離開商店"}//SHOP_13
};
private static final String[] titleList =
{
"歡迎來到怪物商店,你僅需花25個金幣,就可增加能力!",//SHOP_3
"你好,英雄的人類,只要你有足夠的經驗,我就可以讓你變得更強大!",//SHOP_5_1
"相信你一定有特殊的需求,只要你有錢,我就可以滿足你。",//SHOP_5_2
"歡迎來到怪物商店,你僅需花100個金幣,就可增加能力!",//SHOP_11
"哦,歡迎你的到來,如果你手里缺少金幣,我可以幫助你!",//SHOP_12
"你好,英雄的人類,只要你有足夠的經驗,我就可以讓你變得更強大!"//SHOP_13
};
/*private static final int[] cost =
{25,};*/
private String[] menu;
private int curShop;
public ShopScreen(Display display,GameScreen gameScreen,
HeroSprite hero,int shop)
{
super(true);
this.display = display;
this.gameScreen = gameScreen;
this.hero = hero;
curShop = shop;
menu = menuList[curShop];
itemNum = menu.length;
//g = getGraphics();
this.setFullScreenMode(true);
//System.out.println("shop:"+curShop);
}
private void next()
{
if((curItem+1)<itemNum)curItem ++;
else curItem = 0;
}
private void pre()
{
if((curItem - 1) >= 0) curItem --;
else curItem = itemNum - 1;
}
private void render(Graphics g)
{
g.setColor(0,0,0);
g.fillRect(0,0,getWidth(),getHeight());
g.drawImage(borderImage,gameScreen.borderX,gameScreen.borderY,
Graphics.TOP | Graphics.LEFT);
drawTile(g);
drawItem(g);
y = curItem * h + split * (curItem + 1)+gameScreen.borderY + 45;
//g.drawRect(x,y,w,h);
if(tradeSuccess == true){
g.setColor(255,0,0);
tradeSuccess = false;
}else {
g.setColor(255,200,0);
}
g.drawString(menu[curItem],gameScreen.borderX + 15,y,
Graphics.TOP | Graphics.LEFT);
//g.drawString("$:"+hero.getMoney()+" hp:"+hero.getHp()+" d:"+hero.getDefend()+"a:"+hero.getAttack(),
//0,130,Graphics.TOP | Graphics.LEFT);
flushGraphics();
}
private void drawItem(Graphics g)
{
g.setColor(0x985415);
for(int i = 0;i < itemNum; i ++)
{
y = i * h + split * (i + 1) + gameScreen.borderY + 45;
g.drawString(menu[i],gameScreen.borderX + 15,y,Graphics.TOP | Graphics.LEFT);
}
}
private void drawTile(Graphics g)
{
int end,start;
int sectLength = 10;
int length = titleList[curShop].length();
int n = length / sectLength;
start = 0;
end = sectLength;
g.setColor(GameScreen.TEXT_COLOR);
for(int j = 0;j <= n;j ++){
//if(end + sectLength > length)end = length;
if(j == n)end = length;
g.drawString(titleList[curShop].substring(start,end),
gameScreen.borderX+8,gameScreen.borderY + 12*j + 8,Graphics.TOP|Graphics.LEFT);
if(end < length){
start += sectLength;
end += sectLength;
}
}
}
private void tick()
{
int keyState = getKeyStates();
if ((keyState & this.DOWN_PRESSED) != 0){
next();
}else if((keyState & UP_PRESSED) != 0){
pre();
}else if ((keyState & this.FIRE_PRESSED) != 0){
dealItem();
}
}
private void dealItem()
{
switch(curShop){
case SHOP_3: shop_0();break;
case SHOP_5_1:shop_5_1();break;
case SHOP_5_2:shop_5_2();break;
case SHOP_11: shop_11();break;
case SHOP_12: shop_12();break;
case SHOP_13: shop_13();break;
}
}
private void shop_0()
{
if(curItem == 3){stop();return;}
else if(hero.getMoney() >= 25){
switch(curItem)
{
case 0: hero.addHp(800);break;
case 1: hero.addAttack(4);break;
case 2: hero.addDefend(4);break;
//case 3: stop();break;
}
hero.cutMoney(25);
tradeSuccess = true;
}
}
private void shop_5_1()
{
if(curItem == 3){stop();return;}
switch(curItem)
{
case 0: if(hero.getExperience() >= 100){
hero.levelUp(1);
hero.cutExperience(100);
tradeSuccess = true;
}
break;
case 1: if(hero.getExperience() >= 30){
hero.addAttack(5);
hero.cutExperience(30);
tradeSuccess = true;
}
break;
case 2: if(hero.getExperience() >= 30){
hero.addDefend(5);
hero.cutExperience(30);
tradeSuccess = true;
}
break;
}
}
private void shop_5_2()
{
if(curItem == 3){stop();return;}
switch(curItem)
{
case 0: if(hero.getMoney() >= 10){
hero.addYellowKey();
hero.cutMoney(10);
tradeSuccess = true;
}
break;
case 1: if(hero.getMoney() >= 50){
hero.addBlueKey();
hero.cutMoney(50);
tradeSuccess = true;
}
break;
case 2: if(hero.getMoney() >= 100){
hero.addRedKey();
hero.cutMoney(100);
tradeSuccess = true;
}
break;
}
}
private void shop_11()
{
if(curItem == 3){stop();return;}
else if(hero.getMoney() >= 100){
switch(curItem)
{
case 0: hero.addHp(4000);break;
case 1: hero.addAttack(20);break;
case 2: hero.addDefend(20);break;
//case 3: stop();break;
}
hero.cutMoney(100);
tradeSuccess = true;
}
}
private void shop_12()
{
if(curItem == 3){stop();return;}
switch(curItem)
{
case 0: if(hero.getYellowKey() >= 1){
hero.cutYellowKey();
hero.addMoney(7);
tradeSuccess = true;
}
break;
case 1: if(hero.getBlueKey() >= 1){
hero.cutBlueKey();
hero.addMoney(35);
tradeSuccess = true;
}
break;
case 2: if(hero.getRedKey() >= 1){
hero.cutRedKey();
hero.addMoney(70);
tradeSuccess = true;
}
break;
}
}
private void shop_13()
{
if(curItem == 3){stop();return;}
switch(curItem)
{
case 0: if(hero.getExperience() >= 270){
hero.levelUp(3);
hero.cutExperience(270);
tradeSuccess = true;
}
break;
case 1: if(hero.getExperience() >= 95){
hero.addAttack(17);
hero.cutExperience(95);
tradeSuccess = true;
}
break;
case 2: if(hero.getExperience() >= 95){
hero.addDefend(17);
hero.cutExperience(95);
tradeSuccess = true;
}
break;
}
}
public void start()
{
isShopping = true;
Thread t = new Thread(this);
t.start();
}
private void stop()
{
isShopping = false;
display.setCurrent(gameScreen);
}
public void run()
{
Graphics g = getGraphics();
long startTime = 0;
long timeTake = 0;
while(isShopping == true)
{
startTime = System.currentTimeMillis();
tick();
render(g);
timeTake = System.currentTimeMillis() - startTime;
if (timeTake < GameScreen.MILLIS_PER_TICK)
{
try
{
Thread.sleep(GameScreen.MILLIS_PER_TICK - timeTake);
} catch(InterruptedException e){System.out.println(e);}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -