📄 maincanvas.java
字号:
package res;
import java.io.IOException;
import javax.microedition.lcdui.*;
import com.nokia.mid.ui.FullCanvas;
public class MainCanvas extends FullCanvas implements Runnable {
int gameState;// 游戏状态
boolean isRunning;
boolean isCurrentDisplay;
boolean isKeyPressed;
boolean isThreadStarting;
int keyCode;
Thread thread;
int x, y;
static Image Background, Bicon, Character, Faction;
boolean bFalgMove;
int rgbDate[];
int BackgroundNumber, CharacterXNumber, CharacterYNumber, BiconNumberCol,
FactionNumber;
int ColorCounter;
ModelMidlet midlet;
static final int SCREEN_WIDTH = 176;// 屏幕宽度
static final int SCREEN_HEIGHT = 208;// 屏幕高度
public MainCanvas(ModelMidlet midlet) {
this.midlet = midlet;
thread = new Thread(this);
startThread();
}
public void startThread() {
isRunning = true;
thread.start();
isThreadStarting = true;
gameState = GS_INIT;
}
public void paint(Graphics g) {
switch (gameState) {
case GS_LOGO:
drawLogo(g);
break;
case GS_INIT:
drawInit(g);
break;
case GS_MAIN:
drawMain(g);
break;
case GS_PLAY:
drawPlay(g);
break;
case GS_HELP:
drawHelp(g);
break;
case GS_ABOUT:
drawAbout(g);
break;
}
}
public void run() {
while (isRunning) {
if (isCurrentDisplay) {
switch (gameState) {
case GS_LOGO:
procLogo();
break;
case GS_INIT:
procInit();
break;
case GS_MAIN:
procMain();
break;
case GS_PLAY:
procPlay();
break;
case GS_HELP:
procHelp();
break;
case GS_EXIT:
procExit();
break;
}
repaint();
sleep(SLEEP_TIME);
} else {
sleep(LONG_SLEEP_TIME);
}
}
}
public void keyPressed(int keyCode) {
isKeyPressed = true;
this.keyCode = getKeyCode(keyCode);
}
public void keyReleased(int keyCode) {
isKeyPressed = false;
}
public int getKeyCode(int keyCode) {
int key = getGameAction(keyCode);
switch (key) {
case UP:
return KB_UP;
case DOWN:
return KB_DOWN;
case LEFT:
return KB_LEFT;
case RIGHT:
return KB_RIGHT;
default:
break;
}
switch (keyCode) {
case KEY_NUM0:
return KB_0;
case KEY_NUM1:
return KB_1;
case KEY_NUM2:
return KB_2;
case KEY_NUM3:
return KB_3;
case KEY_NUM4:
return KB_4;
case KEY_NUM5:
return KB_5;
case KEY_NUM6:
return KB_6;
case KEY_NUM7:
return KB_7;
case KEY_NUM8:
return KB_8;
case KEY_NUM9:
return KB_9;
case KEY_STAR:
return KB_STAR;
case KEY_POUND:
return KB_POUND;
case KEY_LEFTSOFT:
return KB_COMMAND_LEFT;
case KEY_RIGHTSOFT:
return KB_COMMAND_RIGHT;
case KEY_UP:
return KB_UP;
case KEY_DOWN:
return KB_DOWN;
case KEY_LEFT:
return KB_LEFT;
case KEY_RIGHT:
return KB_RIGHT;
case KEY_CENTER:
return KB_CENTER;
default:
break;
}
return KB_NONE;
}
public void sleep(int time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 游戏退出处理方法
*/
public void procExit() {
// TODO Auto-generated method stub
isRunning = false;
midlet.quitApp();
}
public void procHelp() {
// TODO Auto-generated method stub
}
public void procPlay() {
// TODO Auto-generated method stub
KeyOption();
}
public void procMain() {
// TODO Auto-generated method stub
}
/**
* 游戏初始化处理方法
*/
public void procInit() {
// TODO Auto-generated method stub
rgbDate = new int[SCREEN_WIDTH * SCREEN_HEIGHT];
for (int i = 0; i < rgbDate.length; i++) {
rgbDate[i] = 0x7f000000;
}
x = 0;
y = 78;
LoadplayImage();
gameState = GS_PLAY;
}
public void procLogo() {
// TODO Auto-generated method stub
}
/**
* 游戏功能选项菜单键控处理方法
*/
public void KeyOption() {
switch (keyCode) {
case KB_UP:
if (y >= 105) {
y -= 27;
} else {
y = 132;
}
if (CharacterYNumber > 0) {
CharacterYNumber--;
} else {
CharacterYNumber = 2;
}
break;
case KB_DOWN:
if (y <= 105) {
y += 27;
} else {
y = 78;
}
if (CharacterYNumber < 2) {
CharacterYNumber++;
} else {
CharacterYNumber = 0;
}
break;
case KB_LEFT:
bFalgtempY();
break;
case KB_RIGHT:
bFalgtempY();
break;
case KB_COMMAND_RIGHT:
gameState = GS_EXIT;
break;
}
keyCode = KB_NONE;
}
/**
* 状态判断
*/
public void bFalgtempY() {
switch (y) {
case 78:
if (bFalgMove == false) {
CharacterXNumber = 0;
bFalgMove = true;
FactionNumber = 0;
BackgroundNumber = 0;
BiconNumberCol = 0;
CharacterXNumber = 0;
} else {
CharacterXNumber = 1;
bFalgMove = false;
FactionNumber = 1;
BackgroundNumber = 1;
BiconNumberCol = 1;
CharacterXNumber = 1;
}
break;
case 105:
if (bFalgMove == false) {
CharacterXNumber = 0;
bFalgMove = true;
FactionNumber = 0;
BackgroundNumber = 0;
BiconNumberCol = 0;
CharacterXNumber = 0;
} else {
CharacterXNumber = 1;
bFalgMove = false;
FactionNumber = 1;
BackgroundNumber = 1;
BiconNumberCol = 1;
CharacterXNumber = 1;
}
break;
case 132:
if (bFalgMove == false) {
CharacterXNumber = 0;
bFalgMove = true;
FactionNumber = 0;
BackgroundNumber = 0;
BiconNumberCol = 0;
CharacterXNumber = 0;
} else {
CharacterXNumber = 1;
bFalgMove = false;
FactionNumber = 1;
BackgroundNumber = 1;
BiconNumberCol = 1;
CharacterXNumber = 1;
}
break;
}
}
public void drawAbout(Graphics g) {
// TODO Auto-generated method stub
}
public void drawHelp(Graphics g) {
// TODO Auto-generated method stub
}
/**
* 游戏菜单画笔
*/
public void drawPlay(Graphics g) {
// TODO Auto-generated method stub
clearScreen(g, 0, 0, 0);
drawBackground(g);
drawBicon(g);
bFalgMovePhoto(g);
drawCharacter(g);
drawFaction(g);
drawGameover(g);
}
/**
* 游戏菜单选择画笔
*/
public void bFalgMovePhoto(Graphics g) {
switch (y) {
case 78:
g.drawRGB(rgbDate, 0, 80, x, 105, 80, 27, true);
g.drawRect(x, 105, 80, 27);
g.drawRGB(rgbDate, 0, 80, x, 132, 80, 27, true);
g.drawRect(x, 132, 80, 27);
break;
case 105:
g.drawRGB(rgbDate, 0, 80, x, 78, 80, 27, true);
g.drawRect(x, 78, 80, 27);
g.drawRGB(rgbDate, 0, 80, x, 132, 80, 27, true);
g.drawRect(x, 132, 80, 27);
break;
case 132:
g.drawRGB(rgbDate, 0, 80, x, 78, 80, 27, true);
g.drawRect(x, 78, 80, 27);
g.drawRGB(rgbDate, 0, 80, x, 105, 80, 27, true);
g.drawRect(x, 105, 80, 27);
break;
}
}
public void drawGameover(Graphics g) {
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL));
g.setColor(ColorCounter, ColorCounter, ColorCounter);
g.drawString(" 返 回 ", 132, 194, 0);
if (ColorCounter <= 240) {
ColorCounter += 15;
} else {
ColorCounter = 0;
}
}
public void drawMain(Graphics g) {
// TODO Auto-generated method stub
}
public void drawInit(Graphics g) {
// TODO Auto-generated method stub
}
public void drawLogo(Graphics g) {
// TODO Auto-generated method stub
}
public static void Brush(Graphics g, Image photo, int x, int y, int width,
int height, int col, int row) {
g.setClip(x, y, width, height);
g.drawImage(photo, x - row * width, y - col * height, Graphics.TOP
| Graphics.LEFT);
clearClip(g);
}
/**
* 游戏菜单背景画笔
*/
public void drawBackground(Graphics g) {
Brush(g, Background, 0, 0, 176, 192, 0, BackgroundNumber);
}
/**
* 游戏菜单人物属性画笔
*/
public void drawCharacter(Graphics g) {
Brush(g, Character, 0, 0, 176, 192, CharacterXNumber, CharacterYNumber);
}
/**
* 游戏菜单按钮画笔
*/
public void drawBicon(Graphics g) {
Brush(g, Bicon, 0, 78, 80, 81, BiconNumberCol, 0);
}
/**
* 游戏菜单类别画笔
*/
public void drawFaction(Graphics g) {
Brush(g, Faction, 23, 36, 40, 20, FactionNumber, 0);
}
public static void clearClip(Graphics g) {
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
public static void clearScreen(Graphics g, int R, int G, int B) {
g.setColor(R, G, B);
g.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
}
static void LoadplayImage() {
try {
Background = Image.createImage("/src/background.png");
Bicon = Image.createImage("/src/Bicon.png");
Character = Image.createImage("/src/character.png");
Faction = Image.createImage("/src/faction.png");
} catch (IOException e) {
e.printStackTrace();
}
}
// 游戏状态定义
public static final int GS_LOGO = 0XFF01;
public static final int GS_INIT = 0XFF02;
public static final int GS_MAIN = 0XFF03;
public static final int GS_PLAY = 0XFF04;
public static final int GS_HELP = 0XFF05;
public static final int GS_ABOUT = 0XFF06;
public static final int GS_EXIT = 0XFF07;
public static final int GS_SCORE = 0XFF08;
// 睡眠时间定义
public static final int SLEEP_TIME = 60;
public static final int LONG_SLEEP_TIME = 200;
// 按键值定义
public static final int KB_NONE = 0X0;
public static final int KB_0 = 0XFFFF00;
public static final int KB_1 = 0XFFFF01;
public static final int KB_2 = 0XFFFF02;
public static final int KB_3 = 0XFFFF03;
public static final int KB_4 = 0XFFFF04;
public static final int KB_5 = 0XFFFF05;
public static final int KB_6 = 0XFFFF06;
public static final int KB_7 = 0XFFFF07;
public static final int KB_8 = 0XFFFF08;
public static final int KB_9 = 0XFFFF09;
public static final int KB_STAR = 0XFFFF10;
public static final int KB_POUND = 0XFFFF11;
public static final int KB_LEFT = 0XFFFF12;
public static final int KB_UP = 0XFFFF13;
public static final int KB_RIGHT = 0XFFFF14;
public static final int KB_DOWN = 0XFFFF15;
public static final int KB_SELECT = 0XFFFF16;
public static final int KB_CENTER = KB_SELECT;
public static final int KB_COMMAND_LEFT = 0XFFFF17;
public static final int KB_COMMAND_RIGHT = 0XFFFF18;
// 根据不同类型的手机而不同
public static final int KEY_UP = -1;
public static final int KEY_DOWN = -2;
public static final int KEY_LEFT = -3;
public static final int KEY_RIGHT = -4;
public static final int KEY_CENTER = -5;
public static final int KEY_LEFTSOFT = -6;
public static final int KEY_RIGHTSOFT = -7;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -