Example #1
0
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( );
    }
}