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

📄 metalmaxcanvas.java

📁 此为一款基于J2ME的手机游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
						for (int k = 0; k < mEvent.length; k++) {

							if (mTank.collidesWith(mEvent[k], false)
									|| mHero.collidesWith(mEvent[k], false)) {

								if (mEvent[k].getEvent() != 0  && mEvent[k].getEvent() < 100) {

									eventID = mEvent[k].getEvent();

									HeroSprite.mapChanged = true;
									
									break;
								}
								if (mEvent[k].getEvent() == 110){
									
									mEvent[k].setFrame(1);
									
									isOpen = k;
									
									break;
								}

							}
						}

						/*如果坦克精灵跟前景层碰撞,则后退*/
						if (mTank.collidesWith(mBoxLayer, false)) {

							mTank.moveUp(false);
							mHero.moveUp(false);
						}

					}

					/*如果英雄精灵跟前景层碰撞,则后退*/
					if (mHero.collidesWith(mBoxLayer, false)) {

						mHero.moveUp(false);
					}

					/*遍历NPC,检测是否触发对话*/
					for (int j = 0; j < mNpc.length; j++) {

						/*如果跟NPC碰撞,则触发对话*/
						if (mTank.collidesWith(mNpc[j], false)
								|| mHero.collidesWith(mNpc[j], false)) {

							isTalk = true;

							/*调整NPC朝向,使之和英雄面对面*/
							mNpc[j].setFrame(0);

							/*要对话的NPC编号*/
							npcNum = j;

							/*不可穿越NPC,后退*/
							if (isDrive) {

								mTank.moveUp(false);
								mHero.moveUp(false);
							} else {

								mHero.moveUp(false);
							}

						}
					}

					/*屏幕刷新,调整可视窗口*/
					setGameViewWinodow();
					mLm.paint(g, 0, 0);
					flushGraphics();
				}

		}

		/*如果按下键*/
		if ((key & DOWN_PRESSED) != 0) {

			MetalMaxCanvas.way = DOWN_PRESSED;

			isbattle = Math.abs(battleRandom.nextInt()) % 50;

			if(isOpen != -1){
				
				mEvent[isOpen].setFrame(0);
			}
			
			if (isbattle <= 1 && mapID == WORLD_MAP) {

				backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);

				if (isbattle == 0) {

					mMonster = new MonsterSprite(音速车);
				}
				if (isbattle == 1) {

					mMonster = new MonsterSprite(沙漠车);
				}

				gameState = GAME_FIGHT;

				SoundEffects.getInstance().startBattleSound();

			} else

				for (int i = 0; i < 8; i++) {

					mHero.moveDown(true);

					for (int k = 0; k < mEvent.length; k++) {

						if (mTank.collidesWith(mEvent[k], false)
								|| mHero.collidesWith(mEvent[k], false)) {

							if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

								eventID = mEvent[k].getEvent();

								HeroSprite.mapChanged = true;
								
								break;
							}

							if (mEvent[k].getEvent() == 110){
								
								mEvent[k].setFrame(1);
								
								isOpen = k;
								
								break;
							}
						}
					}

					if (isDrive) {

						mTank.moveDown(true);

						/*遍历游戏事件,检测是否触发事件*/
						for (int k = 0; k < mEvent.length; k++) {

							if (mTank.collidesWith(mEvent[k], false)
									|| mHero.collidesWith(mEvent[k], false)) {

								if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

									eventID = mEvent[k].getEvent();

									HeroSprite.mapChanged = true;
									
									break;
								}
								if (mEvent[k].getEvent() == 110){
									
									mEvent[k].setFrame(1);
									
									isOpen = k;
									
									break;
								}

							}
							
						}

						if (mTank.collidesWith(mBoxLayer, false)) {

							mTank.moveDown(false);
							mHero.moveDown(false);
						}

					}

					if (mHero.collidesWith(mBoxLayer, false)) {

						mHero.moveDown(false);
					}

					for (int j = 0; j < mNpc.length; j++) {

						if (mTank.collidesWith(mNpc[j], false)
								|| mHero.collidesWith(mNpc[j], false)) {

							isTalk = true;

							mNpc[j].setFrame(1);

							npcNum = j;

							if (isDrive) {

								mTank.moveDown(false);
								mHero.moveDown(false);
							} else {

								mHero.moveDown(false);
							}
							
							break;

						}
					}

					setGameViewWinodow();

					mLm.paint(g, 0, 0);
					flushGraphics();
				}
		}
		/*如果按左键*/
		if ((key & LEFT_PRESSED) != 0) {

			MetalMaxCanvas.way = LEFT_PRESSED;

			isbattle = Math.abs(battleRandom.nextInt()) % 50;

			if(isOpen != -1){
				
				mEvent[isOpen].setFrame(0);
			}

			if (isbattle <= 1 && mapID == WORLD_MAP) {

				backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);

				if (isbattle == 0) {

					mMonster = new MonsterSprite(音速车);
				}
				if (isbattle == 1) {

					mMonster = new MonsterSprite(沙漠车);
				}

				gameState = GAME_FIGHT;

				SoundEffects.getInstance().startBattleSound();

			} else

				for (int i = 0; i < 8; i++) {

					mHero.moveLeft(true);

					for (int k = 0; k < mEvent.length; k++) {

						if (mTank.collidesWith(mEvent[k], false)
								|| mHero.collidesWith(mEvent[k], false)) {

							if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

								eventID = mEvent[k].getEvent();

								HeroSprite.mapChanged = true;
								
								break;
							}

						}
					}

					if (isDrive) {

						mTank.moveLeft(true);

						/*遍历游戏事件,检测是否触发事件*/
						for (int k = 0; k < mEvent.length; k++) {

							if (mTank.collidesWith(mEvent[k], false)
									|| mHero.collidesWith(mEvent[k], false)) {

								if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

									eventID = mEvent[k].getEvent();

									HeroSprite.mapChanged = true;
									
									break;
								}

							}
						}

						if (mTank.collidesWith(mBoxLayer, false)) {

							mTank.moveLeft(false);
							mHero.moveLeft(false);
						}

					}

					if (mHero.collidesWith(mBoxLayer, false)) {

						mHero.moveLeft(false);
					}

					for (int j = 0; j < mNpc.length; j++) {

						if (mTank.collidesWith(mNpc[j], false)
								|| mHero.collidesWith(mNpc[j], false)) {

							isTalk = true;

							mNpc[j].setFrame(2);

							npcNum = j;

							if (isDrive) {

								mTank.moveLeft(false);
								mHero.moveLeft(false);
							} else {

								mHero.moveLeft(false);
							}
							
							break;

						}
					}
					setGameViewWinodow();

					mLm.paint(g, 0, 0);
					flushGraphics();
				}

		}
		/*如果按右键*/
		if ((key & RIGHT_PRESSED) != 0) {

			MetalMaxCanvas.way = RIGHT_PRESSED;

			isbattle = Math.abs(battleRandom.nextInt()) % 50;

			if(isOpen != -1){
				
				mEvent[isOpen].setFrame(0);
			}

			if (isbattle <= 1 && mapID == WORLD_MAP) {

				backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);

				if (isbattle == 0) {

					mMonster = new MonsterSprite(音速车);
				}
				if (isbattle == 1) {

					mMonster = new MonsterSprite(沙漠车);
				}

				gameState = GAME_FIGHT;

				SoundEffects.getInstance().startBattleSound();

			} else

				for (int i = 0; i < 8; i++) {

					mHero.moveRight(true);

					for (int k = 0; k < mEvent.length; k++) {

						if (mTank.collidesWith(mEvent[k], false)
								|| mHero.collidesWith(mEvent[k], false)) {

							if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

								eventID = mEvent[k].getEvent();

								HeroSprite.mapChanged = true;
								
								break;
							}

						}
					}

					if (isDrive) {

						mTank.moveRight(true);

						/*遍历游戏事件,检测是否触发事件*/
						for (int k = 0; k < mEvent.length; k++) {

							if (mTank.collidesWith(mEvent[k], false)
									|| mHero.collidesWith(mEvent[k], false)) {

								if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {

									eventID = mEvent[k].getEvent();

									HeroSprite.mapChanged = true;
									
									break;
								}

							}
						}

						if (mTank.collidesWith(mBoxLayer, false)) {

							mTank.moveRight(false);
							mHero.moveRight(false);
						}

					}

					if (mHero.collidesWith(mBoxLayer, false)) {

						mHero.moveRight(false);
					}

					for (int j = 0; j < mNpc.length; j++) {

						if (mTank.collidesWith(mNpc[j], false)
								|| mHero.collidesWith(mNpc[j], false)) {

							isTalk = true;

							mNpc[j].setFrame(3);

							npcNum = j;

							if (isDrive) {

								mTank.moveRight(false);
								mHero.moveRight(false);
							} else {

								mHero.moveRight(false);
							}
							
							break;

						}
					}
					setGameViewWinodow();

					mLm.paint(g, 0, 0);
					flushGraphics();;
				}

		}

		/*如果按下确定键,呼出菜单*/
		if ((key & FIRE_PRESSED) != 0) {

			gameState = GAME_MENU;

		}

		/*如果按下1键,取消动作,恢复正常状态*/
		if ((key & GAME_A_PRESSED) != 0) {

			if (gameState == GAME_MENU) {

				gameState = GAME_NORMAL;

			}
		}

		setGameViewWinodow();

	}

	/**调整游戏可视窗口*/
	public void setGameViewWinodow() {

		int x, y, herox, heroy;

		herox = mHero.getX();
		heroy = mHero.getY();

		x = herox - getWidth() / 2;
		y = heroy - getHeight() / 2;

		if (x < 0){
			x = 0;
		}			
		else if (x > mBackLayer.getWidth() - getWidth())
			x = mBackLayer.getWidth() - getWidth();

		if (y < 0){
			y = 0;
		}		
		else if (y > mBackLayer.getHeight() - getHeight())
			y = mBackLayer.getHeight() - getHeight();

		mLm.setViewWindow(x, y, getWidth(), getHeight());
	}

	/**游戏线程的运行函数,游戏状态机的转换*/
	public void run() {

		/*如果游戏不是自动运行,则转到正常模式*/
		if (gameState != GAME_AUTORUN) {

			gameState = GAME_NORMAL;
		}

		fightState = FIGHT_STANDBY;

		menuState = MENU_NORMAL;

		Graphics g = getGraphics();

		g.setFont(Font.getFont(Font.STYLE_BOLD));

		/*如果游戏没有结束,则循环执行*/
		if (!isGameOver) {

			Thread currentThread = Thread.currentThread();

			try {
				while (currentThread == animationThread & !isGameOver) {

					/*开始绘制的时间*/
					start = System.currentTimeMillis();

					switch (gameState) { /*游戏状态机的转换*/

					case (GAME_AUTORUN): /*自动状态*/

						autoRun(g);

					break;

					case (GAME_NORMAL):  /*正常状态*/

						try {

							/*检测键盘输入*/
							handleKey(); 
						} catch (IOException e) {
							// TODO 自动生成 catch 块
							e.printStackTrace();
						}

						/*地图刷新*/
						mLm.paint(g, 0, 0);
						flushGraphics();

						break;
					case (GAME_FIGHT):   /*战斗状态*/

						repaint();
					Fight(g);

					break;

					case (GAME_MENU):    /*菜单状态*/

						repaint();
					Menu(g);

					break;

					case(GAME_SHOP):     /*商店状态*/

						repaint();

					/*根据不同的地图和事件来设置不同的商店*/
					Shop(g, mapID ,eventID);

					break;
					}

					/*检测是否要进行地图切换*/
					doMapChange();

					/*绘制结束的时间*/
					long timeTaken = System.currentTimeMillis() - start;

					/* FPS控制:
			           使用SPF(每帧所用时间)控制绘制速度,规定一个SPF值:MILLS_PER_TICK
			           当上一绘制时间未超过设定SPF,则线程休眠SPF-上帧时间,
			           否则立刻进行下一次绘制*/
					if (timeTaken < MILLIS_PER_TICK) {

						synchronized (this) {

							wait(MILLIS_PER_TICK - timeTaken);
						}
					} else {

						Thread.yield();
					}

				}

			} catch (InterruptedException e) {
			}
		}

		/*如果游戏结束则停止游戏循环,跳回到midlet*/
		if (isGameOver) {

			stop();

			midlet.GameCanvasGameOver(time, 0);

		}

	}

	/**根据地图编号进行游戏初始化*/
	public void init(int mapID) {

		Graphics g = getGraphics();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -