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

📄 mygamecanvas.java

📁 J2ME开发的手机游戏需要安装诺基亚手机模拟器才能正常运行
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			drawMessage();
			break;
		case STATUS_LOADING_LEVEL:
			drawLoadingLevel(g);
			break;
		case STATUS_POPMENU_CONFIRM:
			lm.paint(g, 0, 0);
			drawConfirmMenu(g);
			break;
		case STATUS_BUYING:
			drawBuying(g);
			break;
		case STATUS_SALING:
			drawSaling(g);
			break;
		case STATUS_FIGHTING:
			drawFightScene(g);

			break;
		case STATUS_MAIN_MENU:
			drawMainMenu(g);
			break;
		case STATUS_HELP:
			drawHelp(g);
			break;
		case STATUS_ABOUT:
			drawAbout(g);
			break;

		case STATUS_PLAYER_INFO:
			drawPlayerInfo(g);
			break;
		case STATUS_MISSION_INFO:
			drawMissonList(g);
			break;
		case STATUS_GAME_OVER:
			drawGameOver(g);
			break;
		case STATUS_FIGHT_OVER:
			drawFightOver(g);
			break;
		case STATUS_MISSION_OVER:
			drawMissonOver(g);
			break;
		}

	}

	public void drawFlash() {
		Graphics g = this.getGraphics();
		if (ResourceLoader.flashImage != null) {
			g.drawImage(ResourceLoader.flashImage, width / 2, height / 2,
					Graphics.HCENTER | Graphics.VCENTER);
		}
		this.flushGraphics();
	}

	/**
	 * 绘制主角拥有的东西列表
	 * 
	 * @param bType
	 *            :1:武器 2:护具,3:药品 4:技能
	 */
	private void drawBelongs(int bType, Graphics g) {
		int y1 = 10;

		y1 += 36;
		Vector ps = this.weaponVec;
		switch (curMenuIndex) {
		case 1:
			ps = myPlayer.weaponVec;
			break;
		case 2:
			ps = myPlayer.medicVec;
			break;
		case 3:
			ps = myPlayer.jacketVec;
			break;
		case 4:
			ps = myPlayer.skillVec;
			break;

		}
		for (int i = 0; i < ps.size(); i++) {
			RPGObject object = (RPGObject) ps.elementAt(i);

			paintMenu(g, object.name, 66, y1, i == curMenuIndex2);
			y1 += 18;
		}

		RPGObject ro = null;
		if (curMenuIndex2 < ps.size()) {
			ro = (RPGObject) ps.elementAt(curMenuIndex2);
		}

		if (ro != null) {
			String allDesc = ro.description;
			g.drawString(allDesc, width / 2, 208 - 15, Graphics.HCENTER
					| Graphics.BOTTOM);
		}

		paintMenu(g, ResourceLoader.StringResource[3], 66, 193,
				ps.size() == curMenuIndex2);

	}

	private void drawSaling(Graphics g) {
		g.drawImage(ResourceLoader.menu[0], width / 2, 0, Graphics.TOP
				| Graphics.HCENTER);
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_SMALL));
		switch (this.saleType) {
		//武器护具
		case 1:

			int y1 = 10;
			g.drawImage(ResourceLoader.menu[8], width / 2, y1, Graphics.TOP
					| Graphics.HCENTER);
			String type = ResourceLoader.StringResource[27];
			if (!isArm) {
				type = ResourceLoader.StringResource[28];
			}

			g.drawString(type, width / 2, y1 + 1, Graphics.TOP
					| Graphics.HCENTER);

			y1 += 18;
			g.drawString(ResourceLoader.StringResource[29] + ":"
					+ myPlayer.money, width / 2, y1, Graphics.TOP
					| Graphics.HCENTER);
			Vector ps = myPlayer.weaponVec;
			if (!isArm) {
				ps = myPlayer.jacketVec;
			}

			y1 += 18;
			//武器护具列表

			for (int i = 0; i < ps.size(); i++) {
				Property property = (Property) ps.elementAt(i);

				paintMenu(g, property.name, width / 2, y1, i == curMenuIndex);
				y1 += 18;
			}
			//退出按钮
			paintMenu(g, ResourceLoader.StringResource[3], width / 2, y1,
					curMenuIndex == ps.size());

			Property curP = null;
			if (curMenuIndex < ps.size()) {
				curP = (Property) ps.elementAt(curMenuIndex);
			}

			if (curP != null) {
				String allDesc = ResourceLoader.StringResource[6] + ":"
						+ curP.description + "        "
						+ ResourceLoader.StringResource[7] + ":" + curP.price;
				g.drawString(allDesc, width / 2, 208, Graphics.HCENTER
						| Graphics.BOTTOM);
			}

			break;
		case 2:
			//药品
			int y = 10;
			g.drawString(ResourceLoader.StringResource[29] + ":"
					+ myPlayer.money, width / 2, y, Graphics.TOP
					| Graphics.HCENTER);
			ps = myPlayer.medicVec;
			y += 18;
			for (int i = 0; i < ps.size(); i++) {
				Property property = (Property) ps.elementAt(i);

				paintMenu(g, property.name, width / 2, y, i == curMenuIndex);

				y += 18;
			}
			paintMenu(g, ResourceLoader.StringResource[3], width / 2, y,
					curMenuIndex == ps.size());
			curP = null;
			if (ps.size() > curMenuIndex) {
				curP = (Property) ps.elementAt(curMenuIndex);
			}

			if (curP != null) {
				String allDesc = ResourceLoader.StringResource[6] + ":"
						+ curP.description + "        "
						+ ResourceLoader.StringResource[7] + ":" + curP.price;
				g.drawString(allDesc, width / 2, 208, Graphics.HCENTER
						| Graphics.BOTTOM);
			}
			break;

		}
	}

	/**
	 *  
	 */
	private void drawMissonList(Graphics g) {

		g.drawImage(ResourceLoader.menu[0], width / 2, 0, Graphics.TOP
				| Graphics.HCENTER);
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_LARGE));
		g.drawString(ResourceLoader.StringResource[42], width / 2, 0,
				Graphics.TOP | Graphics.HCENTER);
		g.drawString(curLevel.missionDesc, width / 2, 40, Graphics.TOP
				| Graphics.HCENTER);

	}

	private void drawMissonOver(Graphics g) {

		g.drawImage(ResourceLoader.menu[0], width / 2, 0, Graphics.TOP
				| Graphics.HCENTER);
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_LARGE));

		g.drawString(ResourceLoader.StringResource[40], width / 2,
				height / 2 - 20, Graphics.TOP | Graphics.HCENTER);
		//g.drawString(""+this.killTigerCount,40,40,0);

	}

	private void drawFightOver(Graphics g) {
		fightLayerManager = new LayerManager();
		fightLayerManager.append(this.fightBackGround);
		fightLayerManager.paint(g, 0, 0);
		g.setColor(255, 255, 255);
		g.drawImage(ResourceLoader.menu[3], width / 2, height / 2,
				Graphics.HCENTER | Graphics.VCENTER);
		g.drawString(ResourceLoader.StringResource[30]
				+ (myPlayer.exp - this.beforeFightExp), width / 2,
				height / 2 - 40, Graphics.HCENTER | Graphics.TOP);
		g.drawString(ResourceLoader.StringResource[31]
				+ (myPlayer.money - this.beforeFightMoney), width / 2,
				height / 2 - 20, Graphics.HCENTER | Graphics.TOP);
		//升级了
		if (myPlayer.exp >= myPlayer.nextExp) {
			g.drawString(ResourceLoader.StringResource[39], width / 2,
					height / 2, Graphics.HCENTER | Graphics.TOP);

		}
		//学会技能
		if (ranSkill != null) {
			g
					.drawString(ResourceLoader.StringResource[41]
							+ ranSkill.name, width / 2, height / 2 + 20,
							Graphics.HCENTER | Graphics.TOP);
		}

	}

	/**
	 *  
	 */
	private void drawPlayerInfo(Graphics g) {
		// TODO 自动生成方法存根
		g.drawImage(ResourceLoader.menu[0], 0, 0, 0);
		g.setColor(255, 255, 255);

		g
				.drawImage(ResourceLoader.menu[8], 30, 0, Graphics.TOP
						| Graphics.LEFT);

		g.setClip(118, 0, 58, 52);
		g.drawImage(ResourceLoader.menu[4], 118, 0, 0);
		g.setClip(0, 0, width, height);

		String type = type = ResourceLoader.StringResource[38];//一般

		switch (curMenuIndex) {
		//通常信息
		case 0:
			int xx = 8,
			yy = 30;
			int interval = 50;
			g.drawString(ResourceLoader.StringResource[20], xx, yy, 0);
			g.drawString(myPlayer.rank + "", xx + interval, yy, 0);
			g.drawString(ResourceLoader.StringResource[21], xx, yy + 15, 0);
			g.drawString(myPlayer.exp + "", xx + interval, yy + 15, 0);
			g.drawString(ResourceLoader.StringResource[22], xx, yy + 30, 0);
			g.drawString(myPlayer.nextExp + "", xx + interval, yy + 30, 0);
			g.drawString("HP", xx, yy + 45, 0);
			g.drawString(myPlayer.hp + "", xx + interval, yy + 45, 0);
			g.drawString("MP", xx, yy + 60, 0);
			g.drawString(myPlayer.mp + "", xx + interval, yy + 60, 0);

			Property w = (Property) curLevel.properties.get(new Integer(
					myPlayer.curWeaponID));
			Property d = (Property) curLevel.properties.get(new Integer(
					myPlayer.curDefendID));

			g.drawString(ResourceLoader.StringResource[32], xx, yy + 75, 0);
			g.drawString(myPlayer.attackPoint + "", xx + interval, yy + 75, 0);

			g.drawString(ResourceLoader.StringResource[33], xx, yy + 90, 0);
			g.drawString(myPlayer.defendPoint + "", xx + interval, yy + 90, 0);

			g.drawString(ResourceLoader.StringResource[35], xx, yy + 105, 0);
			g.drawString(myPlayer.money + "", xx + interval, yy + 105, 0);

			g.drawString(ResourceLoader.StringResource[27], xx, yy + 120, 0);

			if (w != null) {
				g.drawString(w.name + "(AP:" + w.addAttackPoint + ",DP:"
						+ w.addDefendPoint + ")", xx + interval, yy + 120, 0);
			}

			g.drawString(ResourceLoader.StringResource[28], xx, yy + 135, 0);

			if (d != null) {
				g.drawString(d.name + "(AP:" + d.addAttackPoint + ",DP:"
						+ d.addDefendPoint + ")", xx + interval, yy + 135, 0);
			}
			paintMenu(g, ResourceLoader.StringResource[3], 66, 193, true);

			break;
		case 1:
			type = ResourceLoader.StringResource[27];//武器
			drawBelongs(1, g);
			break;
		case 2:
			type = ResourceLoader.StringResource[36];//药品
			drawBelongs(2, g);
			break;
		case 3:
			type = ResourceLoader.StringResource[28];//护具
			drawBelongs(3, g);
			break;
		case 4:
			type = ResourceLoader.StringResource[37];//技能
			drawBelongs(4, g);
			break;
		}
		g.drawString(type, 63, 0, Graphics.TOP | Graphics.HCENTER);

	}

	private void drawLoadingLevel(Graphics g) {
		g.drawImage(ResourceLoader.menu[0], width / 2, height / 2,
				Graphics.HCENTER | Graphics.VCENTER);
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
				Font.SIZE_LARGE));
		g.drawString(ResourceLoader.StringResource[26], width / 2, 90,
				Graphics.HCENTER | Graphics.TOP);
	}

	/**
	 *  
	 */
	private void drawAbout(Graphics g) {
		// TODO 自动生成方法存根
		g.drawImage(ResourceLoader.menu[0], 0, 0, 0);
		g.drawImage(ResourceLoader.menu[3], width / 2, 63, Graphics.HCENTER
				| Graphics.TOP);
		g.setColor(255, 255, 255);
		g.drawString(ResourceLoader.StringResource[17], width / 2, 90,
				Graphics.HCENTER | Graphics.TOP);
		g.drawString(ResourceLoader.StringResource[18], width / 2, 110,
				Graphics.HCENTER | Graphics.TOP);

		g.drawString(ResourceLoader.StringResource[19], width / 2, 150,
				Graphics.HCENTER | Graphics.TOP);
	}

	/**
	 *  
	 */
	private void drawHelp(Graphics g) {
		// TODO 自动生成方法存根
		g.drawImage(ResourceLoader.menu[0], 0, 0, 0);

		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_SMALL));
		g.drawString(ResourceLoader.StringResource[16], width / 2, 10,
				Graphics.HCENTER | Graphics.TOP);
		g.drawString(ResourceLoader.StringResource[43], width / 2, 30,
				Graphics.HCENTER | Graphics.TOP);
		g.drawString(ResourceLoader.StringResource[44], width / 2, 50,
				Graphics.HCENTER | Graphics.TOP);
		g.drawString(ResourceLoader.StringResource[45], width / 2, 70,
				Graphics.HCENTER | Graphics.TOP);

	}

	/**
	 *  
	 */
	private void drawMainMenu(Graphics g) {
		// TODO 自动生成方法存根
		g.setColor(255, 255, 255);
		g.drawImage(ResourceLoader.menu[0], width / 2, 0, Graphics.HCENTER
				| Graphics.TOP);
		g.drawImage(ResourceLoader.menu[9], width / 2, 0, Graphics.HCENTER
				| Graphics.TOP);

		this.paintMenu(g, ResourceLoader.StringResource[11], width / 2, 80,
				curMenuIndex == 0);
		if (hasStored) {
			this.paintMenu(g, ResourceLoader.StringResource[12], width / 2, 96,
					curMenuIndex == 1);
			this.paintMenu(g, ResourceLoader.StringResource[13], width / 2,
					112, curMenuIndex == 2);
			this.paintMenu(g, ResourceLoader.StringResource[14], width / 2,
					128, curMenuIndex == 3);
			this.paintMenu(g, ResourceLoader.StringResource[15], width / 2,
					144, curMenuIndex == 4);
		} else {

			this.paintMenu(g, ResourceLoader.StringResource[13], width / 2, 96,
					curMenuIndex == 1);
			this.paintMenu(g, ResourceLoader.StringResource[14], width / 2,
					112, curMenuIndex == 2);
			this.paintMenu(g, ResourceLoader.StringResource[15], width / 2,
					128, curMenuIndex == 3);
		}
	}

	public void constructsFightMap() {

		fightLayerManager = new LayerManager();

		fightLayerManager.append(myPlayer
				.getSprite(Player.STATUS_BEFORE_ATTACK));
		fightLayerManager.append(this.ranEnemy.sprite);

		fightBackGround = engine.getRandomFightBg();
		fightLayerManager.append(fightBackGround);

		this.beforeFightHp = myPlayer.hp;
		this.beforeFightMp = myPlayer.mp;
		this.beforeFightExp = myPlayer.exp;
		this.beforeFightMoney = myPlayer.money;
		this.beforeFightHp_npc = this.ranEnemy.hp;
		curMenuIndex = 0;
	}

	/**
	 *  
	 */
	private void drawFightScene(Graphics g) {
		fightLayerManager.paint(g, 0, 0);

		g.drawImage(ResourceLoader.menu[11], 0, 208, Graphics.LEFT
				| Graphics.BOTTOM);
		g.drawImage(ResourceLoader.menu[10], 176, 0, Graphics.RIGHT
				| Graphics.TOP);
		g.setColor(255, 255, 255);
		g.drawString("HP:", 7, 175, 0);
		g.drawString("MP:", 7, 195, 0);

		g.drawString(this.ranEnemy.name, 120, 5, 0);
		//	
		g.setColor(255, 0, 0);
		g.drawRect(130, 22, 30, 5);
		g.fillRect(130, 22, this.ranEnemy.hp * 30 / this.beforeFightHp_npc, 5);

		g.drawRect(30, 177, 30, 5);

		g.drawRect(30, 197, 30, 5);

		g.fillRect(30, 177, myPlayer.hp * 30 / this.beforeFightHp, 5);
		g.fillRect(30, 197, myPlayer.mp * 30 / this.beforeFightMp, 5);
		if (!popSkill) {

			g
					.drawImage(ResourceLoader.menu[12], 73 + curMenuIndex * 33,
							172, 0);

		} else {
			g.drawImage(ResourceLoader.menu[13], 0, 0, 0);
			Vector skills = myPlayer.skillVec;

			int x = 42;
			int y = 20;
			g.setColor(255, 255, 255);
			if (skills.size() > 0) {
				Skill skill = null;
				for (int i = 0; i < skills.size(); i++) {
					skill = (Skill) skills.elementAt(i);
					paintMenu(g, skill.name, x + 5, y, curMenuIndex2 == i);

					y += 16;

				}

			}

		}

	}

	/**
	 *  
	 */
	private void drawGameOver(Graphics g) {
		g.drawImage(ResourceLoader.menu[3], getWidth() / 2, 60,
				Graphics.HCENTER | Graphics.TOP);
		g.setColor(255, 255, 255);
		g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
				Font.SIZE_SMALL));
		g.drawString(ResourceLoader.StringResource[23], width / 2, 90,
				Graphics.HCENTER | Graphics.TOP);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.gamecollege.j2me.rpg.RPGGameCanvas#tick()
	 */
	protected void tick() {

		if (getGameStatus() == STATUS_WALKING) {

			Map map = this.curLevel.curMap;
			int mapWidth = map.cols * curLevel.tileWidth;
			int mapHeight = map.rows * curLevel.tileHeight;
			Sprite walkSprite = myPlayer.getSprite(Player.STATUS_WALK);
			//防止英雄走出地图
			if (walkSprite.getX() < 0
					|| walkSprite.getX() + walkSprite.getWidth() > mapWidth) {
				myPlayer.undoMove();
			}
			if (walkSprite.getY() < 0
					|| walkSprite.getY() + walkSprite.getHeight() > mapHeight) {
				myPlayer.undoMove();
			}
			//地图障碍
			TiledLayer ctl = map.collisionArea;
			if (walkSprite.collidesWith(ctl, true)) {
				myPlayer.undoMove();
			}

			//碰到NPC和道具
			Vector objs = map.rpgObjects;
			for (int i = 0; i < objs.size(); i++) {
				RPGObject obj = (RPGObject) objs.elementAt(i);
				if (obj.sprite.collidesWith(walkSprite, true)) {

					if (obj instanceof NPC) {
						handleCrashNpc((NPC) obj);
					} else if (obj instanceof Property) {
						Property p = (Property) obj;
						handleCrashProperty(p);
					}
				}
			}

			//碰到连接区,地图转移
			Enumeration e = curLevel.links.elements();
			while (e.hasMoreElements()) {
				Linker linker = (Linker) e.nextElement();
				if (linker.belongMapID == map.mapNo
						&& linker.crashHero(myPlayer, curLevel.tileWidth,
								curLevel.tileHeight)) {
					curLevel.changeMap(linker, myPlayer);
					break;
				}
			}

			//视窗移动,ox,oy为主角中心位置
			int ox = walkSprite.getX()+walkSprite.getWidth()/2 - width / 2;
			int oy = walkSprite.getY()+walkSprite.getHeight()/2 - height / 2;

⌨️ 快捷键说明

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