vs_convoy
@vs_convoy

Куда копать, игра 21 очко?

Подскажите как лучше реализовать.
Нужно написать игру- 21 очко на с++ в консоли. Для игры между двумя людьми.
36 карт, туз -11 очков, валет 2, дама 3, король 4. Цифровые соответственно по номиналу 6-10.
каждый поочередно достает по карте, либо добавляет еще либо вскрывается, либо у него 21. Выигрывает тот у которого либо больше,либо 21, либо меньший перебор.
Я только начал изучать программирование, и не знаю куда копать.
Я так понимаю мне необходим массив на 36 карт, и в нем устроивать рандомную выборку и функцию которая будет эту выборку исполнять. Функцию нужно вызывать в цикле пока у одного игрока либо будет перебор, либо он вскрывает карты, либо у двоих перебор. каша в голове. помогите с алгоритмом , и с тем как именно реализовать программу.
  • Вопрос задан
  • 2379 просмотров
Пригласить эксперта
Ответы на вопрос 2
@MiiNiPaa
Создайте массив из 36 карт, включающий в себя все возможные карты. Затем перемешайте его. Потом просто доставайте карты по очереди.

P.S. Если вам нужен С++, уберите тэг C
Ответ написан
Комментировать
Duha666
@Duha666
Если карты достаются не по очереди, а как в блекджеке. то могу предложить следующий вариант написания. Если не так, то думаю ты поправишь сам.

Игрок №1 набирает карты. Делаем бесконечный цикл. В нем спрашиваем что игрок хочет сейчас - остановиться или брать. Если брать, то вызываем некоторую функцию getNewCard(), которую я опишу ниже. Она вернет очки за карту. Если перебор или игрок сказал остановиться, то выходим из цикла. Кстати при переборе количество очков можно приравнять к -1, так будет проще.

Аналогично для игрока №2. Потом сравниваем итог.
Теперь о функции getNewCard(). Ей нужно знать какие карты уже были выложены. Поэтому можно хранить хотя бы массив из 36 значений карт( для первого раза сойдет и так вариант, его легче понять) и еще один массив в котором храним, выдана ли это карта. Еще храним сколько карт осталось. Когда вызывается функция, то генерируем случайное число от 0 до количества оставшихся карт. Затем отсчитываем в массиве такую по счету неиспользованную карту. Помечаем ее использованной, возвращаем ее количество очков.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
23 июн. 2024, в 22:40
1000 руб./за проект
23 июн. 2024, в 22:19
500 руб./за проект