С++. Как к этой этой программе добавить подсказки?
Предусмотреть 3 подсказки: их всего 3 за всю игру и ИХ можно взять на любом вопросе.
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int a;
int b;
int n = 1;
int m = 50;
int i;
int f = 1;
///////////////////////
cout<<" Вопрос\t"<<n<<"\t" <<m<<"рублей" "\tСтолица Франции" << endl;
cout << "1. Милан 2. Ницца 3. Париж" << endl;
cin >> a;
switch (a)
{
case 3:
{
n++;
cout << m << "рублей или игра(1или2)"<<endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
cout << "следующий вопрос:" << endl;
break; }
default:
{
cout << "неверно!" << endl;
return 0;
}
}
m+=50;
//////////////////////////////////////////////////////////////////////////////////////////// вопрос 2
cout <<"Вопрос\t"<<n<<":"<< "\tКто написал \"Журавлиный крик\"?" << endl;
cout << "1. Быков; 2. Короткевич; 3.Колос " << endl;
cin >> a;
if (a == 1)
{
n++;
cout << m << "рублей или игра(1или2)" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
}
else
return 0;
m += 50;
///////////////////////////////////////////////////////////////////////////////////////////// вопрос 3
cout <<"Вопрос\t"<<n <<"\tв чем измеряется ЭДС?" << endl;
cout << "1. Вольт; 2. Тесла; 3. Фарад " << endl;
cin >> a;
if (a == 1)
{
n++;
cout << m << "рублей или игра(1или2)" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
}
else
return 0;
m += 50;
///////////////////////////////////////////////////////////////////////////////////////////// вопрос 4
cout <<"вопрос"<<n<< "Богиня красоты" << endl;
cout << "1. Афина; 2. Деметра; 3. Афродита " << endl;
cin >> a;
if (a == 3)
{
n++;
cout << m << "рублей или игра(1или2)" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
}
else
return 0;
m += 50;
////////////////////////////////////////////////////////////////////////////////////////// вопрос 5
cout << "вопрос" << n << "Какой врач первым в истории русской медицины применил гипсовую повязку?" << endl;
cout << "1. Субботин; 2. Пирогов; 3. Боткин " << endl;
cin >> a;
if (a == 2)
{
n++;
cout << m << "рублей или игра(1или2)" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
}
else
return 0;
m += 50;
/////////////////////////////////////////////////////////////////////////////////////////// вопрос 6
cout << "вопрос" << n << "Какой белорусский исполнитель добился самых высоких результатов на Евровидении?" << endl;
cout << "1. Алехно; 2. Колдун; 3. Ланская " << endl;
cin >> a;
if (a == 2)
{
cout << m << "рублей или игра(1или2)" << endl;
cin >> b;
switch (b)
{
case 1:
cout << "Вы выиграли " << m << "рублей" << endl;
return 0;
}
}
else
return 0;
}
Ответы (1 шт):
1) Я довольно сильно поправил форматирование чтобы все вопросы выглядели одинаково.
2) Убрал switch (а зачем он там нужен, если проверяет только 1 значение? Для этого есть if).
3) Сделал _getch() вместо cin чтобы не нужно было нажимать Enter после выбора варианта. Теперь вместо цифр вариантов используются коды их клавиш (без нумпада)
4)Вынес проверку правильности ответа и отправление подсказок в отдельную функцию чтобы сократить код. Если пользователь использует все 3 подсказки и попробует взять ещё одну - игра завершится.
В функцию передаётся 4 аргумента: код кнопки правильного ответа, кол-во оставшихся подсказок, кол-во денег, правильный ответ текстом для вывода подсказки.
#include <iostream>
#include <conio.h>
using namespace std;
int check(int ans, int* tip, int m, string correct){
bool q_pressed = false;
setlocale(LC_ALL, "Russian");
int key = _getch();
if (key == 113 or key == 81 or key == 169 or key == 137){q_pressed = true;}
if (!(key == ans) && !q_pressed){
cout << "Неверно!";
return 0;
}
else{
if (q_pressed){
if(*tip == 0){cout << "У вас больше нет подсказок. Игра окончена!"; return 0;}
*tip -= 1;
cout << "Правильный ответ: " << correct << endl;
cout << "У вас осталось " << *tip << " подсказок" << endl;
}
else{
cout << "Верно!" << endl;
cout <<"Забрать " << m << " рублей(1) или продолжить игру(2)"<<endl;
key = _getch();
if (key == 49){
cout << "Вы выиграли " << m << " рублей. Спасибо за игру!" << endl;
return 0;
}
}
}
return 1;
}
int main()
{
setlocale(LC_ALL, "Russian");
int n = 1, m = 50, tip = 3, checker;
cout << "Вы можете запросить подсказку нажатием на кнопку q.\nВ начале игры у вас есть 3 подсказки";
// Вопрос 1
cout<<"\nВопрос "<< n << ":" << "\nСтолица Франции" << endl;
cout << "1. Милан 2. Ницца 3. Париж" << endl;
checker = check(51, &tip, m, "Париж");
if (checker == 0){return 0;}
n++;
m+=50;
// Вопрос 2
cout << endl << "Вопрос "<<n<<":"<< "\nКто написал \"Журавлиный крик\"?" << endl;
cout << "1. Быков 2. Короткевич 3.Колос " << endl;
checker = check(49, &tip, m, "Быков");
if (checker == 0){return 0;}
n++;
m += 50;
// Вопрос 3
cout << endl << "Вопрос "<< n <<":"<<"\nВ чем измеряется ЭДС?" << endl;
cout << "1. Вольт 2. Тесла 3. Фарад " << endl;
checker = check(49, &tip, m, "Вольт");
if (checker == 0){return 0;}
n++;
m += 50;
// Вопрос 4
cout <<"Вопрос "<<n <<":"<< "\nБогиня красоты это" << endl;
cout << "1. Афина 2. Деметра 3. Афродита " << endl;
checker = check(51, &tip, m, "Афродита");
if (checker == 0){return 0;}
n++;
m += 50;
// Вопрос 5
cout << "Вопрос " << n <<":"<< "\nКакой врач первым в истории русской медицины применил гипсовую повязку?" << endl;
cout << "1. Субботин 2. Пирогов 3. Боткин " << endl;
checker = check(50, &tip, m, "Пирогов");
if (checker == 0){return 0;}
n++;
m += 50;
// Вопрос 6
cout << "Вопрос " << n <<":"<< "\nКакой белорусский исполнитель добился самых высоких результатов на Евровидении?" << endl;
cout << "1. Алехно 2. Колдун 3. Ланская " << endl;
checker = check(50, &tip, m, "Колдун");
if (checker == 0){return 0;}
cout << endl << "Спасибо за то, что играли! Вы показали отличные результаты и выиграли " << m << " рублей!" << endl;
system("pause");
return 0;
}