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

📄 game.java

📁 应用j2me技术开发的手机游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	 */
	private int indexX = 10, indexY = 30;// 指针的坐标;
	private int charBX = 0, charBY = 0;// 主角界面图片缓冲区在脱机屏幕的起始坐标;
	private static int cmdw = 30, cmdh = 20;
	private static int cmdrightw = 45;
	public static int cmdrighth = 15;// 宽度和高度;
	private static final int dx = 10, dy = 15;// 行差和列差;
	private static final int cmd[][] = new int[4][2];// 主角界面缓冲区的左侧命令项;x,y坐标;
	private static final int cmdright[][] = new int[8][2];// 主角界面缓冲区右侧各个命令项,共有8个,代表x,y;
	private static final int cmdrd[] = new int[2];// 主角缓冲区右下方命令区;
	private static final int cmdrdw = 100, cmdrdh = 60;
	private Image chara, ind;// 主角与指针的图片;
	private static String str[] = new String[4];// 高亮显示四种菜单 需要的字符串;

	private static final int SELECT = 5;
	private static final int ATRBUT = 0;
	private static final int SKILL = 1;
	private static final int ITEM = 2;
	private static final int ARM = 3;

	private int charState = 5;// 四种状态;静态的变量千万不能乱用,否则不同的对象就会发生大问题了,只有那些各个对象一致集成的才用;
	Image charaBuff;
	private Graphics charBuffg;// 整张主角界面的图片的缓冲区,单独列出来,方便考虑;
	private int listIndex = 0;// 这个就是用来标记那十二个命令的;
	static {

		str[0] = "属性";
		str[1] = "技能";
		str[2] = "物品";
		str[3] = "装备";

		// 这一步完全没有问题;
		cmd[0][0] = 10;
		cmd[0][1] = 30;

		for (int i = 1; i < cmd.length; i++) {// 曾经记录这里坐标判断错误;,必须不能让第一各加40;
			cmd[i][0] = 10;
			cmd[i][1] = cmd[i - 1][1] + 40;
		}

		cmdright[0][0] = 60;// 初始命令的坐标;
		cmdright[0][1] = 15;
		for (int i = 1; i < cmdright.length; i++) {
			if (i % 2 == 0) {
				cmdright[i][0] = cmdright[i - 2][0];
				cmdright[i][1] = cmdright[i - 2][1] + cmdrighth + dy;
			} else {

				cmdright[i][0] = cmdright[i - 1][0] + cmdrightw + dx;
				cmdright[i][1] = cmdright[i - 1][1];
			}
		}

		cmdrd[0] = 65;
		cmdrd[1] = 135;

	}

	/**
	 * @param key
	 *            传入的按键; 功能: 处理主角界面的按键响应; 以后考虑一下用向量进行一一对应吧,那样容易的多;
	 */
	void charcterInput(int key) {
		long time = 0;
		bSell = false;
		switch (key) {
		case UP_PRESSED:

			if (listIndex >= 0 && listIndex < 4) {
				listIndex--;
				if (listIndex == -1)
					listIndex = 3;
				break;
			}
			if (listIndex >= 4 && listIndex <= 11) {
				listIndex -= 2;
				if (listIndex == 2)
					listIndex = 10;
				if (listIndex == 3)
					listIndex = 11;
			}
			break;

		case DOWN_PRESSED:
			if (listIndex >= 0 && listIndex < 4) {
				listIndex++;
				if (listIndex == 4)
					listIndex = 0;
				break;
			}
			if (listIndex >= 4 && listIndex <= 11) {
				listIndex += 2;
				if (listIndex == 12)
					listIndex = 4;
				if (listIndex == 13)
					listIndex = 5;
			}

			break;

		case LEFT_PRESSED:

			if (listIndex >= 4 && listIndex <= 11) {
				listIndex -= 1;
				if (listIndex < 4)
					listIndex = charState;
			}
			break;

		case RIGHT_PRESSED:
			if (listIndex < 4) {
				listIndex = 4;
				break;
			}
			if (listIndex >= 4 && listIndex <= 11) {
				listIndex += 1;
				if (listIndex == 12)
					listIndex = 4;

			}

			break;

		case FIRE_PRESSED: {// 在主角界面的按下命令后,要分别处理上面的各个单元;
			time = System.currentTimeMillis();
			switch (charState) {
			case ATRBUT:
				charAtrbutInput(key);
				break;
			case SKILL:
				charSkillInput(key);
				break;
			case ITEM:
				charItemInput(key);
				break;
			case ARM:
				charArmInput(key);
				break;
			}
			break;
		}

		case GAME_A_PRESSED:

			if (fightInput) {
				mid.s.stopSound();
				//
				GAMESTATE = Const.GAME_FIGHT;
				return;
			}

			if (this.sellOrBuy) {

				GAMESTATE = Const.GAME_SELLORBUY;

				return;
			}

			if (System.currentTimeMillis() - time > 200) {

				GAMESTATE = Const.GAME_SYSTEM;
				break;
			}
		}

		if (listIndex >= 0 && listIndex < 4) {
			indexX = cmd[listIndex][0];
			indexY = cmd[listIndex][1];
		}
		if (listIndex >= 4 && listIndex <= 11) {
			indexX = cmdright[listIndex - 4][0];
			indexY = cmdright[listIndex - 4][1];
		}

	}

	/**
	 * 主角界面的选择
	 */
	void charSelect() {

		switch (listIndex) {
		case 0:
			charState = ATRBUT; // 属性菜单;
			break;
		case 1:
			charState = SKILL;
			// 技能菜单;
			break;
		case 2:
			charState = ITEM;
			// 物品菜单;
			break;
		case 3:
			charState = ARM;
			// 装备菜单;
			break;

		}

	}

	private int pageAtr = 0;

	/**
	 * 主角界面的属性界面命令处理;
	 */
	void charAtrbutInput(int key) {

		if (listIndex == 0) {
			pageAtr++;
			if (pageAtr > 1)
				pageAtr = 0;
		}

	}

	/**
	 * 画属性界面;
	 */
	void drawAtrbut() {
		// charBuffg.drawString(arg0, arg1, arg2, arg3)

		g.drawImage(loadImage("/back.png"), 0, 0, 20);
		lin.judgeAd();
		switch (pageAtr) {
		case 0:
			for (int i = 0; i < cmdright.length; i++) {

				charBuffg.drawString(lin.strAtr[i] + lin.atr[i],
						cmdright[i][0], cmdright[i][1], 20);
			}
			int i = listIndex - 4;
			// 这里用来判断指针在哪儿右部的缓冲区;
			if (listIndex == 0) {// 两种情况,一种是在属性上,另外一种是在其他空格处;
				Const.drawString(charBuffg, Const.gameExplain[0][9], cmdrd[0],
						cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15,
						10, true);
			}
			if (listIndex >= 4) {
				charBuffg.drawImage(showCmd(cmdrightw, cmdrighth, lin.strAtr[i]
						+ lin.atr[i], Font.SIZE_MEDIUM), cmdright[i][0],
						cmdright[i][1], 20);

				Const.drawString(charBuffg, Const.gameExplain[0][i], cmdrd[0],
						cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15,
						10, true);

			}
			break;

		case 1:
			Const.drawString(charBuffg,
					"当前等级:" + lin.lev + " 当前经验  " + lin.exp, cmdright[0][0],
					cmdright[0][1], 2 * cmdrightw, 2 * cmdrighth + 30, false,
					Font.SIZE_MEDIUM, 15, 10, false);
			int nextExp = (1 + lin.lev + 1) * (lin.lev + 1) * 50 - lin.exp;

			Const.drawString(charBuffg, "升级所需要的经验值:" + nextExp, cmdright[4][0],
					cmdright[4][1], 2 * cmdrightw, 2 * cmdrighth, false,
					Font.SIZE_MEDIUM, 20, 10, false);

			charBuffg
					.drawImage(lin.imgplayer, cmdrd[0] + 10, cmdrd[1] + 10, 20);

			break;
		}

	}

	/**
	 * 技能界面的处理;
	 */
	void charSkillInput(int key) {
		if (fightInput) {

			if (listIndex - 4 >= 0)
				if (lin.skill[listIndex - 4] == 1) {
					fightPlayerState = 2 + listIndex - 4;
					GAMESTATE = Const.GAME_FIGHT;
					switch (listIndex - 4) {
					case 0:
						texiaolen = 3;
						break;
					case 1:
						texiaolen = 5;
						break;
					case 2:
						texiaolen = 5;
					case 6:
						texiaolen = 5;
						break;
					}
				}
		}
	}

	/**
	 * 绘制技能界面;
	 */
	void drawSkill() {

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

			if (lin.skill[j] == 1) {
				charBuffg.drawString(Const.Skill[j], cmdright[j][0],
						cmdright[j][1], 20);

			} else
				charBuffg.drawString("未习得", cmdright[j][0], cmdright[j][1], 20);
		}
		int i = listIndex - 4;
		// 这里用来判断指针在哪儿右部的缓冲区;
		if (i == -3) {// 两种情况,一种是在属性上,另外一种是在其他空格处
			Const.drawString(charBuffg, Const.gameExplain[1][9], cmdrd[0],
					cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15, 10,
					true);
		}
		if (i >= 0 && i < 8) {
			if (lin.skill[i] == 1) {
				charBuffg.drawImage(showCmd(cmdrightw, cmdrighth,
						Const.Skill[i], Font.SIZE_MEDIUM), cmdright[i][0],
						cmdright[i][1], 20);// 高亮显示;

				Const.drawString(charBuffg,
						Const.gameExplain[1][i] + "威力:" + (i + 1) * lin.atr[2]
								* lin.atr[3] / 10,// 解说;
						cmdrd[0], cmdrd[1], cmdrdw, cmdrdh, false,
						Font.SIZE_MEDIUM, 15, 10, true);

			} else {
				charBuffg.drawImage(showCmd(cmdrightw, cmdrighth, "未习得",
						Font.SIZE_MEDIUM), cmdright[i][0], cmdright[i][1], 20);
			}
		}

	}

	private int itemId = -1;

	/**
	 * 物品界面的按键处理包括吃后改變人物狀態,消失數量等等;
	 */
	void charItemInput(int key) {

		bSell = false;
		if (listIndex == 2) {
			currentCmdr++;
			if (currentCmdr >= cmdr.length - 1)
				currentCmdr = 0;
		}

		if (listIndex >= 4) {
			int id = cmdr[currentCmdr][listIndex - 4];
			itemId = id;
			if (id >= 0)
				if (this.sellOrBuy) {

					lin.item[itemId]--;
					lin.gold += Const.ItemAndArmPrice[itemId];
					bSell = true;
					return;
					// 如果处于买卖界面的话;

				}
			if (id < 10 && id >= 0) {
				// 这里代表的是该格子里物品的编号,然后让主角去查找他有多少这种物品
				if (lin.item[id] > 0)
					lin.item[id]--;
				if (lin.item[id] == 0)
					cmdr[currentCmdr][listIndex - 4] = -1;

				switch (id) {
				case 0:

					lin.atr[0] += 100;// 这里就是不同的东西进行处理,改变主角的状态;
					if (lin.atr[0] >= lin.atr[2] * lin.atr[4] * 2)
						lin.atr[0] = lin.atr[2] * lin.atr[4] * 2;

					break;
				case 1:

					lin.atr[1] += 20;
					if (lin.atr[1] >= lin.atr[3] * lin.atr[4])
						lin.atr[0] = lin.atr[3] * lin.atr[4];

					break;

				case 2:

					lin.atr[0] += 500;// 这里就是不同的东西进行处理,改变主角的状态;
					if (lin.atr[0] >= lin.atr[2] * lin.atr[4] * 2)
						lin.atr[0] = lin.atr[2] * lin.atr[4] * 2;

					break;
				case 3:

					lin.atr[1] += 100;
					if (lin.atr[1] >= lin.atr[3] * lin.atr[4])
						lin.atr[0] = lin.atr[3] * lin.atr[4];

					break;

				case 4:

					lin.atr[2]++;
					break;
				case 5:

					lin.atr[4]++;
					break;
				case 6:

					lin.atr[3]++;
				case 7:

					lin.atr[5]++;
					break;
				case 8:

					lin.atr[6]++;
					break;
				case 9:

					lin.atr[7]++;
					break;
				}
				return;
			}
			if (id >= 10) {

				switch (id) {
				case 10:

					lin.arm[0] = 10;
					break;
				case 18:

					lin.arm[0] = 18;
					break;
				case 26:

					lin.arm[0] = 26;
					break;

				case 11:

					lin.arm[1] = 11;
					break;
				case 19:

					lin.arm[1] = 19;
					break;
				case 27:

					lin.arm[1] = 27;
					break;

				case 12:
					lin.arm[2] = 12;
					break;
				case 20:
					lin.arm[2] = 20;
					break;
				case 28:
					lin.arm[2] = 28;
					break;

				case 13:
					lin.arm[3] = 13;
					break;
				case 21:
					lin.arm[3] = 21;
					break;
				case 29:
					lin.arm[3] = 29;
					break;

				case 14:
					lin.arm[4] = 14;
					break;
				case 22:
					lin.arm[4] = 22;
					break;
				case 30:
					lin.arm[4] = 30;
					break;

				case 15:
					lin.arm[5] = 15;
					break;
				case 23:
					lin.arm[5] = 23;
					break;
				case 31:
					lin.arm[5] = 31;
					break;

				case 16:
					lin.arm[6] = 16;
					break;
				case 24:
					lin.arm[6] = 24;
					break;
				case 32:
					lin.arm[6] = 32;
					break;

				case 17:
					lin.arm[7] = 17;
					break;
				case 25:
					lin.arm[7] = 25;
					break;
				case 33:
					lin.arm[7] = 33;
					break;
				}

			}

		}
	}

	private int currentCmdr;// 当前在第几栏;

⌨️ 快捷键说明

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