?? lookupscreen.java
字號:
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class LookupScreen extends GameCanvas
implements Runnable
{
private Display display;
private GameScreen gameScreen;
private FightCalc fightCalc;
private int[] orgeArray;
private boolean isLookuping = false;
//hold the pointer to page
private int first = 0,last = 0;
//hold the number of orges
private int length;
//hold the item number of a page
private int itemNum = 6;
//hold the position and size of item
private int x,y,
h = 20,
split = 3;
private boolean upPressed,downPressed;
private Image orgeImage = GameScreen.getImage(GameScreen.IMAGE_MAP);
private Image borderImage = GameScreen.getImage(GameScreen.IMAGE_BORDER3);
public LookupScreen(Display display,GameScreen gameScreen,
FightCalc fightCalc,int[] orgeArray)
{
super(false);
this.display = display;
this.gameScreen = gameScreen;
this.fightCalc = fightCalc;
this.orgeArray = orgeArray;
length = orgeArray[GameMap.TILE_NUM - 1];
last = length;
if(length > itemNum)last = itemNum;
this.setFullScreenMode(true);
}
private void nextPage()
{
if(last == length){
return;
}else if((length - last) > itemNum){
first = last;
last = first + itemNum;
}else{
first = last;
last = length;
}
}
private void prePage()
{
if(first == 0){
return;
}else{
first = first - itemNum;
last = first + itemNum;
}
}
private int[] calcXY(int index)
{
int[] result = {0,0};
int row = index / 11;
int col = index - row * 11;
//int col = index % 11;
//int row = index - col * 12;
result[0] = col * 16;
result[1] = row * 16;
return result;
}
private void drawItem(Graphics g)
{
int index;
int[] orgeAttr;
int damage;
String damageStr;
g.setFont(GameScreen.SMALL_FONT);
for(int i = first;i < last;i ++)
{
index = i % itemNum;
y = index * h + split * (index + 1) + gameScreen.borderY;
x = gameScreen.borderX;
orgeAttr = fightCalc.getOrgeAttr(orgeArray[i]);
damage = fightCalc.getHeroDamage(orgeArray[i]);
if(damage == -1){
damageStr = " ?";
}else{
damageStr = Integer.toString(damage);
}
//draw orge pic
int[] srcXY = calcXY(orgeArray[i]-1);
//System.out.println("orge:"+orgeArray[i]);
g.drawRegion(orgeImage,srcXY[0],srcXY[1],16,16,Sprite.TRANS_NONE,
x+5,y+3,Graphics.TOP|Graphics.LEFT);
g.setColor(255,200,100);//(0x985415);
g.drawRect(x+5,y+3,15,15);
g.setColor(GameScreen.TEXT_COLOR);
/*g.drawString("名稱:"+fightCalc.getOrgeName(orgeArray[i])+
"血:"+orgeAttr[FightCalc.HP]+
"攻擊:"+orgeAttr[FightCalc.ATTACK],
//"損耗:"+damage,
x+22,y,Graphics.TOP|Graphics.LEFT);
g.drawString("防御:"+orgeAttr[FightCalc.DEFEND]+
"金錢:"+orgeAttr[FightCalc.MONEY]+
"經驗:"+orgeAttr[FightCalc.EXPERIENCE]+
"損耗:"+damageStr,
x+22,y+11,Graphics.TOP|Graphics.LEFT);*/
g.drawString(
"血"+orgeAttr[FightCalc.HP]+
" 攻"+orgeAttr[FightCalc.ATTACK]+
" 金"+orgeAttr[FightCalc.MONEY],
x+22,y,Graphics.TOP|Graphics.LEFT);
g.drawString("防"+orgeAttr[FightCalc.DEFEND]+
" 經"+orgeAttr[FightCalc.EXPERIENCE]+
" 損"+damageStr,
x+22,y+11,Graphics.TOP|Graphics.LEFT);
}
}
private void render(Graphics g)
{
g.setColor(0x000000);
g.fillRect(0,0,getWidth(),getHeight());
drawItem(g);
g.drawImage(borderImage,
gameScreen.borderX,gameScreen.borderY,Graphics.TOP | Graphics.LEFT);
g.setColor(255,250,0);
if(first != 0){
/* if(upPressed == true){
g.setColor(255,0,0);
upPressed = false;
}*/
g.drawString("上一頁",gameScreen.borderX + 22,gameScreen.borderY + 143,Graphics.TOP|Graphics.LEFT);
}
//g.setColor(0,255,0);
if(last != length){
/* if(downPressed == true){
g.setColor(255,0,0);
downPressed = false;
}*/
g.drawString("下一頁",gameScreen.borderX + 80,gameScreen.borderY + 143,Graphics.TOP|Graphics.LEFT);
}
flushGraphics();
}
private void tick()
{
int keyState = getKeyStates();
if ((keyState & this.DOWN_PRESSED) != 0){
nextPage();downPressed = true;
}else if((keyState & UP_PRESSED) != 0){
prePage();upPressed = true;
}else if ((keyState & this.FIRE_PRESSED) != 0){
stop();
}
}
public void start()
{
isLookuping = true;
Thread t = new Thread(this);
t.start();
//nextPage();
}
private void stop()
{
isLookuping = false;
display.setCurrent(gameScreen);
}
public void run()
{
Graphics g = getGraphics();
long startTime = 0;
long timeTake = 0;
while(isLookuping == 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);}
}
}
}
protected void keyPressed(int keyCode)
{
if(keyCode == GameCanvas.KEY_NUM3)stop();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -