В чем ошибки при написании Камень, Ножницы, Бумага на 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 кодировке :)