Необходимо реализовать игру 21 или BlackJack (на выбор). Пример игры https://html5blackjack.net. Обязательным требованием является:
- Наличие класса Колода карт и вложенного статического класса Карта.
- Могут быть другие классы: игровой стол, игра, игрок, диллер, UI.
- Игра на виртуальные деньги. Игроку и диллеру выдается по 1000 денег в начале игры.
- Игрок может сделать ставку. Игра продолжается до "банкротства" игрока или диллера.
- Створити колоду карт, яка може бути використанна для створення додатків карткових ігор (дурак, покер і т ін.)
- Створити перерахування Suite з можливими мастями карт (♠ ♣ ♥ ♦)
- Створити клас Card - карта в якій вкзати масть і значення (наприклад, туз хресті). Масть, це поле типу Suite.
- Створити клас Deck - колода карт, в якій потрібно зберігати масив карт.
- В конструкторі колоди ініціалізувати колоду на 36 карт.
- Додати метод shuffle(), який дозволяе перемішати карти.
- Додати метод sort(), який дозволяе відсортувати карти стандартим методом sort() классу Arrays.
- В класі Card реалізувати інтерфейс Comparable для порівняння карт.
- В класі Deck реалізувати інтерфейс Iterable для можливості перелічити карти в циклі foreach
- Створити клас DeckIterator який реалізує інтерфейс Iterator і дозволяе реалізувати логіку перебору карт.
- Додати констукртор з параметрами в клас Deck який приймає кількість карт (або 36, або 54) і відповідно свторює колоду заданої кількості карт.
- Також додати конструктор по замовчуванню який дозволяє стоврити колоду на 36 карт.
Масть
- Трефы — clubs (♣) \u2663
- Бубны — diamonds (♦) \u2666
- Червы — hearts (♥) \u2665
- Пики — spades (♠) \u2660
Достоинства:
- Валет «В» - Jack «J»
- Дама «Д» - Queen «Q»
- Король «К» - King «K»
- Туз «Т» = Ace «A»
- Карты младше десятки именуются по численному обозначению (two, three, .. ten)
- Джокер - Joker «Jr» - black and white (черно-белый) и red (красный)
Сортировка по приоритету Сортировка под игру дурак или др.
- Пики-Червы-Бубны-Трефы
- 2, 3, 4, 5, 6, 7, 8, 9, 10, Валет, Дама, Король, Туз
Сортировка под игру black jack
- 2-10 - от 2 до 10 соответственно,
- туз — 1 или 11 (11 пока общая сумма не больше 21, далее 1)
- картинки (король, дама, валет) — 10.
Правила игры
- Если у игрока и дилера число очков на руках равное, то такая ситуация называется «ровно»: за рубежом это называется — пуш (англ. push). В такой ситуации все остаются при своих ставках, никто не выигрывает и не проигрывает.
- Игроки до раздачи карт делают ставки, кладя фишки на соответствующие поля игрового стола. После того, как первая карта сдана, игрокам запрещается делать ставки и прикасаться к своим фишкам.
- Дилер раздаёт карты (принято в этой игре из одной колоды) по две карты каждому игроку, себе раздаёт одну карту (в США принято раздавать дилеру две карты, одна из которых открыта, а другая — закрыта, то есть находится на столе рубашкой вверх).
- Если у игрока сразу после раздачи набралось 21 очко (то есть у игрока туз и десятиочковая карта), то такая ситуация и называется блек-джек. В таком случае игроку сразу выплачивается выигрыш 3 к 2 (то есть в 1,5 раза превышающий его ставку). Исключение составляют случаи, когда дилеру первой картой (открытой) попадается 10, картинка или туз. В этом случае существует вероятность, что у дилера также будет блек-джек, поэтому игроку с блек-джеком предлагается либо взять выигрыш 1 к 1 (только если первая карта дилера — туз), либо дождаться окончания конца игры (и в случае, если у дилера не блек-джек, получить выигрыш 3 к 2).
- Далее игрокам, у которых не блек-джек, предлагается на выбор либо взять ещё карту (в таком случае игрок должен сказать дилеру «карту» или «ещё», англ. hit me), либо остаться при тех картах (и той сумме очков), которые у него на руке (в этом случае игрок должен сказать дилеру «достаточно» или «хватит»).
- Как правило, если у игрока после взятия новой карты в сумме получается 21, дилер не спрашивает его больше и переходит к следующему игроку.
- Если у игрока после взятия новой карты сумма очков превысит 21, то такая ситуация называется «перебор».
- Если в наборе имеется туз, то при переборе его значение приравнивается к 1. Дилер произносит «много» и снимает ставку игрока в пользу казино.
- Если у дилера в первых двух картах набирается 21 очко (блек-джек), то все игроки (кроме тех, у кого тоже блек-джек), проигрывают. Те, у которых блек-джек, остаются при своих ставках, если они ранее не выбрали взять выигрыш 1 к 1 или если не застраховали свою комбинацию от блек-джека.
- В некоторых случаях, в зависимости от того, какие карты на руках у игрока, дилер может предложить ему дополнительные варианты (см. ниже). После того, как все игроки завершили брать карты, дилер говорит «себе» и раздаёт карты себе. Общее правило блек-джека состоит в том, что дилер обязан остановиться, как только наберёт 17 очков или выше, и обязан брать, пока не достигнет (даже если у всех не перебравших меньше очков). В различных казино может варьироваться правило, должен ли дилер останавливаться в ситуации, если у него туз и шестёрка (то есть 7 или 17 очков на руке). Обычно это правило написано на игровом столе.
- При окончательном подсчёте очков в конце раунда карты остальных игроков для вас значения не имеют, игра ведётся только против дилера, то есть сравниваются карты только игрока и дилера, карты и ставки параллельных игроков не учитываются.
- Подготовка (Preparation) (все действия выполняются последовательно, совместно с созданием игры)
- Создать игру
- Создание колоды для black jack (приоритет) на 52 карты (Deck-addDeckBlackJack)
- Сортировка по приоритету (Deck-SortRandom, Random выбор по возрастанию или убыванию)
- Перемешиввание карт (Deck-shuffle)
- Создание игрока (Player с полями name и кол-во денег bank)
- Создание диллера (казино) (Diller с полями name и кол-во денег bank)
- Создание игрового стола (GameTable с полями Player player, Diller diller, Deck deck, Deck.Card[] playerCards, Deck.Card[] dillerCards)
- Игра
- Делать ставку (GameTable-addBid)
- Сдача 2 карт
- Окончание игры
- При отсутствии денег у игрока
- При выходе игрока после окончания игры
rivate String name; // Например "Стол №1" private int bid; // Ставка