Игра 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
- функция, используемая для вывода сообщения на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д