battlesystem

 avatar
unknown
c_cpp
4 years ago
3.2 kB
5
Indexable
#include "player.hpp"
#include <random>

int UserTurn(Player& player, Player& enemy);
int EnemyTurn(Player& player, Player& enemy);
void Battle(Player& player, Player& enemy);

std::random_device rd{};
std::mt19937 engine (rd());
std::uniform_int_distribution<int> distribution{1,5};

int main() {
    std::cout << "Welcome to the Mango battle arena!" << std::endl;

    std::string PlayerName{};
    std::string EnemyName{};

    std::cout << "\nPlease enter your name: ";
    std::cin >> PlayerName;

    Player Mango{PlayerName};
    
    std::cout << "\nEnter the name of the one you despise the most: ";
    std::cin >> EnemyName;
    
    Player Enemy{EnemyName};

    Battle(Mango, Enemy);
     
}

int UserTurn(Player& player, Player& enemy) {
    char UserInput;
    
    std::cout << "\nChoose your action: \n"
              << "1. Punch\n"
              << "2. Kick\n" << std::endl;

    if (std::cin >> UserInput) {
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        switch (UserInput) {
            case '1':
                std::cout << "\n" << player.getPlayerName() << " uses punch!" << std::endl;
                player.Punch(enemy);
                break;
            case '2':
                std::cout << "\n" << player.getPlayerName() << " uses kick!" << std::endl;
                player.Kick(enemy);
                break;
            default:
                std::cout << "Invalid input. Try again\n" << std::endl;
                UserTurn(player, enemy);
        }
    }

    // else if (std::cin.fail()) {
    //     std::cin.clear();
    //     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    //     std::cout << "\nInvalid input. Please try again" << std::endl;
    //     UserTurn(player, enemy);
    // }

    else {
        UserTurn(player, enemy);
    }

    return enemy.getHP();
}

int EnemyTurn(Player& player, Player& enemy) {

    int enemyInput {distribution(engine)};
    std::cout << '\n' << enemyInput << std::endl;

    switch (enemyInput) {
        case 1:
            std::cout << "\n" << enemy.getPlayerName() << " uses scratch!" << std::endl;
            enemy.Scratch(player);
            break;
        case 2:
            std::cout << "\n" << enemy.getPlayerName() << " uses bite!" << std::endl;
            enemy.Bite(player);
            break;
        case 3:
            std::cout << "\nThis is case 3" << std::endl;
            break;
        case 4:
            std::cout << "\nThis is case 4" << std::endl;
            break;
        case 5:
            std::cout << "\nThis is case 5" << std::endl;
            break;
    }

    return player.getHP();
}
    
void Battle(Player& player, Player& enemy) {
    while (true) {
        if (UserTurn(player, enemy) <= 0) {
            std::cout << "\nYou have WON! " << player.getPlayerName() << " is victorious!!" << std::endl;
            break;
        }
        if (EnemyTurn(player, enemy) <= 0) {
            std::cout << "\nYou have LOST! " << enemy.getPlayerName() << " has kicked your butt!!" << std::endl;
            break;
        }
    }   
}
Editor is loading...