Игра 21 очко: Доработать проверку вводимых символов - C (СИ)
Формулировка задачи:
Здравствуйте. Вот есть игрушка в 21 очко. Всё хорошо работает, но стоит задача немного это доработать:
1) Нужно доработать проверку вводимых символов (ans != 'n'), чтобы
программа адекватно отрабатывала, если вводимый символ ни n и ни y.
2) В этой программе компьютер останавливает набор карт по условию while
(komp<17). Изменить условие так, чтобы останов набора карт происходил с
различными (случайными) уставками из разумно применимых пределов:
komp<(уставка)
Помогите пожалуйста!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
int koloda[13] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 11 };
int karta() { return rand() % 13; }
int main()
{
setlocale(LC_ALL, "Russian");
int igrok, komp, kart;
char ans, buf;
time_t t;
srand((unsigned)time(&t));
do
{
printf("\n****************** Игра начинается... ***************\n\n");
komp = 0; igrok = 0;
do
{
kart = karta();
printf("Ваша карта: %d ", koloda[kart]);
igrok += koloda[kart];
printf("\tСумма = %d\n", igrok);
if (igrok>21)
{
printf("У Вас перебор, Вы проиграли!\n ");
break;
}
printf("взять еще? ('y' - да, 'n' - нет) : ");
ans = getchar();
buf = getchar();
} while (ans != 'n');
if (igrok <= 21)
{
printf("\nКарты компьютера:");
do
{
kart = karta();
printf(" %d", koloda[kart]);
komp += koloda[kart];
} while (komp<17);
printf("\t Сумма = %d", komp);
if (igrok>komp) printf(" \n\nПоздравляем, Вы выиграли! \n");
if (igrok == komp) printf(" \n\nНичья! \n");
if (igrok<komp && komp <= 21) printf(" \n\nВы проиграли! \n");
if (igrok<komp && komp>21) printf("\n\nУ компьютера перебор, Вы выиграли! \n");
}
printf(" \nиграть еще? ('y' - да, 'n' - нет) : ");
ans = getchar();
buf = getchar();
} while (ans != 'n');
printf(" \n Спасибо за игру!!! Для выхода нажмите Enter! \n ");
_getch();
}Решение задачи: «Игра 21 очко: Доработать проверку вводимых символов»
textual
Листинг программы
if (igrok <= 21)
{
printf("\nКарты компьютера:");
do
{
kart = karta();
printf(" %d", koloda[kart]);
komp += koloda[kart];
} while (komp<17);
printf("\t Сумма = %d", komp);
if (igrok>komp) printf(" \n\nПоздравляем, Вы выиграли! \n");
if (igrok == komp) printf(" \n\nНичья! \n");
if (igrok<komp && komp <= 21) printf(" \n\nВы проиграли! \n");
if (igrok<komp && komp>21) printf("\n\nУ компьютера перебор, Вы выиграли! \n");
}
printf(" \nиграть еще? ('y' - да, 'n' - нет) : ");
while ((ans = _getch())!='y' && ans!='n')
printf("Only \'y\' or \'n\'\n");
printf("%c\n",ans);
} while (ans != 'n');
Объяснение кода листинга программы
igrok- переменная, представляющая количество очков игрока.koloda- массив, содержащий количество очков в каждой карте.kart- переменная, используемая в качестве счетчика для прохождения по массивуkoloda.komp- переменная, представляющая сумму очков компьютера.printf- функция вывода информации на экран.do-whileцикл используется для вывода карт компьютера и суммирования очков.ifусловия используются для проверки и вывода различных сообщений в зависимости от результата игры.whileцикл используется для запроса у игрока продолжения игры._getch- функция, используемая для получения ввода от игрока.ans- переменная, используемая для хранения ввода игрока.printf- функция, используемая для вывода сообщения на экран.char- тип данных, используемый для хранения символов, в данном случае, ввода игрока.n- символ, используемый для обозначения конца игры.y- символ, используемый для обозначения продолжения игры.only \'y\' or \'n\'- сообщение, выводимое на экран при неправильном вводе игрока.karta- функция, генерирующая случайное число от 1 до 6, представляющее карту компьютера.getch- функция, используемая для получения ввода от игрока.n- символ, используемый для обозначения конца игры.y- символ, используемый для обозначения продолжения игры.printf- функция, используемая для вывода сообщения на экран.