В чем ошибки при написании Камень, Ножницы, Бумага на c++

Я начинаю изучать c++, и в качестве одной цели, решил написать всеми известную игру "Камень, ножницы, бумага". Но код не работает, иногда выдает один и тот же ответ все время, иногда просто не выводит ответ. Помогите пожалуйста с решением.

#include <iostream>
#include <windows.h>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    //указание переменных
    srand((unsigned)time(NULL));
    string paper = "Бумага";
    string rock = "Камень";
    string scissors = "Ножницы";
    string answer;
    int random;
    string luck;

    //выбор пользователя
    cout << "Выберите:Камень, Ножницы или Бумага(с заглавной буквы)" << answer << endl;
    cin >> answer;

    //рандомизация и вывод итога
    //камень
    if (answer == "Камень") {
        random = rand() % 3 + 1;

        switch (random)
        {
        case 1:
            luck = paper;
            break;
        case 2:
            luck = rock;
            break;
        case 3:
            luck = scissors;
            break;
        }

        if (luck == paper) {
            cout << "Ваш противник: Бумага. Вы проиграли.";
            Sleep(5000);
            return 1;
        }

        if (luck == rock) {
            cout << "Ваш противник: Камень. Ничья.";
            Sleep(5000);
            return 1;
        }

        if (luck == scissors) {
            cout << "Ваш противник: Ножницы. Вы выиграли.";
            Sleep(5000);
            return 1;
        }
        
    }

    //бумага
    if (answer == "Бумага") {
        random = rand() % 3 + 1;

        switch (random)
        {
        case 1:
            luck = paper;
            break;
        case 2:
            luck = rock;
            break;
        case 3:
            luck = scissors;
            break;
        }

        if (luck == paper) {
            cout << "Ваш противник: Бумага. Ничья.";
            Sleep(5000);
            return 1;
        }

        if (luck == rock) {
            cout << "Ваш противник: Камень. Вы выиграли.";
            Sleep(5000);
            return 1;
        }

        if (luck == scissors) {
            cout << "Ваш противник: Ножницы. Вы проиграли.";
            Sleep(5000);
            return 1;
        }

    }

    //ножницы
    if (answer == "Ножницы") {
        random = rand() % 3 + 1;

        switch (random)
        {
        case 1:
            luck = paper;
            break;
        case 2:
            luck = rock;
            break;
        case 3:
            luck = scissors;
            break;
        }

        if (luck == paper) {
            cout << "Ваш противник: Бумага. Вы выиграли.";
            Sleep(5000);
            return 1;
        }

        if (luck == rock) {
            cout << "Ваш противник: Камень. Вы проиграли.";
            Sleep(5000);
            return 1;
        }

        if (luck == scissors) {
            cout << "Ваш противник: Ножницы. Ничья.";
            Sleep(5000);
            return 1;
        }

    }

}

Ответы (1 шт):

Автор решения: Harry

Очень долго копаться в вашем коде... Просто не выводит ответ — при неверном вводе (это если вообще все с русским работает нормально, в чем я не уверен), один и тот же ответ — ну так выбор небогатый: из трех вариантов. Вполне может генерировать одни и те же значения.

Но я бы сделал примерно так, без этих "спагетти" отлаживать проще...

#include <string>
#include <ctime>
#include <iostream>
using namespace std;

int result(int you, int comp)
{
    int r = you---comp--;
    return r*(3*(you*you+comp*comp)-5)/2;
}

int main() {
    //указание переменных
    srand((unsigned)time(NULL));
    string obj[3] = { "Бумага", "Камень", "Ножницы"};
    string res[3] = { "Вы проиграли.", "Ничья.", "Вы выиграли."};
    string answer;
    int you = -1, comp;
    //выбор пользователя
    cout << "Выберите:Камень, Ножницы или Бумага(с заглавной буквы)"
         << answer << endl;
    cin >> answer;
    for(int i = 0; i < 3; ++i) if (answer == obj[i]) { you = i; break; }
    if (you < 0) { cout << "Неверный выбор!\n"; return 1; }
    comp = rand() % 3;

    cout << "Ваш противник: " << obj[comp] << ". "
         << res[result(you,comp)+1] << endl;
}

С русским разбирайтесь сами; я для простоты писал код в 866 кодировке :)

→ Ссылка