Раздача карт в покере в Java

FacebooktwittertumblrFacebooktwittertumblr

Данная статья написана командой Vertex Academy. Это одна из статей из нашего "Самоучителя по Java."


Условие задачи:

Напишите программу Deal.java, которая должна имитировать раздачу карт для игры в покер. Программа получает число n, задаваемое с консоли пользователем, и раздает карты на n  игроков (по 5 карт каждому) из рассортированной колоды. Разделяйте пять карт, выданных каждому игроку, пустой строкой.

Решение:

Комментарии к задаче:

В двух словах, этот код принимает количество игроков, проверяет не является ли оно слишком большим ( а то карт не хватит), тасует карты и выводит на экран по пять карт (столько раз, сколько будет игроков).

Что самое сложное? Тасовка карт. Но оно в целом основывается на задаче смене местами  элементов массива. Но в прошлой задачи мы "переворачивали", а в этой меняться местами должны случайные карты. Случайные карты - значит будем использовать (псевдо)случайные числа.

Еще сложным может показаться процес верификации (то есть определение, большое число или нет, и число ли это вообще) числа с консоли - часть 2.

Итак, разберем все части по порядку:

Часть 1 - инициализация переменных.  Мы создаем переменные:

cardsPerPlayer - хранит количество карт на одноо игрока (5), заданное в условии. Эта переменная имеет тип int, а не, например, byte, потому что в процессе приведения типов в выражениях она все равно будет приводится в типу int - так что другой тип не будет оптимизировать эту программу.

players - объявляем переменную и временно задаем ей значение 0. Если этого не сделать, часть, в которой работаем с консолью (часть 2) будет работать неисправно.

Массив suits - хранит масти карт.

Массив rank - хранит ранги карт. Обратите внимание: это массив строк String, и элементы "2", "3", "4" и другие - тоже строки, к ним нельзя обращаться как к числовым значениям.

n - хранит общее количество карт в колоде. Для того, чтобы посчитать, сколько в колоде карт, умножаем количество мастей на количество рангов ( длину массива suits на длину массива rank).

Часть 2 - верификация введенной переменной. Эта часть в целом должна быть Вам знакома из решения других задач. Ее общий смысл - попросить ввести параметр заново, если он неправильно задан с консоли. Например, наш параметр - количество людей. Он не может быль меньше нуля. Он не может быть равным строке, и мы должны убедиться, что карт в колоде хватит на всех игроков. Для этого использованы условия if.

Часть 3 - инициализация колоды. Создается новый массив deck, который хранит полные названия карт "Дама Треф", "Король Пик" и т.д. Названия создаются с помощью конкатенации названий рангов и названий мастей.

Часть 4 -  перетасовываем колоду. Как уже говорилось, принцип очень похож на предыдущую задачу. В этом блоке создается цикл, в котором каждая карта в колоде по очереди меняется местами с другой картой, которая определяется случайно с помощью Math.random().

Часть 5 - раздаем карты. Как в покере карты просто раздаются сверху перетасованной колоды, так и в программе - берется подряд по пять карт для каждого игрока. Цикл выполняется 5*количество_игроков раз, и через каждые 5 карт ставит пустую строку:

Тут нет простого и понятного " if ( i%5 == 0 ) ", потому что i начинается с 0. Если так написать, первому игроку досталось бы 6 карт. Постоянный остаток от деления тут равен не 0, а 4 (т.е. cardsPerPlayer - 1).


Надеемся - наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.

FacebooktwittertumblrFacebooktwittertumblr

FacebooktwittertumblrFacebooktwittertumblr
Самоучители--узнать детальнее--