Skip to content

AlexeyZykin/BlackJack

Repository files navigation

2024-1-blackjack

Java 2024, группа 1, проект Blackjack

Состав команды

1. Гайдамака Михаил - куратор

2. Кондратьев Дмитрий - Team Lead

3. Кочнев Дмитрий - Backend Developer

4. Зыкин Алексей - Backend Developer

5. Флат Евгений - Frontend Developer

Смысл проекта

Blackjack - одна из самых популярных карточных игр в казино с простыми правилами и механикой игры. В этом проекте реализован клиент с графическим интерфейсом, созданным с помощью библиотеки Swing, и серверная часть. Клиент и сервер взаимодействуют через вымышленный протокол Blackjack, работающий поверх UDP.

Ставки в данной реализации остутствуют, игроки играют на интерес, пока есть место за столом.

Задача

  1. Разработать основные дата модели (карта, номинал карты, масть, рука, игрок, дилер).
  2. Разработать сервис выдачи карт, который будет просто выдавать карту из колоды, сервис игры с запуском и окончанием раунда, сервис с логикой возможных действий игрока (hit и stand), а также сервис уведомления о состоянии текущей игры.
  3. Разработать протокол Blackjack поверх UDP.
  4. Протокол UDP это протокол без установки соединения. Сервер всегда открывает фиксированный порт 2121, чтобы его можно было найти броадкастом.
  5. Для приёма сообщений от дилера, игроки открывают любой свободный порт. В первом сообщении они должны сообщить его серверу. Через этот порт они будут принимать всё происходящее за столом от дилера. Дилер отвечает за рассылку всего, что происходит за столом всем игрокам.
  6. Разработать модель, алгоритм игры (поиск стола). Всё, как в DHCP, когда клиент хочет найти сервер (в нашем случае игрок ищет свободный стол).
  7. Разработать сервер (дилер) и клиент (игрок) части протокола Blackjack, которые можно будет включить в приложения.
  8. Разработать приложения (две запускаемые программы) сервера (дилер) и клиента (игрок). Действия дилера будут работать в автоматическом режиме.
  9. Графический интерфейс пользователя (GUI), реализованный с помощью Swing, который позволяет игрокам взаимодействовать с игрой.
  10. Реализовать отображение результатов после каждого раунда.
  11. У игроков должна быть возможность подтверждать начало следующего раунда.
  12. Реализовать стратегию для демо-режима — алгоритм, который будет демонстрировать наиболее вероятные действия игрока-профессионала.

Стек технологий

  • Java 21
  • Gradle
  • Lombok
  • JUnit
  • Mockito

Архитектура взаимодействия клиента с сервером по протоколу BlackJack

Основные сущности предметной области

  • GameState - состояние текущего раунда. Включает в себя дилера, список игроков и статус игры.
  • GameStatus - статус игры (идет раунд или раунд окончен).
  • Dealer - сущность дилера. Имеет колоду и текущий статус.
  • Player - сущность игрока. Содержит айди игрока, колоду и свой текущий статус.
  • DealerStatus - статус дилера.
  • PlayerStatus - статус игрока.
  • Hand - колода. Состоит из списка карт.
  • Suit - масть карты.
  • Rank - номинал карты.

Взаимосвязь сервисов игровой бизнес-логики приложения

Демо

Начало раунда

Конец раунда

Как играть

Начало игры

После подключения к свободному столу все игроки должны подтвердить начало раунда. Это подтверждение проводится перед началом каждого раунда.

Раздача карт

В каждом раунде вам и дилеру будут розданы по две карты, одна из карт дилера будет закрыта.

Действия игроков

После раздачи карт игроки смогут выполнять следующие действия:

  • Hit (взять карту). Запрашивать новую карту можно, пока не получите перебор (>21).
  • Stand (остановиться): завершить свой ход.

Ход дилера

После действий всех игроков ход совершает дилер. Дилер откроет свою закрытую карту и будет действовать по следующим правилам:

  • Если значение его руки меньше 17, дилер берет карту.
  • Если значение 17 или выше, дилер останавливается.

Возможные исходы раунда

  • Если у дилера выпал блэкджэк, то проигрывают все игроки без блэкджэка.
  • Дилер перебрал - побеждают все игроки.
  • Сумма набранных очков больше 21 - перебор карт (bust).
  • Сумма очков как у дилера - состояние stand.
  • Сумма очков больше, чем у дилера - победа (при этом количество очков <= 21).
  • Сумма очков меньше, чем у дилера - проигрыш (если у дилера нет состояния bust).

Значения карт

Карт в колоде 52 (от 2 до 10, валет, дама, король, туз). Значения очков каждой карты:

  • От двойки до десятки — от 2 до 10 соответственно.
  • Туз: может быть 1 или 11 (11 пока общая сумма не превышает 21, иначе 1).
  • Картинки (J (валет), Q (дама) и K (король)): все имеют значение 10.

Как запустить

Для запуска проекта выполните следующие шаги:

  1. Клонируйте репозиторий:
git clone https://study-git.eltex-co.ru/eltex_team/java_team/2024-1-blackjack.git
  1. Перейдите в директорию проекта:
cd 2024-1-blackjack
  1. Соберите проект с помощью Gradle:
./gradlew build
  1. Запустите сервер:
java -jar build/libs/server.jar
  1. Запустите клиент (по умолчанию сервер будет ждать двух клиентов):
java -jar build/libs/client.jar

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages