📄 kingcanvas.java
字号:
package src;
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
//import com.nokia.mid.ui.FullCanvas;
public class KingCanvas extends Canvas implements Runnable {
KingMidlet midlet;
int gameState;
boolean isRunning;
boolean isCurrentDisplay;
boolean isKeyPressed;
boolean isThreadStarting;
Thread thread;
// --------------------------------
String Txt, Music;
int cps, cyclesThisSecond;
Image osb;
Graphics osg;
int state, MusicTest;
static final int MAX_CPS = 25;
static final int MS_PER_FRAME = 1000 / MAX_CPS;
long lastCPSTime, cycleStartTime, timeStateChanged, timeSinceStart;
// -------------------------------
SmallPlane SP[];
OtherPlane OP[];
PlaneSbomb PS[];
LeadingPlaneBullets bulletsUP[], bulletsLEFTUP[], bulletsRIGHTUP[];
LeadingPlaneMenu LP;
Help AT;
Boss BS;
// -------------------------------
PlayerMusic PM = new PlayerMusic();
private Random random = new Random();
boolean bFlagLeadingPlaneBulletsDisplay, bFlagKeyManyStroke,
bFlagLeadingPlaneExplosionDisplay, bFlagLeadingPlaneDisplay,
bFlagLeadingPlaneHPchangeDisplay, bFlagLeadingPlaneHPfill,
bFlagLeadingPlaneDieMove, bFlagSbombDouble,
bFlagIslandAndWarshipDisplay, bFlagPauseMenuDisplay,
bFlagLeadingPlaneCollide, bFlagStopMenu, isMusic, bFlagMusic;
static Image imageWarship, imageIsland, imageCloud, imageLeadingPlaneIcon,
imageLeadingPlane, imageSea, imageLeadingPlaneExplosion,
imagelogo1, imagelogo2, imageHPFrame, Plane, PlaneExplosion,
PlaneArticle;
byte OptionMenu1, OptionMenu2, OptionMenu3, pra, count;
static int LeadingPlaneType;
int keyCode, ktemp, wind;
int bFlagArticle, SmallPlaneSpeed, BulletsPlantState, LeadingPlaneHP,
initBulletType;
int Stem, PlanedefaultStem, PlaneSbombStem;
int p24width, p24height, p16width, p16height;
int MainOptionCounter, TimeOrderCounter, StateCounter, SeaMoveCounter,
ScoreCounter, leadingPlaneIconCounter, BombCounter,
SbombtimeCounter, LeadingPlaneHPcounter, BulletsCounter,
BulletsPowerCounter, ColorCounter, timeCounter;
int LeadingPlaneNumber, SeaNumber, IslandNumber1, IslandNumber2,
LeadingPlaneExplosionNumber, SmallPlaneNumber, OtherPlaneNumber,
PlaneSbombNumber, BossNumber;
int LeadingPlane_X, LeadingPlane_Y, LeadingPlaneIcon_X, LeadingPlaneIcon_Y,
Sea_X, Sea_Y, Island1_X, Island1_Y, Island2_X, Island2_Y,
Warship_X, Warship_Y, Cloud1_X, Cloud1_Y, Cloud2_X, Cloud2_Y,
LeadingPlaneExplosion_X, LeadingPlaneExplosion_Y, Bomb_X, Bomb_Y,
_cx, _cy, tempX, tempY, temp2, temp6;
public boolean loadMainCanvasOver = false;
private long startTime, endTime;
private static final int FRAME_TIME = 200;
private Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD,
Font.SIZE_LARGE);
public int gaugeCnt;
private int MainCanvasInterval = 1;
private static final int MAINCANVAS_END = 150;
static final int SCREEN_WIDTH = 176; // 屏幕宽度
static final int SCREEN_HEIGHT = 208; // 屏幕高度
public KingCanvas(KingMidlet midlet) {
setFullScreenMode(true);
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;
case GS_OPTION:
drawOption(g);
break;
case GS_PAUSE:
drawPause(g);
break;
case GS_EXIT:
drawExit(g);
break;
case GS_GAMEOVER:
drawGameOver(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_ABOUT:
procAbout();
break;
case GS_OPTION:
procOption();
break;
case GS_PAUSE:
procPause();
break;
case GS_EXIT:
procExit();
break;
case GS_GAMEOVER:
procGameOver();
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;
this.keyCode = getKeyCode(keyCode);
}
/**
* 键位说明
*/
public int getKeyCode(int keyCode) {
int key = getGameAction(keyCode);
if (isKeyPressed) {
switch (key) {
case UP:
return KB_UP;
case DOWN:
return KB_DOWN;
case LEFT:
return KB_LEFT;
case RIGHT:
return KB_RIGHT;
case FIRE:
return KB_CENTER;
case KEY_LEFTSOFT:
return KB_COMMAND_LEFT;
case KEY_RIGHTSOFT:
return KB_COMMAND_RIGHT;
default:
break;
}
if (keyCode == KEY_LEFTSOFT)
return KB_COMMAND_LEFT;
if (keyCode == KEY_RIGHTSOFT)
return KB_COMMAND_RIGHT;
} else {
if (bFlagKeyManyStroke == true) {
ktemp = keyCode;
} else {
ktemp = key;
}
switch (ktemp) {
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) {
e.printStackTrace();
}
}
// -------------------------------------------------------------------
/**
* 游戏结束处理方法
*/
public void procGameOver() {
if (TimeOrderCounter <= 52) {
TimeOrderCounter++;
} else if (TimeOrderCounter > 300) {
DelplayImage();
System.gc();
procInit();
LoadLogoImage();
if (bFlagMusic == false) {
Music = "/res/audio/hm-mmbnindoors.mid";
isMusic = true;
MusicTest = 0;
} else {
isMusic = false;
}
gameState = GS_LOGO;
} else {
TimeOrderCounter += 5;
}
}
/**
* 游戏退出处理方法
*/
public void procExit() {
TimeOrderCounter++;
if (TimeOrderCounter > 30) {
isRunning = false;
midlet.quitApp();
}
}
/**
* 游戏暂停处理方法
*/
public void procPause() {
PauseKeyOption();
}
/**
* 游戏功能选项菜单处理方法
*/
public void procOption() {
OptionKeyOption();
}
/**
* 游戏关于处理方法
*/
public void procAbout() {
HelpAndAboutKeyOption();
}
/**
* 游戏帮助处理方法
*/
public void procHelp() {
HelpAndAboutKeyOption();
}
/**
* 游戏进行处理方法
*/
public void procPlay() {
if (bFlagIslandAndWarshipDisplay == false) {
MoveIsland();
MoveWarship();
}
MoveCloud();
for (byte i = 0; i < SP.length; i++) {
SP[i].SmallPlanePacket();
}
for (byte i = 0; i < OP.length; i++) {
OP[i].OtherPlanePacket();
}
Snow();
BS.BossPacket();
GenerateBullet();
BulletsCollideState();
bFlagLeadingPlaneHPstate();
bFlagSbombState();
bFlagLeadingPlaneDie();
bFlagBossDie();
bFlagBossDisplayAction();
bFlagLeadintPlaneRestartAction();
TimeOrderCounter++;
LeadingPlaneKeyOption();
}
/**
* 游戏主角飞机选择菜单处理方法
*/
public void procMain() {
LP.LeadingPlaneMenuPacket();
}
/**
* 游戏初始化处理方法
*/
public void procInit() {
p16width = 16;
p16height = 16;
p24width = 24;
p24height = 24;
SmallPlaneNumber = 5;
OtherPlaneNumber = 1;
PlaneSbombNumber = 10;
SeaNumber = 1;
IslandNumber1 = 0;
IslandNumber2 = 1;
LeadingPlaneNumber = 1;
PlanedefaultStem = 16;
PlaneSbombStem = 64;
MainOptionCounter = 90;
leadingPlaneIconCounter = 3;
BombCounter = 3;
ScoreCounter = 0;
TimeOrderCounter = 0;
SmallPlaneSpeed = 6;
LeadingPlaneHP = 24;
LeadingPlane_X = 80;
LeadingPlane_Y = 175;
LeadingPlaneIcon_X = 5;
LeadingPlaneIcon_Y = 1;
Bomb_X = 163;
Bomb_Y = 186;
_cx = SCREEN_WIDTH >> 1;
_cy = SCREEN_HEIGHT >> 1;
Island2_X = GetRandom(144);
Island2_Y = -32;
Island1_X = GetRandom(144);
Island1_Y = -128;
Warship_X = GetRandom(160);
Warship_Y = -80;
Cloud1_X = GetRandom(144);
Cloud2_X = GetRandom(144);
temp2 = 2;
temp6 = 6;
isMusic = true;
OP = new OtherPlane[OtherPlaneNumber];
for (byte i = 0; i < OP.length; i++) {
OP[i] = new OtherPlane(this);
}
PS = new PlaneSbomb[PlaneSbombNumber];
for (byte i = 0; i < PS.length; i++) {
PS[i] = new PlaneSbomb(this, PlaneSbombStem);
PlaneSbombStem += 64;
}
BS = new Boss(this);
LP = new LeadingPlaneMenu(this);
Music = "/res/audio/hm-mmbnindoors.mid";
LoadLogoImage();
Resourceload();
MenuKeyCompare();
initResources();
gameState = GS_LOGO;
}
/**
* 游戏主菜单处理方法
*/
public void procLogo() {
bFlagMusic();
bFlagKeyManyStroke = false;
TimeOrderCounter++;
if (TimeOrderCounter % 2 == 0)
MainKeyOption();
}
// -------------------------------------------------------------------
/**
* 游戏结束画笔
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -