⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kingcanvas.java

📁 一个J2ME的游戏,有源程序.是原创!适合S60的176*208的规格.
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
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 + -