Giter Site home page Giter Site logo

game-fool's Introduction

Задание

Необходимо написать на php классах небольшую упрощенную реализацию народной карточной игры «Дурак». Задача программы — рассчитать одну партию игры между виртуальными игроками. Ваша задача — написать необходимые php классы игры «Дурак» для работы следующей программы:

Данная программа выводит имя игрока, который оказался «дураком», победителя и если ничья то "ничья".

Правила игры

Ниже перечислены правила, которые во многом похожи на классическую карточную игру «Дурак», но с некоторыми упрощениями. Для понимания как должна работать программа мы подготовили страницу, которая генерирует случайную партию и выводит лог игры (какое случайно число колоды, какой козырь, кто на кого ходит и какие карты у него в руках, кто проиграл):

Список правил:

  • Используется колода из 36 карт;
  • Игроков может быть от 2 до 5;
  • Изначально колода отсортирована по масти в следующем порядке ♠, ♥, ♣, ♦. Для каждой масти карты упорядочены по достоинству, от 6 до туза;
  • Перед началом игры колода сортируется заданным случайным числом: выполняется 1000 итераций, в каждой итерации из колоды берется случайная карта и перемещается в начало колоды;
  • После сортировки колоды выполняется 6 итераций раздачи карт из начала массива колоды: для каждого игрока, в порядке их добавления в игру, достается карта из начала колоды (конец массива). Таким образом после 6 итераций у каждого игрока должно быть 6 карт в руках;
  • На протяжении всей игры карты в руках игроков должны быть сортированы. Вначале идут карты всех не козырных мастей, сортированные по достоинству, затем козыри, также сортированные по достоинству;
  • Следом достается из начала массива колоды карта-козырь. Эта карта возвращается в колоду, но в самый конец, чтобы быть забранной последней;
  • Первым ходит игрок, у которого самый маленький козырь;
  • Ход выполняется на следующего игрока по порядку их добавления в игру, циклически;
  • В ходе участвуют только два игрока,нападающий и отбивающийся. Другие игроки подкидывать карты не могут;
  • Ход всегда начинается с самой младшей карты любой масти, кроме козыря. Если в руках не осталось карт, кроме козырей, то ход начинается с самого младшего козыря;
  • Продолжать ход необходимо картами с достоинствами, которые использовались за ход. Например, если за ход был использован валет червы, то нападающий может продолжить ход, например, с валет бубен. Однако нельзя продолжать ход самой старшей козырной картой в руках, если в руках более одной карты. Например, если за ход использовались тузы, а в руках нападающего есть несколько карт, среди которых есть козырный туз, то им продолжать ход нельзя. Выбирать карту для продолжения хода нужно самую младшую в руке (карты отсортированы в руке, см п.6);
  • Отбиваться необходимо старшей картой той же масти. Выбирается самая младшая из возможных карт для отбивания. Если нет подходящих карт той же масти, то отбиваться нужно самой младшей козырной картой;
  • Если отбиваться нечем больше, то отбивающий забирает все карты, что были использованы за ход. Также, у нападающего забираются все карты такого же достоинства, что были использованы за ход, кроме козырей. Иными словами, если козырь черва, за ход использовалась карта 10 пика и на в руках нападающего есть ещё 10 чева и 10 бубен, то 10 бубен переходит в руки отбивающегося.
  • Если игрок проиграл ход (забрал карты хода), то он пропускает свой ход и нападающим становится следующий по списку игрок;
  • После каждого хода игроки берут недостающие количество карт из конца массива колоды. Вначале пополняет руку картами нападающий, затем обороняющийся и затем все остальные по порядку их следования;
  • Если в руках игрока не осталось карт и в колоде пусто, то этот игрок выходит из игры;
  • Игра завершается, когда остается один игрок с картами в руках или не остается игроков (ничья).

game-fool's People

Contributors

isakzhanov-r avatar

Stargazers

 avatar

Watchers

 avatar  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.