import org.kwis.msp.lcdui.*;
import java.io.*;
public class MainCard extends Card implements Runnable{
Thread mThread = new Thread(this);
Display dis = Display.getDefaultDisplay();
Graphics g;
public final byte MAINSTATE_MENU = 0;
public final byte MAINSTATE_GAME = 1;
public final byte MENU_STARTGAME = 0;
public final byte MENU_CONTINUEGAME = 1;
public final byte MENU_EXPGAME = 2;
public final byte MENU_OPTION = 3;
public final byte MENU_EXIT = 4;
public final byte MENU_NUM = 5;
public final byte LEFT = 0;
public final byte RIGHT = 1;
private final byte GROUND_HEIGHT = 20;
private final byte HERO_WIDTH = 21;
private final byte HERO_HEIGHT = 26;
private final byte HERO_SPEED=3;
private final byte HERO_JUMP_FRAME=6;
private final byte HERO_JUMP_PIXEL=5;
int width, height;
byte mainState;
int menuCursor;
private int heroX;
private int heroY;
private int heroDirection;
private int heroSpeed;
private int heroFrame;
private boolean bHeroJump;
Image imgHero[] = new Image[6];
public final String MENU_TEXT[] = {"게임시작","이어하기","게임설명","환경설정","게임종료"};
public MainCard(){
width = getWidth();
height = getHeight();
System.out.println("width->"+width+" height->"+height);
setMainState(MAINSTATE_MENU);
mThread.start();
}
public void run(){
while(true){
repaint();
try{Thread.sleep(100);}catch (InterruptedException ex){}
}
}
public void paint(Graphics g){
this.g = g;
switch(mainState){
case MAINSTATE_MENU:
showMenu();
break;
case MAINSTATE_GAME:
showGame();
break;
}
}
public void showMenu(){
String text;
g.setColor(255, 255, 255);
g.fillRect(0, 0, width, height);
g.setColor(0, 0, 0);
for(int i=0; i<MENU_NUM; i++){
if(i==menuCursor) text = "-> "+MENU_TEXT[i];
else text = MENU_TEXT[i];
g.drawString(text, width/2, 20+14*i, Graphics.HCENTER|Graphics.TOP);
}
}
public void showGame(){
g.setColor(0, 0, 0);
g.fillRect(0, 0, width, height);
g.setColor(255, 255, 255);
g.fillRect(0, height-GROUND_HEIGHT, width, GROUND_HEIGHT);
drawHero();
gameUpdate();
}
private void gameUpdate() {
// TODO Auto-generated method stub
heroUpdate();
}
private void heroUpdate() {
// TODO Auto-generated method stub
heroX+=heroSpeed;
if(bHeroJump){
if(heroFrame!=0 && heroY==height-GROUND_HEIGHT-HERO_HEIGHT/2)
bHeroJump=false;
else if(heroFrame<HERO_JUMP_FRAME) heroY-=HERO_JUMP_PIXEL;
else if(heroFrame>HERO_JUMP_FRAME) heroY+=HERO_JUMP_PIXEL;
}
if(heroSpeed!=0||bHeroJump) heroFrame++;
}
public void drawHero(){
// g.drawImage(imgHero, heroX-HERO_WIDTH/2, heroY-HERO_HEIGHT/2, 0);
if(bHeroJump)
g.drawImage(imgHero[3*heroDirection+2], heroX-HERO_WIDTH/2, heroY-HERO_HEIGHT/2, 0);
else g.drawImage(imgHero[3*heroDirection+(heroFrame/3)&2], heroX-HERO_WIDTH/2, heroY-HERO_HEIGHT/2, 0);
}
public boolean keyNotify(int type, int key){
if(type == EventQueue.KEY_PRESSED){
switch(mainState){
case MAINSTATE_MENU:
keyMenu(key);
break;
case MAINSTATE_GAME:
keyGame(key);
break;
}
}
repaint();
return true;
}
public int getGameAction(int key){
if((key >= EventQueue.KEY_NUM0 && key < EventQueue.KEY_NUM9) || key == EventQueue.KEY_POUND || key == EventQueue.KEY_STAR)
return key;
else
return Display.getGameAction(key);
// return dis.getGameAction(key);
}
public void keyMenu(int key){
switch(getGameAction(key)){
case EventQueue.UP:
case EventQueue.LEFT:
menuCursor--;
if(menuCursor < 0)
menuCursor = MENU_NUM-1;
break;
case EventQueue.DOWN:
case EventQueue.RIGHT:
menuCursor++;
if(menuCursor == MENU_NUM)
menuCursor = 0;
break;
case EventQueue.FIRE:
switch(menuCursor){
case MENU_STARTGAME:
setMainState(MAINSTATE_GAME);
loadGame();
break;
case MENU_CONTINUEGAME:
break;
case MENU_EXPGAME:
break;
case MENU_OPTION:
break;
case MENU_EXIT:
break;
}
break;
}
}
public void keyGame(int key){
switch(getGameAction(key)){
case EventQueue.UP:
case EventQueue.FIRE:
if(bHeroJump) break;
bHeroJump=true;
heroFrame=0;
break;
case EventQueue.DOWN:
break;
case EventQueue.LEFT:
if(bHeroJump) break;
if(heroDirection!=LEFT) heroSpeed=0;
else if(heroSpeed>HERO_SPEED*(-2)) heroSpeed-=HERO_SPEED;
heroDirection=LEFT;
break;
case EventQueue.RIGHT:
if(bHeroJump) break;
if(heroDirection!=RIGHT) heroSpeed=0;
else if(heroSpeed < HERO_SPEED*(2)) heroSpeed+=HERO_SPEED;
heroDirection=RIGHT;
break;
}
}
public void setMainState(byte state){
mainState = state;
switch(mainState){
case MAINSTATE_MENU:
initMenu();
break;
case MAINSTATE_GAME:
initGame();
break;
}
}
public void loadGame(){
try {
for(int i=0;i<6;i++) imgHero[i] = Image.createImage("img/hero"+(i+1)+".png");
}catch(IOException e){}
}
public void unloadGame(){
for(int i=0;i<6;i++) imgHero[i] = null;
System.gc();
}
public void initMenu(){
menuCursor = 0;
}
public void initGame(){
heroX = width/2;
heroY = height - GROUND_HEIGHT - HERO_HEIGHT/2;
heroDirection = RIGHT;
heroSpeed = 0;
heroFrame = 0;
bHeroJump=false;
}
}
Posted by rCan