📄 foxcanvas.java
字号:
imgSplash.dispose();
System.gc();
repaint();
}
break;
case ST_MAINMENU: //主菜单
DrawMainMenu(g);
break;
case ST_RUN: //新游戏提示
DrawGameStart(g);
break;
case GAME_OVER_RESULT: //游戏结束,玩家输入姓名
drawGameResult(g);
break;
case ST_GAMEINFO:
DrawGameInfo(g);
break;
case ST_KEYINFO:
DrawKeyInfo(g);
break;
case ST_HELP: //帮助
DrawHelp(g);
break;
case ST_SETTING: //设置
DrawSet(g);
break;
case ST_GAMEMENU: //游戏中的菜单
DrawGameMenu(g);
break;
case ST_SCORELEVEL: //排行榜级别选择
DrawScoreSelect(g);
break;
case ST_SCORE:
DrawHighScore(g);
break;
case ST_GAMELEVEL: //游戏难度级别设定
DrawGameSelect(g);
break;
case GAME_PLAY: //进入游戏
if (bPause) {
g.drawImage(imgBackSky, 0, 0);
g.setColor(g.getColorOfRGB(0, 0, 255));
g.drawString("拞抐", WIDTH / 2 - defFont.stringWidth("拞抐") / 2,
HEIGHT / 2);
}
else {
drawBG(g);
drawBoard(g);
drawFramework(g);
role.drawFox(g, boards);
}
break;
case GAME_OVER_DIE: //狐狸死亡
drawGameOverStage(g);
break;
// case GAME_INPUTNAME:
// g.setColor(g.getColorOfRGB(0, 0, 0));
// g.fillRect(0, 0, WIDTH, HEIGHT);
// Display.setCurrent(new InputForm(this));
// setSoftLabel(SOFT_KEY_1, "");
// setSoftLabel(SOFT_KEY_2, "");
// break;
case GAME_PAUSE:
g.setColor(g.getColorOfRGB(0, 0, 255));
g.drawImage(imgBackSky, 0, 0);
g.drawString("拞抐", WIDTH / 2 - defFont.stringWidth("拞抐") / 2,
HEIGHT / 2);
break;
}
g.unlock(true);
}
void drawTitleString(Graphics g, String string, int y) {
g.setColor(g.getColorOfRGB(0, 0, 255));
g.drawString(string, WIDTH / 2 - defFont.stringWidth(string) / 2, y);
}
//排行榜
static int levelIndex = 0;
static int levelListIndex = 0;
//排行榜查看
private void DrawHighScore(Graphics g) {
if (iButton == 0) {
iButton = 1;
setSoftLabel(SOFT_KEY_2, "");
setSoftLabel(SOFT_KEY_1, "栠傞");
}
int start = 0;
g.drawImage(imgBackSky, 0, 0);
switch (levelListIndex + 1) {
case 1:
start = 0;
drawTitleString(g, "娙扨 Top5", 45);
break;
case 2:
start = 5;
drawTitleString(g, "晛捠 Top5", 45);
break;
case 3:
start = 10;
drawTitleString(g, "擄偟偄 Top5", 45);
break;
}
g.setColor(g.getColorOfRGB(0, 0, 255));
for (int i = 1, temp = start; i <= 5; i++, temp++) {
g.drawString("No." + i,
60, 50 + i * 30);
g.drawString(Integer.toString(numberList[temp]), 180, 50 + i * 30);
}
}
//游戏开始的时候显示的效果画面
private int gameStartCountW = 0, gameStartCountH = 0;
public void DrawGameStart(Graphics g) {
g.setColor(g.getColorOfRGB(255, 255, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(g.getColorOfRGB(85, 97, 116));
if (10 * gameStartCountW < WIDTH && 10 * gameStartCountH < HEIGHT) {
g.fillRect(WIDTH / 2 - (10 * gameStartCountW / 2),
HEIGHT / 2 - (10 * gameStartCountH / 2),
10 * gameStartCountW, 10 * gameStartCountH);
gameStartCountW++;
gameStartCountH++;
}
else {
imgLogo = null;
gameStartCountW = 0;
gameStartCountH = 0;
bPlay = true;
setSoftLabel(SOFT_KEY_2, "\uFF92\uFF86\uFF6D\uFF70");
setSoftLabel(SOFT_KEY_1, "拞抐");
gameState = GAME_PLAY;
System.gc();
}
}
//游戏结束的时候显示的效果画面
private int gameOverCount = 0;
public void gameOver(Graphics g) {
g.setColor(g.getColorOfRGB(255, 255, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(g.getColorOfRGB(85, 97, 116));
if (5 * gameOverCount < WIDTH / 2) {
g.fillRect(0, 0, 5 * gameOverCount, HEIGHT);
g.fillRect(0, 0, WIDTH, 5 * gameOverCount);
g.fillRect(WIDTH - 5 * gameOverCount, 0, 5 * gameOverCount, HEIGHT);
g.fillRect(0, HEIGHT - 5 * gameOverCount, WIDTH, 5 * gameOverCount);
gameOverCount++;
}
else {
gameOverCount = 0;
midlet.terminate();
}
}
//画固定的背景
int skyX, skyY;
static Image imgBG;
int clouds[] = {
180, 180, 180};
int cloudsBigX, cloudesBigY;
int cloudsSmallX, cloudesSmallY;
Random rnd = new Random();
int frameY = HEIGHT;
public void drawBG(Graphics g) {
g.setColor(g.getColorOfRGB(255, 255, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
// g.drawImage(imgBG, 0, 0);
for (int i = 0; i < WIDTH; i++) {
g.drawImage(sky, i, 0);
}
for (int i = 0; i < 3; i++) {
if (clouds[i] > -48) {
clouds[i] -= i + 1;
}
else {
clouds[i] = 240;
}
}
g.drawImage(cloudsSmall, clouds[0], 90);
g.drawImage(cloudsBig, clouds[1], 30);
g.drawImage(cloudsSmall, clouds[2], 150);
}
//木板外面的框子
public void drawFramework(Graphics g) {
for (int i = 0; i < 48; i++) {
g.drawImage(sawtooth, i * 5, 20);
}
frameY -= boardSpeed;
if (frameY <= 0) {
frameY += HEIGHT;
}
g.drawImage(ImageFrame, 0, frameY);
g.drawImage(ImageFrame, 0, frameY - HEIGHT);
g.drawImage(ImageFramef, WIDTH - 5, frameY);
g.drawImage(ImageFramef, WIDTH - 5, frameY - HEIGHT);
g.drawImage(topBoard, 0, 0);
drawLife(g);
}
private boolean bSaveScore;
public void drawGameResult(Graphics g) {
bPlay = false;
int start = 0, end = 0;
switch (levelIndex + 1) {
//查找相应级别,每级别存成绩最高的5个玩家,存储位置Easy:0-4,Normal:5-9,Hard:10-14
case 1:
start = 0;
end = 4;
break;
case 2:
start = 5;
end = 9;
break;
case 3:
start = 10;
end = 14;
break;
}
g.drawImage(imgBackSky, 0, 0);
drawTitleString(g, "寢 壥", 40);
g.setColor(g.getColorOfRGB(0, 0, 255));
g.drawString("Frost Down " + role.number,
(WIDTH - defFont.stringWidth("Frost Down " + role.number)) / 2,
110);
g.drawString("Record Down " + numberList[start],
(WIDTH - defFont.stringWidth("Record Down " + numberList[start])) /
2, 140);
if (role.number > numberList[end]) {
g.drawString("Top5偵擖傝傑偟偨",
(WIDTH - defFont.stringWidth("Top5偵擖傝傑偟偨")) / 2, 170);
}
if (iButton == 0) {
iButton = 1;
if (role.number > numberList[end]) {
bSaveScore = true;
setSoftLabel(SOFT_KEY_2, "SAVE");
}
else {
setSoftLabel(SOFT_KEY_2, "");
bSaveScore = false;
}
setSoftLabel(SOFT_KEY_1, "栠傞");
}
}
private long gameOverStart;
private boolean bGameOver = true;
public void drawGameOverStage(Graphics g) {
if (bGameOver) {
iButton = 0;
setSoftLabel(SOFT_KEY_1, "");
setSoftLabel(SOFT_KEY_2, "");
imgGameOver = createImage("gameOver");
bGameOver = false;
gameOverStart = System.currentTimeMillis();
}
else {
g.drawImage(imgGameOver, 0, 0);
if (System.currentTimeMillis() - gameOverStart > 2000) {
gameState = GAME_OVER_RESULT;
bGameOver = true;
imgGameOver = null;
iButton = 0;
readDB();
System.gc();
}
}
}
//画血和层数
boolean bDead = false;
long deadDelay;
private int[] score = {
0, 0, 0, 0};
public void drawLife(Graphics g) {
score[0] = role.number / 1000;
score[1] = role.number / 100 - role.number / 1000 * 10;
score[2] = role.number / 10 - role.number / 100 * 10;
score[3] = role.number % 10;
for (int i = 0; i < score.length; i++) {
drawClipImage(g, number, 164 + 9 * i, 5, 7 * score[i], 0, 7, 8);
}
if (role.life > 0) {
for (int i = 0; i < role.life; i++) {
g.drawImage(life, 38 + 5 * i, 5);
}
}
else { //dead
gameState = GAME_OVER_DIE;
// if (!bDead) {
// bDead = true;
// deadDelay = System.currentTimeMillis();
// }
// if (System.currentTimeMillis() - deadDelay > 100) {
// bDead = false;
// gameState = GAME_OVER_DIE;
// }
}
}
// 画移动的板子(坐标和类型)1.普通木板;2.弹簧;3草板;4钉板;5左滚板;6右滚板
public static int[][] boards = { //第一维X ,第二维Y ,第三维Type ,第四维动画的imgIndex,第五维是否已经踩过了
{
95, 256, 1, 0, 0}
, {
20, 256 - 30, 2, 0, 0}
, {
69, 256 - 30 * 2, 3, 0, 0}
, {
15, 256 - 30 * 3, 1, 0, 0}
, {
95, 256 - 30 * 4, 5, 0, 0}
, {
90, 256 - 30 * 5, 6, 0, 0}
, {
54, 256 - 30 * 6, 1, 0, 0}
, {
44, 256 - 30 * 7, 2, 0, 0}
, {
5, 256 - 30 * 8, 4, 0, 0}
};
public void initBoards() {
initBasicX();
for (int i = 0; i < basicX.length; i++) {
boards[i][0] = i != 4 ? basicX[i] : 100;
boards[i][1] = 320 - 40 * i;
boards[i][2] = 1; //0--5 + 1
boards[i][3] = 0;
boards[i][4] = 0;
}
boards[4][4] = 1;
}
int[] basicX = {
95, 20, 69, 15, 145, 120, 54, 44, 5};
public void initBasicX() {
Vector v = new Vector();
for (int i = 0; i < basicX.length; i++) {
v.addElement(new Integer(basicX[i]));
}
int temp = 0;
for (int i = 0; i < basicX.length; i++) {
temp = Math.abs(rnd.nextInt() % v.size());
basicX[i] = Integer.parseInt(v.elementAt(temp).toString());
v.removeElementAt(temp);
}
}
// 画移动的板子1.普通木板;2.弹簧;3草板;4钉板;5左滚板;6右滚板
static int timer = 0;
static boolean isStart = false;
public void drawBoard(Graphics g) {
for (int i = 0; i < boards.length; i++) {
switch (boards[i][2]) {
case 1:
g.drawImage(boardSingle, boards[i][0], boards[i][1]);
break;
case 2:
if (boards[i][4] == 0) {
g.drawImage(springboardsingle, boards[i][0], boards[i][1]);
}
else {
drawClipImage(g, springboard, boards[i][0], boards[i][1],
46 * boards[i][3], 0, 46, 8);
if (++boards[i][3] == 3) {
boards[i][3] = 0;
boards[i][4] = 0;
}
}
break;
case 3:
if (boards[i][3] == 3) {
drawClipImage(g, grassboard, boards[i][0], boards[i][1],
46 * 2, 0, 46, 22);
}
else
if (boards[i][4] == 0 || timer < 3) {
g.drawImage(grassboardSingle, boards[i][0], boards[i][1]);
}
else {
drawClipImage(g, grassboard, boards[i][0], boards[i][1],
46 * boards[i][3], 0, 46, 22);
++boards[i][3];
}
break;
case 4:
g.drawImage(nailboard, boards[i][0], boards[i][1]);
break;
case 5:
drawClipImage(g, scrollboard, boards[i][0], boards[i][1], 0,
5 * boards[i][3], 46, 5);
boards[i][3] = boards[i][3] < 2 ? boards[i][3] + 1 : 0;
break;
case 6:
drawClipImage(g, scrollboardf, boards[i][0], boards[i][1], 0,
5 * boards[i][3], 46, 5);
boards[i][3] = boards[i][3] < 2 ? boards[i][3] + 1 : 0;
break;
}
if (boards[i][1] > 0) {
boards[i][1] -= boardSpeed;
}
else {
role.number = i % 5 == 0 ? role.number + 1 : role.number;
int num = rnd.nextInt() % 50;
int type = Math.abs(rnd.nextInt() % 6) + 1;
boards[i][0] = boards[i][0] + num > 240 - 59 || boards[i][0] + num < 5 ?
boards[i][0] : boards[i][0] + num;
int previousIndex = 0;
previousIndex = i == 8 ? 0 : i + 1;
boards[i][1] = boards[previousIndex][1] + 40;
boards[i][2] = type;
boards[i][3] = 0;
boards[i][4] = 0;
}
}
if (isStart) {
timer++;
}
}
// class InputForm
// extends Panel
// implements ComponentListener {
// public TextBox t = new TextBox("", 4, 1, TextBox.DISPLAY_ANY);
// Button btOK = new Button("SAVE");
// Button btCancel = new Button("栠傞");
// FoxCanvas canvas;
// InputForm(FoxCanvas c) {
// setTitle("僾儗僀儎乕曐懚");
// this.add(t);
// this.add(btCancel);
// this.add(btOK);
// this.setComponentListener(this);
// this.canvas = c;
// }
//
// public void componentAction(Component c, int type, int param) {
// if (c == btOK) {
// String inputName = t.getText().trim();
// if (inputName == null || inputName == "" || inputName.length() == 0) {
// inputName = "Bbmf";
// }
// if (inputName.length() > 4) {
// inputName = inputName.substring(0, 4);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -