Giter Site home page Giter Site logo

bjkolmp's Introduction

BjkOlmp

Оглавление

  1. Задание полуфинала
  2. Описание отправленного решения
  3. Описание альтернативного решения

Задание полуфинала

Цель задачи

Вы работаете в компании, занимающейся разработкой игр. В качестве первого задания вы должны написать игру под названием "Блэк Джек" (21), а также предложить описание (без кода) второго, альтернативного способа решения данной задачи.

Блэкджек - это классическая карточная игра, также известная как "Двадцать одно". Цель игры - набрать как можно большее количество очков до 21.

Распределение очков: карты с цифрами стоят от 2 до 10 очков; карты с фигурами (валеты, короли и дамы) стоят 10 очков; тузы стоят 11 очков, если нет перебора, и 1 очко, в противном случае.

Общие требования

  • Компьютер должен выступать в роли крупье (противника).
  • Банк игрока должен быть равен 5000.
  • Первая карта крупье должна быть скрыта от игрока (т.е. лежать на столе лицом вверх), остальные открыты.
  • После раздачи игрок может увеличить свою ставку только один раз.
  • После того, как игрок набрал необходимое количество очков и больше не запрашивает карты, крупье должен запрашивать карты до тех пор, пока общее количество очков не превысит 16.
  • Подсчет очков: цифровые карты - от 2 до 10 очков, фигурные карты (валеты, короли и королевы) - 10 очков, тузы - 11 очков, если нет перебора, и 1 очко, в противном случае.

Требования к качеству кода

  • Приложение должно функционировать в ОС Unix и ОС Windows.
  • Рекомендуемая версия Python: 3.10+

Требования и рекомендации к коду

  • Для сокращения срока разработки не нужно использовать асинхронное программирование (Async IO).
  • У классов, их полей и методов должны быть простые и понятные имена, отражающие их суть. Также рекомендуется придерживаться PEP8 при разработке;
  • Для упрощения разработки модули журналирования (логи) и модуль передачи сообщений разрабатывать не нужно;
  • Рекомендуемые модули Python: colorama;

Приложение не обязательно должно быть консольным. Данный модуль, является рекомендованным. Сложность и оригинальность сполнения пойдет в плюс. Окончательный выбор используемых модулей остается за разработчиком.

Требования к описанию альтернативного решения

  • Описание предоставляется в виде текстового файла

Описание отправленного решения

Общая информация

В ходе проделанной работы были написаны две (сервер и клиент) программы на языке Python, с использованием следующих библиотек:

  • uvicorn[standart]
  • fastapi
  • python-dotenv
  • websockets
  • colorlog
  • httpx
  • anyio
  • pytest
  • coverage

Для работы приложения-клиента требуется библиотека websockets Для работы сервер требуются все библиотеки, описанные выше

Локальная установка

Для локальной установки и запуска проекта вам потребуется наличие python3.10 и выше некоторых зависимостей

Рекомендуется любая debian-подобная операционная система. Разработки и ручные тесты работы сервера проводились на данной конфигурации:

(Venv) yunikeil@lekinu3600:~/python/BjkOlmp$ uname -a
Linux lekinu3600 5.15.133.1-microsoft-standard-WSL2 #1 SMP Thu Oct 5 21:02:42 UTC 2023 x86_64 GNU/Linux
(Venv) yunikeil@lekinu3600:~/python/BjkOlmp$ 
  1. Установите wsl, прописав данную команду: wsl --install, (необязательный шаг), подробнее можно почитать тут
  2. Создайте виртуальное окружение командой python3.10 -m venv Venv
  3. Активируйте окружение linux/windows: source /Venv/bin/activate/.\Venv\Scripts\Activate.ps1
  4. Установите зависимости: pip install -r requirements.txt
  5. Запустите python3.10 src/main.py 🎉

После запуска сервера можете запустить клиент из той же директории командой python src/__public/clients/ws_python.py

Вы также можете запустить тесты командой bash scripts/tests.sh

В операционных системах семейства windows гарантированно работать будет только клиент. Для запуска клиента требуется PowerShell, тесты проводились на PowerShell 7.4.1 Для консольного обращения к серверу, за скачиванием клиента может потребоваться wget, установить его можно данной командой: winget install wget Однако корректная работа консольного "мини-сайта" гарантируется только на linux. По этим причинам запускать лучше вручную через команды приведённые выше В клиенте вы также можете указать базовый url на адрес wss://bjk.yunikeil.ru и поиграть с устройств в разных сетях, данный домен будет доступен в течении месяца с даты предоставления данной работы. Для обновления DNS записей может потребоваться до суток, со дня предоставления работы, если после восьми часов не появилось доступа к домену рекомендуется установить DNS сервера от Google: 8.8.8.8, 8.8.4.4.

В случае если вы используете линукс для установки клиента можете просто ввести команду wget http://localhost:8000/inst.sh && bash inst.sh

Описание альтернативного решения

В альтернативном решении можно было бы:

  • уделить больше времени отрисовке контента на клиенте, используй библиотеку curses или windows-curses
  • уделить больше времени документации проекта
  • уделить больше времени тестам проекта
  • заменить консольный клиент на графический
  • добавить больше классических правил, вроде страхования при тузе у диллера
  • добавить сохранение настроек пользователей
  • добавить авторизацию/регистрацию
  • добавить валидацию данных и проверки на сервер

bjkolmp's People

Contributors

yunikeil avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.