LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: PostQuitMessage(0); break; case VK_LEFT: TurnPlayer(-500); break; case VK_RIGHT: TurnPlayer(500); break; case VK_UP: MovePlayer(5); break; case VK_DOWN: MovePlayer(-5); break; case VK_TAB: ToggleDebug(); break; } break; case WM_CLOSE: DestroyWindow(g_hwnd); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } }
void BattleSystem::Encounter( Character& player, Character& AI ) const { std::string events; std::string output; bool flee = false; auto ExitCondition = [] ( const std::array<bool, 3> conditions ) { static const std::array<std::string, 3> output { "lose!\n", "win!\n", "flee the battle!\n" }; for( int i = 0, limit = conditions.size( ); i < limit; i++ ) { if( conditions[i] ) { std::cout << "\nYou " << output[i]; std::cout << "Press enter to continue: "; SelectEnter( ); return true; } } return false; }; while( true ) { ClearScreen( ); output.clear( ); output .append( "> BATTLE <\n- " ) .append( player.name ) .append( " vs " ) .append( AI.name ) .append( "!\n\n> EVENTS <\n" ) .append( events ) .append( "\n> HEALTH <\n- " ) .append( player.name ) .append( ": " ) .append( GetStringHealth( player.health ) ) .append( "\n- " ) .append( AI.name ) .append( ": " ) .append( GetStringHealth( AI.health ) ) .append( "\n\n> ACTION <\n" ); std::cout << output; if( ExitCondition( { !player.active, !AI.active, flee } ) ) { break; } events.clear( ); events += UpdateEffects( player ); events += UpdateEffects( AI ); events += TurnPlayer( player, AI, output, flee ); events += TurnAI( AI, player ); player.Update( ); AI.Update( ); } }