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; }
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; } } } } } } } }