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

📄 gamecanvas.java

📁 手机版大航海时代
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		// 初始化玩家属性
		formatPlayer();
		// 开始剧情文字
		gutString = "丹尼20岁的那天,他的家乡被海盗沙尔顿侵略了,丹尼侥幸的活了下来。他决定用自己的力量将海盗沙尔顿消灭,从而保护在这片海域生活的人民。于是他驾驶着父亲的商船开始了他的人生。";

		// 初始化图片
		try {
			// 导入地图
			map_0 = Image.createImage("/images/map.png");
			// 导入玩家
			player = Image.createImage("/images/boat.png");
			// 导入剧情背景
			gutBack = Image.createImage("/images/about.png");
			// 导入游戏运行中菜单
			runningMenu = Image.createImage("/images/runningMenu1.png");
			// 导入选框图片
			imageChoose = Image.createImage("/images/choose.png");
			// 导入提示框图片
			cueImage = Image.createImage("/images/cue.png");
			// 导入对话图片
			speak = Image.createImage("/images/speak.png");
			// 导入修理升级界面
			buy = Image.createImage("/images/buy.png");
			// 导入是和否按钮图片
			yes = Image.createImage("/images/yes.png");
			no = Image.createImage("/images/no.png");
			// 导入港口NPC头像图片
			npcHead = Image.createImage("/images/head.png");
			// 导入查看属性图片
			property = Image.createImage("/images/property.png");
			// 导入战斗背景图片
			actionImage = Image.createImage("/images/actionCanvas.png");
			// 导入战斗画面玩家船只图片
			actionPlayerImage = Image.createImage("/images/player.png");
			// 导入战斗画面海盗船图片
			actionNpcImage = Image.createImage("/images/npc1.png");
			// 导入选择攻击模式选项
			actionFashion = Image.createImage("/images/actionfashion.png");
			// 导入炮弹图片
			shotImage = Image.createImage("/images/shot.png");
			// 导入爆炸图片
			boomImage = Image.createImage("/images/boom.png");
			// 导入战斗胜利或者失败图片
			actionWinImage = Image.createImage("/images/win.png");
			actionLostImage = Image.createImage("/images/lost.png");
			// 导入Boss图片
			bossImage = Image.createImage("/images/boss.png");
			// 导入战斗中Boss图片
			bossActionImage = Image.createImage("/images/bossimage.png");
			// 导入字体图片
			FontIn = Image.createImage("/images/FontIn.png");
			// 导入离开港口
			FontLift = Image.createImage("/images/FontLift.png");
			// 导入边框图片
			runs = Image.createImage("/images/runs.png");
			// 导入交易界面图片
			abc = Image.createImage("/images/abc.png");
			// 导入商品图片
			shangPin = Image.createImage("/images/shangping.png");

			// 导入游戏结束图片
			gameOverImage = Image.createImage("/images/gameover.png");
			// 导入任务信息
			InputStream is = this.getClass().getResourceAsStream("/task.txt");
			InputStream is1 = this.getClass().getResourceAsStream(
					"/taskcue.txt");
			byte data[] = new byte[7000];
			byte data2[] = new byte[2000];
			int index = is.read(data);
			int index1 = is1.read(data2);
			byte data1[] = new byte[index];
			byte data3[] = new byte[index1];
			System.arraycopy(data, 0, data1, 0, index);
			System.arraycopy(data2, 0, data3, 0, index1);
			// 关闭流
			is.close();
			is1.close();
			// 接收任务信息
			String tempTask = new String(data1, "UTF-8");
			// 接收任务提示信息
			String tempTaskCue = new String(data3, "UTF-8");
			int num = 0, num1 = 0, num2 = 0, num3 = 0;
			// 获取跑商任务及跑商任务提示信息
			int len = task.length;
			for (int i = 0; i < len; i++) {
				num1 = tempTask.indexOf("*", num);
				num3 = tempTaskCue.indexOf("*", num2);
				task[i] = tempTask.substring(num, num1);
				taskCue[i] = tempTaskCue.substring(num2, num3);
				num = num1 + 3;
				num2 = num3 + 3;
			}
			// 获取主线任务信息
			len = mainTaskInfo.length;
			for (int i = 0; i < len; i++) {
				num1 = tempTask.indexOf("*", num);
				mainTaskInfo[i] = tempTask.substring(num, num1);
				num = num1 + 3;
			}
			// 获取主线任务提示信息
			len = mainTaskCue.length;

			for (int i = 0; i < len; i++) {
				num3 = tempTaskCue.indexOf("*", num2);
				mainTaskCue[i] = tempTaskCue.substring(num2, num3);
				num2 = num3 + 3;
			}

			tempTask = null;
			tempTaskCue = null;
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 获得提示框y坐标
		cy = height - cueImage.getHeight();
		// 设置当前状态为海上
		isSeaRepair = true;
		f = Font
				.getFont(Font.FACE_MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_SMALL);
		strHeight = f.getHeight();
		strWidth = f.stringWidth("大");
		// 初始化任务对应港口信息
		formatRunShangAim();
		// mainTask[1] = 1;
		// runShangTask[0] = 1;
		// runShangTask[1] = 16;
		// ///// 构造方法新增加内容/////////////////////////////////////////////
		// for (int i = 0; i < mainTaskInfo.length; i++) {
		// System.out.println(mainTaskInfo[i]);
		// }
		// 初始化游戏结束图片的起始位置为屏幕底端
		gameOverY = height + gameOverImage.getHeight();
		// 创建随机对象
		random = new Random();
		// 初始化炮弹位置
		shotX1 = width - 80 + actionPlayerImage.getWidth() / 2;
		shotY = height / 2 + actionPlayerImage.getHeight() / 2;
		shotX2 = 20 + actionPlayerImage.getWidth() / 2;
		// 启动线程
		new Thread(this).start();
		/** ********************测试************************** */
		// 初始化x,y坐标
		x = 50;
		y = 50;
		// for (int i = 0; i < mainTaskInfo.length; i++) {
		// System.out.println(mainTaskInfo[i]);
		// }
	}

	public GameCanvas(String str) {
		this();
		// 设置游戏为开始状态
		isRuning = true;
		scene = 0;
		loadGame();
	}

	/**
	 * 当按键按下时
	 * 
	 * @param keyCode按下按键对应的键值
	 */
	protected void keyPressed(int keyCode) {
		action = this.getGameAction(keyCode);
		// 当游戏正常运行时
		if (isRuning) {
			// 根据当前scene的值判断执行按键处理
			switch (scene) {
			case 0: // 航行界面
				keySailing(action, keyCode);
				break;
			case 1: // 对战界面
				keyAction(action, keyCode);
				break;
			case 2: // 进入港口界面

				// 设置修理状态
				isSeaRepair = false;
				keyInPort(action, keyCode);
				break;
			case 3: // NPC对话界面
				kedog(action, keyCode);
				break;
			case 4: // 跑商界面
				keyRunShang(action, keyCode);
				break;
			case 5: // 游戏菜单界面

				// 设置修理状态
				isSeaRepair = true;
				keyGameMenu(action, keyCode);
				break;
			case 6: // 查看船体属性界面
				keyProperty(action);
				break;
			case 7: // 保存游戏界面
				keySaveTheGame(action, keyCode);
				break;
			case 8: // 查看当前任务界面

				// 直接返回正常航行状态
				draw = true;
				mainTaskCueTemp = null;
				scene = 0;
				break;
			case 9: // 交易与船只升级界面
				keyBuy(action, keyCode);
				break;
			case 10: // 修理界面
				keyRepair(action, keyCode);
				break;
			case 11: // 提示框
				keyTiShi(keyCode);
				break;
			case 12:

				// 根据修理状态,返回相应界面,海上状态返回游戏运行菜单界面,如果是正常修理,返回进入港口界面
				if (isSeaRepair) {
					scene = 5;
				} else {
					scene = 2;
				}
				break;
			case 13: // 跑商任务确定

				// 初始化选择序号
				runShangSelect = 0;
				scene = 2;
				runShangCueTemp = null;
				break;
			case 14: // 跑商任务奖励信息界面
				scene = 2;
				break;
			case 15: // 弹药不足提示界面按键处理
				scene = 1;
				break;
			case 16: // 逃跑提示界面
				if (flee) { // 逃跑成功直接返回正常航行界面
					scene = 0;
				} else { // 逃跑失败,丧失本轮攻击机会~海盗船攻击
					theAction(0, true);
					scene = 1;
					actionCourse = 2;
				}
				break;
			case 17: // 战斗结束界面
				if (actionResult == 0 && runShangTask[0] == 0) {
					// 游戏结束界面
					scene = 30;
				} else {
					// 战斗结束后的战况界面
					scene = 18;
					draw = true;
				}
				break;
			case 18: // 战况查看按键处理
				if (actionResult == 0) { // 战斗失败
					if (power[6] - 200 > 0) {
						power[6] -= 200;
					} else {
						power[6] = 0;
					}
					if (power[7] - 5 > 0) {
						power[7] -= 5;
					} else {
						power[7] = 0;
					}
					// 设置当前血量为总血量的一半
					power[9] = power[1] / 2;
					// 清除当前跑商任务
					runShangTask[0] = 0;
				} else if (actionResult == 1) { // 战斗胜利
					power[6] += tempNpc[3];
					power[7] += tempNpc[5];
				}
				scene = 0;
				actionResult = -1;
				draw = true;
				break;
			// 升级要求提示信息界面
			case 19:
				keybat(keyCode, action);
				break;
			// 无法进入当前隐藏地图提示界面
			case 20:
				scene = 0; // 返回主海域正常航行状态
				draw = true;
				break;
			case 21:// 是否进入赌场按键处理
				keySok(keyCode, action);
				break;
			case 22:// 赌场按键处理
				keyGambing(keyCode, action);
				break;
			case 23:// 确认购买商品按键处理
				keyshang(keyCode, action);
				break;
			case 24:// 购买商品按键处理
				keybuyshangping(keyCode, action);
				break;
			case 25:// 购买是否成功提示信息界面按键处理
				keydm();
				break;

			case 30:// 游戏结束按键处理
				keyGameOver();
				break;
			}
		}
	}

	/**
	 * 随即生成1-10之间的随即整数
	 * 
	 * @param a
	 *            int 玩家当前的点数
	 * @return int 玩家增加后的点数
	 */
	public int Gambing(int a) {
		a += random.nextInt() % 5 + 5;
		return a;
	}

	/**
	 * 重新开始游戏还原游戏设置
	 */
	public void reStart() {
		AI = false;
		pNumber = 0;
		aNumber = 0;
		showFont = false;
		isWin = false;
		isShow = true;

	}

	/**
	 * 赌博界面按键处理
	 * 
	 * @param keyCode
	 *            int 键值
	 * @param action
	 *            int 游戏动作
	 */
	public void keyGambing(int keyCode, int action) {
		// 如果再来一次的话
		if (isWin) {
			// 还原默认值
			reStart();
			return;
		}
		// 如果选择是的话
		if (showFont) {
			// 根据玩家按键
			switch (action) {
			// 向左
			case LEFT:
				if (repairLabel > 0) {
					repairLabel = 0;
				} else {
					repairLabel = 1;
				}
				break;
			// 向右
			case RIGHT:
				if (repairLabel < 1) {
					repairLabel = 1;
				} else {
					repairLabel = 0;
				}
				break;
			}
		} else {
			// 根据游戏动作
			switch (action) {
			// 左
			case LEFT:

				// 所在的位置不是最左边一个的时候
				if (color > 0) {
					color--;
				} else {
					// 还原为最右边的
					color = 3;
				}
				break;
			// 右
			case RIGHT:

				// 如果不是最右边的时候
				if (color < 3) {
					color++;
				} else {
					// 还原为最左边的
					color = 0;
				}
				break;
			}
		}
		// 当按下确定的时候
		if (keyCode == -7) {
			// 显示 是和否的字体
			showFont = true;
			// 玩家控制状态下
			isShow = true;
			// 提示信息
			dm = "还需要再来一张吗";
			// 根据玩家选择 0为是 1为否
			switch (repairLabel) {
			case 0:

				// 如果玩家选择不再要张的时候
				switch (color) {
				case 3:

					// 进入NPC操作状态
					AI = true;
					break;
				}

				// 如果玩家的点数小于21点的时候
				if (pNumber < 21) {
					// 提示玩家是否再来一张
					dm = "还需要再来一张吗";
					// 进行时间处理
					pNumber = Gambing(pNumber);
				}

				// 如果超过21点
				if (pNumber > 21) {
					// 提示玩家输了,要不要再来一局
					dm = "你输了,再来一局吗";
					// 还原默认值
					isAgain = true;
					// 根据玩家选择的金钱扣掉相应的钱
					if (power[6] > 0) {

⌨️ 快捷键说明

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