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

📄 gamecanvas.java

📁 几个不错的手机程序例子
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}

	/** 线程的运作部分 */
	public void run() {
		try {
			switch(gameState) {
				case ROUND_START:		//回合开始时
					//进行回合开始显示
					repaint();
					Thread.sleep(1500);
					//新增指令
					addCommand(quitCmd);
					addCommand(pauseCmd);
					//将状态设为回合中,直接转移到回合中
					gameState = FIGHTING;

				case FIGHTING:			//回合中
					while(! isStopped) {
						repaint();
						//移动玩家
						player.doMove();
						//移动对手
						enemy.doMove();
						//变更对手的状态
						doChangeEnemy();
						//等待间隔
						Thread.sleep(DRAW_INTERVAL);
					}

					if(gameState == ROUND_END) {
					//结束回合时
						//因为显示的关系,所以暂时将状态设为回合中
						gameState = FIGHTING;
						//删除指令
						removeCommand(pauseCmd);
						removeCommand(resumeCmd);
						removeCommand(quitCmd);
						//进行重新描绘而待命一下子
						repaint();
						Thread.sleep(1000);
						//将游戏循环结束
						doGameStop();
						//将状态设回为回合结束
						gameState = ROUND_END;

						//检查玩家与对手的生命点数
						int playerLife = player.getLifePoint();
						int enemyLife = enemy.getLifePoint();
						if(playerLife > enemyLife) {
						//玩家的胜利
							result = WIN;
							enemy.setCurrentState(Boxer.KNOCK_DOWN);
							repaint();
							if(round == MAX_ROUND) {
							//最后回合时
								//进行全回合过关处理
								Thread.sleep(1500);
								gameState = ALL_ROUND_CLEAR;
								repaint();
								Thread.sleep(5000);
								doTitle();
							}else {
							//还有回合时
								//将剩馀的生命点数附加到下一回合的生命点数中
								//开始下一回合
								Thread.sleep(2000);
								doRoundInit();
								player.setLifePoint(player.getLifePoint() +playerLife);
								round++;
								gameState = ROUND_START;
								doThreadStart();
							}
						}else {
						//玩家的失败
							//进行失败显示,在待命一定时间后回到标题画面
							result = LOSE;
							player.setCurrentState(Boxer.KNOCK_DOWN);
							repaint();
							Thread.sleep(5000);
							doTitle();
						}
					}
					break;
			}
		}catch(Exception e) {}
	}

	/** 变更对手状态的方法 */
	private void doChangeEnemy() {
		if(	enemy.getCurrentState() == Boxer.PANCH_UP ||
			enemy.getCurrentState() == Boxer.PANCH_DOWN)
		{
		//挥出拳击时为return
			return;
		}

		//为了不连续出拳而加重一回负荷处理
		if(isEnemyPanch) {
			isEnemyPanch = false;
			return;
		}

		//检查玩家的状态
		switch(player.getCurrentState()) {
			case Boxer.PANCH_UP:	//玩家挥出上拳击
				switch(enemy.getCurrentState()) {
					case Boxer.GUARD_UP://对手为上段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							case 3:
							//保持原状
							break;

							case 1:
							//以上段拳击进行反击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.GUARD_DOWN://对手为下段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 5) {
							case 0:
							//以上段拳击来反击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;

							case 1:
							//以下段拳击来反击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;

							case 2:
							case 4:
							//上段防御
								enemy.setCurrentState(Boxer.GUARD_UP);
							break;

							case 3:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;
				}
			break;

			case Boxer.PANCH_DOWN:	//玩家为下段拳击
				switch(enemy.getCurrentState()) {
					case Boxer.GUARD_UP://对手为上拳击
						//以乱数决定下一个动作
						switch(random.nextInt() % 5) {
							case 0:
							//以上段拳击来反击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;

							case 1:
							//以下段拳击来反击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;

							case 2:
							case 4:
							//下段防御
								enemy.setCurrentState(Boxer.GUARD_DOWN);
							break;

							case 3:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.GUARD_DOWN://对手为下段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							case 3:
							//保持原状
							break;

							case 1:
							//以下段拳击来反击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;
				}
			break;

			case Boxer.GUARD_UP:	//玩家为上段防御
				switch(enemy.getCurrentState()) {
					case Boxer.GUARD_UP://对手为上段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							//保持原状
							break;

							case 1:
							case 3:
							//下拳击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.GUARD_DOWN://对手为下段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							//保持原状
							break;

							case 1:
							case 3:
							//下段拳击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.BACK_STEP://对手为后退
						//以乱数决定下一个动作
						switch(random.nextInt() % 3) {
							case 0:
							case 1:
							//保持原状
							break;

							case 2:
							//下段拳击
								enemy.setCurrentState(Boxer.PANCH_DOWN);
								doLifepointCheck4Player();
							break;
						}
					break;
				}
			break;

			case Boxer.GUARD_DOWN:	//玩家为下段防御
				switch(enemy.getCurrentState()) {
					case Boxer.GUARD_UP://对手为上段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							//保持原状
							break;

							case 1:
							case 3:
							//上段拳击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.GUARD_DOWN://对手为下段防御
						//以乱数决定下一个动作
						switch(random.nextInt() % 4) {
							case 0:
							//保持原状
							break;

							case 1:
							case 3:
							//上拳击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;

							case 2:
							//后退
								enemy.setCurrentState(Boxer.BACK_STEP);
							break;
						}
					break;

					case Boxer.BACK_STEP://对手为后退
							//以乱数决定下一个动作
						switch(random.nextInt() % 3) {
							case 0:
							case 1:
							//保持原状
							break;

							case 2:
							//上段拳击
								enemy.setCurrentState(Boxer.PANCH_UP);
								doLifepointCheck4Player();
							break;
						}
					break;
				}
			break;

			case Boxer.BACK_STEP://玩家为后退
				//以乱数决定下一个动作
				switch(random.nextInt() % 5) {
					case 0:
					//上段拳击
						enemy.setCurrentState(Boxer.PANCH_UP);
						doLifepointCheck4Player();
					break;

					case 1:
					//下段拳击
						enemy.setCurrentState(Boxer.PANCH_DOWN);
						doLifepointCheck4Player();
					break;

					case 2:
					//上段防御
						enemy.setCurrentState(Boxer.GUARD_UP);
					break;

					case 3:
					//下段防御
						enemy.setCurrentState(Boxer.GUARD_DOWN);
					break;

					case 4:
					//保持原状
					break;
				}
			break;
		}
	}

	/**
	 * 当玩家挥出拳击时,根据对手的状态
	 * 来进行处理的方法
	 */
	private void doLifepointCheck4Enemy() {
		//检查玩家的状态
		switch(player.getCurrentState()) {
			case Boxer.PANCH_UP:	//玩家为上段拳击时
				switch(enemy.getCurrentState()) {
					case Boxer.PANCH_UP:
					case Boxer.PANCH_DOWN:
					case Boxer.GUARD_DOWN:
					//对手为上段拳击、下段拳击、下段防御时
						//将对手的生命点数减去最低损害值
						int tmpLifePoint = enemy.getLifePoint() -DAMAGES[0];
						if(tmpLifePoint <= 0) {
						//当生命点数为0时
							//进行回合过关处理
							enemy.setLifePoint(0);
							doRoundClear();
						}else {
						//还有剩馀生命点数时
							enemy.setLifePoint(tmpLifePoint);
						}
					break;
				}
			break;
			case Boxer.PANCH_DOWN:	//玩家为下拳击时
				switch(enemy.getCurrentState()) {
					case Boxer.PANCH_DOWN:
					case Boxer.PANCH_UP:
					case Boxer.GUARD_UP:
					//对手为上段拳击、下段拳击、下段防御时
						//将对手的生命点数减去最低损害值
						int tmpLifePoint = enemy.getLifePoint() -DAMAGES[0];
						if(tmpLifePoint <= 0) {
						//当生命点数为0时
							//进行回合过关处理
							enemy.setLifePoint(0);
							doRoundClear();
						}else {
						//还有剩馀生命点数时
							enemy.setLifePoint(tmpLifePoint);
						}
					break;
				}
			break;
		}
	}

	/**
	 * 当对手挥出拳击时,根据玩家的状态
	 * 来进行处理的方法
	 */
	private void doLifepointCheck4Player() {
		//检查对手的状态
		switch(enemy.getCurrentState()) {
			case Boxer.PANCH_UP:	//对手为上段拳击时
				//将拳击中标志设为true
				isEnemyPanch = true;
				switch(player.getCurrentState()) {
					case Boxer.PANCH_UP:
					case Boxer.PANCH_DOWN:
					case Boxer.GUARD_DOWN:
					//玩家为上段拳击、下段拳击、下段防御时
						//将玩家的生命点数减去最低损害值
						int tmpLifePoint = player.getLifePoint() -DAMAGES[round -1];
						if(tmpLifePoint <= 0) {
						//当生命点数为0以下时
							//进行回合过关处理
							player.setLifePoint(0);
							doRoundClear();
						}else {
						//当生命点数有剩馀时
							player.setLifePoint(tmpLifePoint);
						}
					break;
				}
			break;
			case Boxer.PANCH_DOWN:	//对手为下段拳击时
				//将拳击中标志设为true
				isEnemyPanch = true;
				switch(player.getCurrentState()) {
					case Boxer.PANCH_DOWN:
					case Boxer.PANCH_UP:
					case Boxer.GUARD_UP:
					//玩家为上段拳击、下段拳击、下段防御时
						//将玩家的生命点数减去最低损害值
						int tmpLifePoint = player.getLifePoint() -DAMAGES[round -1];
						if(tmpLifePoint <= 0) {
						//当生命点数为0以下时
							//进行回合过关处理
							player.setLifePoint(0);
							doRoundClear();
						}else {
						//当生命点数有剩馀时
							player.setLifePoint(tmpLifePoint);
						}
					break;
				}
			break;
		}
	}

	/** 进行过关处理的方法 */
	private void doRoundClear() {
		doGameStop();
		gameState = ROUND_END;
	}
}

⌨️ 快捷键说明

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