Задать вопрос
vs_convoy
@vs_convoy

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

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

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

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

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

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

Похожие вопросы