Example #1
0
void GameController::CharacterMoving() 
{
	//The function used to make the character move by w,a,s,d.
	string heroImage=GameHero.GetImage();

	SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
	cout << " " << endl;
	SetPosition(62, 10);
	cout << "  " << flush;

	switch (tolower(hitkey))
		{
		case MOVE_UP:
		{
			GameHero.SetPositionY(GameHero.GetPositionY() - 1); 
			SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
		} break;
		case MOVE_DOWN: 
		{
			GameHero.SetPositionY(GameHero.GetPositionY() +1); 
			SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
		} break;
		case MOVE_LEFT:
		{
			GameHero.SetPositionX(GameHero.GetPositionX() - 1);
			SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
		}break;
		case MOVE_RIGHT:
		{
			GameHero.SetPositionX(GameHero.GetPositionX() + 1);
			SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
		} break;
		default:
		SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
		break;
		}

	cout << heroImage << flush;

}
Example #2
0
void GameController::UsingBattlingMenu()
{
	SetPosition(62, 20);
	cout << "  " << flush;
	bool if_end = false;
	switch (tolower(hitkey))
	{
	case BATTLING_MENU_APPEAR: {
		if (Battle.GetCursorPositionX() == GameHero.GetPositionX() && Battle.GetCursorPositionY() == GameHero.GetPositionY())
		//If the cursor's position is the same as the hero's position
		{
			//The followings will show the information of the hero.
			Battle.SetBattleMenuCursorPositionX(22);
			Battle.SetBattleMenuCursorPositionY(10);
			Scene.DrawBattleMenuOfHero();
			SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
			cout << "->" << flush;

			while (1)
			{
				if (if_end)
				{
					Scene.BattleAreasClear();
					Scene.RedrawCharaters();
					break;//Exit the menu.
				}
				if (_kbhit())
				{
					hitkey = _getch();
					if (hitkey == 'k')
					{
						Scene.BattleAreasClear();
						Scene.RedrawCharaters();
						if_end = true;
						break;
					}
					//The operation of the menu of hero.
					else
					{
						switch (tolower(hitkey))
						{

						case BATTLING_MENU_UP: {
							SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
							cout << "  " << flush;
							if (Battle.GetBattleMenuCursorPositionY() >= 12)
								Battle.SetBattleMenuCursorPositionY(Battle.GetBattleMenuCursorPositionY() - 2);
						}break;
						case BATTLING_MENU_DOWN: {
							SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
							cout << "  " << flush;
							if (Battle.GetBattleMenuCursorPositionY() <= 14)
								Battle.SetBattleMenuCursorPositionY(Battle.GetBattleMenuCursorPositionY() + 2);
						}break;
						case BATTLING_MENU_PRESS:
						{
							//The menu's cursor's position decides what to do next.
							switch (Battle.GetBattleMenuCursorPositionY())
							{
							case 10: {
								Scene.BattleAreasClear();
								Battle.ShowHeroMoveArea(GameHero.GetAbility("movespeed"), { GameHero.GetPositionX(),GameHero.GetPositionY() });
								//Move the hero.
								while (1)
								{
									Battle.CursorFlashing();
									if (if_end)
									{
										break;
									}
									if (_kbhit())
									{
										hitkey = _getch();
										if (tolower(hitkey) == 'k')
										{
											if_end = true;
											break;
										}
										else 
										{
											bool if_move = false;
											if_hero_can_move = false;
											if_move = Battle.IfHeroCanMove(GameHero.GetAbility("movespeed")+1, { GameHero.GetPositionX(),GameHero.GetPositionY() });
											//This function will decide if the hero is inside the range of moving.

											switch (tolower(hitkey))
											{
											case MOVE_UP:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionY(Battle.GetCursorPositionY() - 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;
											}break;
											case MOVE_DOWN:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionY(Battle.GetCursorPositionY() + 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY()); 
												cout << Battle.GetCursorImage() << flush;;
											}break;
											case MOVE_LEFT:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionX(Battle.GetCursorPositionX() - 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;
											}break;
											case MOVE_RIGHT:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionX(Battle.GetCursorPositionX() + 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY()); 
												cout << Battle.GetCursorImage() << flush;
											}break;
											case BATTLING_MENU_PRESS:
											{
												if (if_move)
												{
													//The tip:Sure to end moving?
													Scene.DrawBattleEndMovingWarming();

													while (1)
													{
														if (_kbhit())
														{
															hitkey = _getch();

															if (tolower(hitkey) == 'j')
															{
																Battle.HeroMoveAreaClear();
																Scene.RedrawCharaters();
															}
															else if (tolower(hitkey) == 'k')
															{
																if_move = false;
															}

															if (if_move)
															{
																Scene.BattleEndMovingWarmingClear();
																this->SetPosition(GameHero.GetPositionX(), GameHero.GetPositionY());
																cout << " " << flush;
																this->SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
																GameHero.SetPositionX(Battle.GetCursorPositionX());
																GameHero.SetPositionY(Battle.GetCursorPositionY());
																cout << GameHero.GetImage() << flush;
																Scene.RedrawCharaters();
																if_end = true;
																break;
															}
															else
															{
																Scene.BattleEndMovingWarmingClear();
																Battle.HeroMoveAreaClear();
																Scene.RedrawCharaters();
																if_end = true;
																break;
															}
														}
													}//end while
												}//end if
											}; break;
											}//end swicth
										}//end else
										Scene.RedrawCharaters();
									}//end if(_kbhit())
								}//end while
								Battle.HeroMoveAreaClear();
							}; break;
							case 12: {
								//Attack the enemy.
								Scene.BattleAreasClear();
								Battle.ShowHeroAttackArea(GameHero.GetCurrentWeapen().GetRange() , { GameHero.GetPositionX(),GameHero.GetPositionY() });
								//Move the hero.
								while (1)
								{
									Battle.CursorFlashing();
									if (if_end)
									{
										break;
									}
									if (_kbhit())
									{
										hitkey = _getch();
										if (tolower(hitkey) == 'k')
										{
											if_end = true;
											break;
										}
										else
										{
											bool if_attack = false;
											bool if_move = false;
											if_hero_can_move = false;
											if_hero_can_attack = false;
											if_move = Battle.IfHeroCanMove(GameHero.GetCurrentWeapen().GetRange() + 1, { GameHero.GetPositionX(), GameHero.GetPositionY() });
											//IfHeroCanMove is used to draw the area the hero can attack.
											if_attack = Battle.IfHeroCanAttack(GameHero.GetCurrentWeapen().GetRange()+1, { GameHero.GetPositionX(),GameHero.GetPositionY() });
											//This function will decide if the hero is inside the range of moving.

											switch (tolower(hitkey))
											{
											case MOVE_UP:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionY(Battle.GetCursorPositionY() - 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;
											}break;
											case MOVE_DOWN:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionY(Battle.GetCursorPositionY() + 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;;
											}break;
											case MOVE_LEFT:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionX(Battle.GetCursorPositionX() - 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;
											}break;
											case MOVE_RIGHT:
											{
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												if (if_move)
													cout << "¡õ" << flush;
												else
													cout << " " << flush;
												Battle.SetCursorPositionX(Battle.GetCursorPositionX() + 1);
												SetPosition(Battle.GetCursorPositionX(), Battle.GetCursorPositionY());
												cout << Battle.GetCursorImage() << flush;
											}break;
											case BATTLING_MENU_PRESS:
											{
												if (if_attack)
												{
													//The tip:Sure to end attacking?
													Scene.DrawBattleEndAttackingWarming();

													while (1)
													{
														if (_kbhit())
														{
															hitkey = _getch();

															if (tolower(hitkey) == 'j')
															{
																Battle.HeroAttackAreaClear();
																Scene.RedrawCharaters();
															}
															else if (tolower(hitkey) == 'k')
															{
																if_attack = false;
															}

															if (if_attack)
															{
																Scene.BattleEndAttackingWarmingClear();
																Battle.SetHeroAttackEnemy();
																Battle.SetCurrentAttackType( GameHero.GetCurrentWeapen().GetKind());//Phycis or magic.
																Scene.RedrawCharaters();
																if_end = true;
																break;
															}
															else
															{
																Scene.BattleEndAttackingWarmingClear();
																Battle.HeroAttackAreaClear();
																Scene.RedrawCharaters();
																if_end = true;
																break;
															}
														}
													}//end while
												}//end if
											}; break;
											}//end swicth
										}//end else
										Scene.RedrawCharaters();
									}//end if(_kbhit())
								}//end while
								Battle.HeroAttackAreaClear();
							}; break;
							case 14: {
								//Get the information of the hero.

							}; break;
							case 16: {
								//Exit the menu and go back to the game.
								Scene.BattleAreasClear();
								Scene.RedrawCharaters();
								if_end = true;
							}; break;
							default:break;
							}

						}; break;
						default: break;
						}
					}

					if (!if_end)
					{
						SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
						cout << "->" << flush;
					}
				}
			}
		}
		else
		{
			int i = 0;
			bool IsBlank = true;

			for (i = 0; i != Battle.GetEnemyAmount(); ++i)
			{
				//To find whether any enemy's current position fits the cursor's position.
				if (Battle.GetCursorPositionX() == Battle.GetEnemyAtIndex(i).GetPositionX() && Battle.GetCursorPositionY() == Battle.GetEnemyAtIndex(i).GetPositionY())
				{
					SetPosition(22, 10);
					cout << "->" << flush;
					//The followings will show the information of the enemy.
					Scene.DrawBattleMenuOfEnemy();
					while (1)
					{
						if (_kbhit())
						{
							hitkey = _getch();
							if (hitkey == 'k')
							{
								Scene.BattleAreasClear();
								Scene.RedrawCharaters();
								break;
							}
							else if (hitkey == 'j')
							{
								//Show the information of the enemy.
							}
						}
					}

					IsBlank = false;
					break;//Ignore the rest of the Enemy in the vector.
				}
			}
			//If the cursor's position is the same as the blank
			if (IsBlank)
			{
				//The followings will show the information of some other operations.
				Battle.SetBattleMenuCursorPositionX(22);
				Battle.SetBattleMenuCursorPositionY(9);
				Scene.DrawBattleMenuOfBlank();
				SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
				cout << "->" << flush;
				bool if_end = false;
				while (1)
				{
					if (if_end)
					{
						Scene.BattleAreasClear();
						Scene.RedrawCharaters();
						break;//Exit the menu.
					}
					if (_kbhit())
					{
						
						hitkey = _getch();
						if (hitkey == 'k')
						{
							Scene.BattleAreasClear();
							Scene.RedrawCharaters();
							break;//Exit the menu.
						}

						switch (tolower(hitkey))
						{
						case BATTLING_MENU_UP: {
							SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
							cout << "  " << flush;
							if (Battle.GetBattleMenuCursorPositionY() >= 11)
								Battle.SetBattleMenuCursorPositionY(Battle.GetBattleMenuCursorPositionY() - 2);
						}break;
						case BATTLING_MENU_DOWN: {
							SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
							cout << "  " << flush;
							if (Battle.GetBattleMenuCursorPositionY() <= 15)
								Battle.SetBattleMenuCursorPositionY(Battle.GetBattleMenuCursorPositionY() + 2);
						}break;
						case BATTLING_MENU_PRESS: {
							//The menu's cursor's position decides what to do next.
							switch (Battle.GetBattleMenuCursorPositionY())
							{
							case 9: {
								//End the player's operation of this round and let the computer begin to controll the enemies.
							}; break;
							case 11: {
								//Show the information of the player's troop.
							}; break;
							case 13: {
								//Show the information of the enemy's troop.
							}; break;
							case 15: {
								//Show the condition of victory and failure.
								Scene.BattleAreasClear();
								Scene.DrawBattlePurpose("²âÊÔ", "²âÊÔ");
								while (1)
								{
									if (tolower(_getch()) == 'k')
									{
										Scene.BattlePurposeClear();
										Scene.RedrawCharaters();
										if_end = true;
										break;
									}
								}
							}; break;
							case 17: {
								//Go back to the game.
								Scene.BattleAreasClear();
								Scene.RedrawCharaters();
								if_end = true;
							}; break;
							default:break;
							}
						}break;
						default:break;
						}
						if (!if_end)
						{
							SetPosition(Battle.GetBattleMenuCursorPositionX(), Battle.GetBattleMenuCursorPositionY());
							cout << "->" << flush;
						}
					}
				}
			}
		}
	}
	}
}