📄 gamescreen.java
字号:
g.drawImage(borderImage,borderX,borderY,Graphics.TOP|Graphics.LEFT);
flushGraphics();
}
private void drawAttr(Graphics g)
{
g.setColor(TEXT_COLOR);
//Font f = Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_SMALL);
g.setFont(SMALL_FONT);
//g.drawString("hp:"+hero.getHp(),10,getHeight()-20,Graphics.TOP|Graphics.LEFT);
g.drawString(
"级"+hero.getLevel()+
" 血"+hero.getHp()+
" 金"+hero.getMoney(),
borderX+8,borderY+134,Graphics.TOP|Graphics.LEFT);
g.drawString("攻"+hero.getAttack()+
" 防"+hero.getDefend()+
" 经"+hero.getExperience(),
borderX+8,borderY+145,Graphics.TOP|Graphics.LEFT);
g.setColor(0xFECCA9);
g.drawString(Integer.toString(hero.getYellowKey()),borderX+109,borderY+132,
Graphics.TOP|Graphics.LEFT);
g.setColor(0xCCCCFE);
g.drawString(Integer.toString(hero.getBlueKey()),borderX+109,borderY+140,
Graphics.TOP|Graphics.LEFT);
g.setColor(0xFE8888);
g.drawString(Integer.toString(hero.getRedKey()),borderX+109,borderY+148,
Graphics.TOP|Graphics.LEFT);
g.setFont(NORMAL_FONT);
}
private void scrollWin()
{
scrollX = hero.getRefPixelX() - winWidth / 2;
scrollY = hero.getRefPixelY() - winHeight / 2;
if(scrollX < 0){
scrollX = 0;
}else if((scrollX + winWidth) > GameMap.MAP_WIDTH){
scrollX = GameMap.MAP_WIDTH - winWidth;
}
if(scrollY < 0){
scrollY = 0;
}else if((scrollY + winHeight) > GameMap.MAP_HEIGHT){
scrollY = GameMap.MAP_HEIGHT - winHeight;
}
// System.out.println("hero.getRefPixelX():"+hero.getRefPixelX()+" hero.getRefPixelY():"+hero.getRefPixelY());
// System.out.println("scrollx:"+scrollX+" scrollY:"+scrollY);
}
public void commandAction(Command c,Displayable d)
{
int x = borderX;
int y = borderY+32;
int w = 128;
int h = 64;
isSaving = true;
g.setColor(BACK_COLOR);
g.fillRect(x,y,w,h);
g.drawImage(messageBoxImage,x,y,Graphics.TOP|Graphics.LEFT);
g.setColor(TEXT_COLOR);
g.drawString("正在存储游戏... ...",x+10,y+20,Graphics.TOP|Graphics.LEFT);
flushGraphics();
save();
//System.out.println("saving...");
stop();
display.setCurrent(menu);
}
public static Image getImage(int type)
{
String name = "";
Image result = null;
switch (type)
{
case IMAGE_BORDER: name = "/border.png";break;
case IMAGE_HERO:name = "/hero"+step+".png";break;
case IMAGE_MAP: name = "/map"+step+".png";break;
case IMAGE_DIALOG_HERO: name = "/dialog_hero.png";break;
case IMAGE_DIALOG_ANGLE: name = "/dialog_angle.png";break;
case IMAGE_DIALOG_THIEF: name = "/dialog_thief.png";break;
case IMAGE_DIALOGBOX: name = "/dialogbox.png";break;
case IMAGE_MESSAGEBOX: name = "/messagebox.png";break;
case IMAGE_BORDER2: name = "/border2.png";break;
case IMAGE_BORDER3: name = "/border3.png";break;
case IMAGE_BORDER4: name = "/border4.png";break;
case IMAGE_DIALOG_PRINCESS: name = "/dialog_princess.png";break;
case IMAGE_DIALOG_BOSS: name = "/dialog_boss.png";break;
case IMAGE_BLUE_GEEZER: name = "/dialog_bluegeezer.png";break;
case IMAGE_RED_GEEZER: name = "/dialog_redgeezer.png";break;
case IMAGE_SPLASH: name = "/splash.png";break;
case IMAGE_GAMEOVER: name = "/gameover.png";break;
}
try
{
result = Image.createImage(name);
}catch(Exception e){System.out.println("can't create image!");}
return result;
}
public boolean fight(int type)
{
//result = false;
if(fightCalc.canAttack(type) == false)return false;
//System.out.println("canattck!(271)");
FightScreen f = new FightScreen(display,this,fightCalc,hero,type);
f.start();
display.setCurrent(f);
gameMap.remove();
return true;
}
private void shop(int type)
{
ShopScreen s = new ShopScreen(display,this,hero,type);
s.start();
display.setCurrent(s);
}
private void jump()
{
if(hero.canJump == false)return;
JumpScreen j = new JumpScreen(display,this,gameMap);
j.start();
display.setCurrent(j);
hero.setFrame(0);
}
private void lookup()
{
if(hero.canLookup == false)return;
LookupScreen l = new LookupScreen(display,this,fightCalc,gameMap.getOrgeArray());
l.start();
display.setCurrent(l);
}
private void dealTask(int type)
{
int curTask = -1;
switch(type){
case GameMap.MAP_ANGLE: curTask = Task.FIND_CROSS;
curDialogImg = IMAGE_DIALOG_ANGLE;
break;
case GameMap.MAP_THIEF: curTask = Task.FIND_AX;
curDialogImg = IMAGE_DIALOG_THIEF;
break;
case GameMap.MAP_PRINCESS:curTask = Task.RESCUE_PRINCESS;
curDialogImg = IMAGE_DIALOG_PRINCESS;
break;
case GameMap.MAP_BLUE_GEEZER:switch(gameMap.curFloorNum){
case 2:curTask = Task.GET_QINGFEND_JIAN;
curDialogImg = IMAGE_BLUE_GEEZER;
//showMessage(this,g,hero.takeGem(GameMap.MAP_SWORD3));
break;
case 5: shop(ShopScreen.SHOP_5_1);break;
case 13:shop(ShopScreen.SHOP_13);break;
case 15:curTask = Task.GET_SHENGGUANG_JIAN;
curDialogImg = IMAGE_BLUE_GEEZER;
break;
}
break;
case GameMap.MAP_RED_GEEZER: switch(gameMap.curFloorNum){
case 2:curTask = Task.GET_HUANGJIN_DUN;
curDialogImg = IMAGE_RED_GEEZER;
//showMessage(this,g,hero.takeGem(GameMap.MAP_SHIELD3));
break;
case 5: shop(ShopScreen.SHOP_5_2);break;
case 12:shop(ShopScreen.SHOP_12);break;
case 15:curTask = Task.GET_XINGGUANG_DUN;
curDialogImg = IMAGE_RED_GEEZER;
break;
}
break;
case GameMap.MAP_ORGE31: curTask = Task.FIGHT_BOSS;
curDialogImg = IMAGE_DIALOG_BOSS;
break;
}
if (curTask == -1) return;
task.execTask(curTask);
}
public void dialog(String[] talk /*,int imgtype*/)
{
int x,y,w,h,
hsplit = 10,vsplit = 10;
int n,start,end,length;
int sectLength = 10;
w = 128;
h = 64;
x = borderX;
y = borderY+64;
//isDialog = true;
//talk circle
for(int i = 0;i < talk.length;i ++){
//for update background
g.setColor(BACK_COLOR);
g.fillRect(0,0,getWidth(),getHeight());
drawAttr(g);
layerManager.paint(g,borderX,borderY);
g.drawImage(borderImage,borderX,borderY,Graphics.TOP|Graphics.LEFT);
if(i % 2 == 0){
drawDialogBox(IMAGE_DIALOG_HERO,
Graphics.TOP|Graphics.LEFT,x,y,w,h);
}else{
drawDialogBox(curDialogImg,
Graphics.TOP|Graphics.LEFT,x,y,w,h);
}
length = talk[i].length();
n = length / sectLength;
start = 0;
end = sectLength;
//split the long string to show
for(int j = 0;j <= n;j += 2){
//if(end + sectLength > length)end = length;
if(j == n)end = length;
g.setColor(BACK_COLOR);
g.fillRect(x + hsplit,y + vsplit,w - 2*hsplit+5,h - 2*vsplit);
g.setColor(TEXT_COLOR);
g.drawString(talk[i].substring(start,end),
x + hsplit,y + vsplit,Graphics.TOP|Graphics.LEFT);
if(end < length){
start += sectLength;
end += sectLength;
if(end >= length)end = length;
g.drawString(talk[i].substring(start,end),
x + hsplit,y + 3*vsplit-5,Graphics.TOP|Graphics.LEFT);
start += sectLength;
end += sectLength;
}
flushGraphics();
waitKeyDown(x,y);
}
//g.drawString(talk[i],0,19,Graphics.TOP|Graphics.LEFT);
//flushGraphics();
//waitKeyDown();
}
//isDialog = false;
}
private void drawDialogBox(int imgType,int anchor,int x,int y,int w,int h)
{
g.setColor(BACK_COLOR);
Image img = getImage(imgType);
g.fillRect(x,y,w,h);
g.drawImage(dialogBoxImage,x,y,Graphics.TOP | Graphics.LEFT);
if(img != null){
if(imgType == IMAGE_DIALOG_HERO){
g.drawImage(img,x,y-64,anchor);
}else{
g.drawImage(img,x+85,y-64,anchor);
}
}
g.setColor(255,255,0);
}
private void waitKeyDown(int x,int y)
{
boolean isflash = true;
int keystate = getKeyStates();
long startTime = 0;
long timeTake = 0;
while((keystate & this.DOWN_PRESSED) == 0)
{
startTime = System.currentTimeMillis();
if(isflash == true){
g.setColor(TEXT_COLOR);
}else{
g.setColor(BACK_COLOR);
}
g.drawString("▼",x+100,y+45,Graphics.TOP | Graphics.LEFT);
flushGraphics();
isflash = !isflash;
keystate = getKeyStates();
timeTake = System.currentTimeMillis() - startTime;
if (timeTake < MILLIS_PER_TICK){
try{
Thread.sleep(MILLIS_PER_TICK - timeTake);
}catch(Exception e){}
}
}
/*while(downPressed == false)
{
try{
Thread.yield();//.sleep(500);
}catch(Exception e){}
}
downPressed = false;*/
}
protected void keyPressed(int keyCode)
{
//int action = getGameAction(keyCode);
switch(keyCode){
case GameCanvas.KEY_NUM1: jump();break;
case GameCanvas.KEY_NUM3: lookup();break;
//case GameCanvas.DOWN: if(isDialog == true)downPressed = true;break;
}
}
private void save()
{
try{
RecordStore recordStore = rms.open();
if(recordStore == null){
System.out.println("save() error!");
return;
}
int col = hero.getRefPixelX() / GameMap.TILE_WIDTH ;
int row = hero.getRefPixelY() / GameMap.TILE_HEIGHT ;
byte[] r1 = hero.encode();
byte[] r2 = {(byte)gameMap.curFloorNum,(byte)gameMap.reachedHighest,
(byte)row ,(byte)col,(byte)hero.getFrame()};
byte[] r3 = task.getTask();
if(recordStore.getNumRecords() <= 0){
recordStore.addRecord(r1,0,r1.length);
recordStore.addRecord(r2,0,r2.length);
recordStore.addRecord(r3,0,r3.length);
for(int i = 0;i < GameMap.FLOOR_NUM;i ++){
recordStore.addRecord(gameMap.getFloorArray(i),0,GameMap.TILE_NUM);
}
}else{
recordStore.setRecord(1,r1,0,r1.length);
recordStore.setRecord(2,r2,0,r2.length);
recordStore.setRecord(3,r3,0,r3.length);
for(int i = 0 ;i < GameMap.FLOOR_NUM ;i ++){
recordStore.setRecord(i+4,gameMap.getFloorArray(i),0,
GameMap.TILE_NUM);
}
}
}catch(Exception e){
System.out.println("save() error::"+e);
}
rms.close();
}
private void load()
{
try{
RecordStore recordStore = rms.open();
if(recordStore == null){
System.out.println("save() error!");
return;
}
byte[] r1 = recordStore.getRecord(1);
byte[] r2 = recordStore.getRecord(2);
byte[] r3 = recordStore.getRecord(3);
hero.decode(r1);
gameMap.curFloorNum = r2[0];
gameMap.reachedHighest = r2[1];
//gameMap.curRow = r2[2];
//gameMap.curCol = r2[3];
hero.setFrame(r2[4]);
task.setTask(r3);
for(int i = 0;i < GameMap.FLOOR_NUM; i ++)
{
gameMap.setFloorArray(i,recordStore.getRecord(i + 4));
}
//update
gameMap.setMap(gameMap.curFloorNum);
hero.setRefPixelPosition(r2[3] * GameMap.TILE_WIDTH + GameMap.TILE_WIDTH / 2,
r2[2] * GameMap.TILE_HEIGHT + GameMap.TILE_HEIGHT / 2);
}catch(Exception e){
System.out.println("load() error::"+e);
}
rms.close();
}
public void end()
{
stop();
EndScreen end = new EndScreen(display,menu);
display.setCurrent(end);
end.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -