Giter VIP home page Giter VIP logo

game-fool's Introduction

Реализация игры "Дурак"

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

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

echo (new GameFool())
(new Player('Rick'))
(new Player('Morty'))
(new Player('Summer'))
(new CardsDeck(rand(1, 0xffff)))
();

~~1) Используется колода из 36 карт; 2) Игроков может быть от 2 до 4; 3) Изначально колода отсортирована по масти в следующем порядке ♠, ♥, ♣, ♦. Для каждой масти карты упорядочены по достоинству, от 6 до туза; 4) Перед началом игры колода сортируется заданным случайным числом: выполняется 1000 итераций, в каждой итерации из колоды берется карта с порядковым номер n = (random + iterator * 2) mod 36 (где random - случайное переданное число, а iterator - номер итерации сортировки 0…999) и перемещается в начало колоды; 5) После сортировки колоды выполняется 6 итераций раздачи карт из начала массива колоды: для каждого игрока, в порядке их добавления в игру, достается карта из начала колоды (начало массива). Таким образом после 6 итераций у каждого игрока должно быть 6 карт в руках; 6) На протяжении всей игры карты в руках игроков должны быть сортированы. Вначале идут карты всех не козырных мастей, сортированные по достоинству и по масти (порядок: пика, крест, бубен, червей), затем козыри, также сортированные по достоинству; 7) Следом достается из начала массива колоды карта-козырь. Эта карта возвращается в колоду, но в самый конец, чтобы быть забранной последней; 8) Первым ходит игрок, который первый был добавлен в игру (в примере кода выше это Rick); 9) Ход выполняется на следующего игрока по порядку их добавления в игру, циклически; 10) В ходе участвуют только два игрока,нападающий и отбивающийся. Другие игроки подкидывать карты не могут; 11) Ход всегда начинается с самой младшей карты любой масти, кроме козыря. Если в руках не осталось карт, кроме козырей, то ход начинается с самого младшего козыря; 12) Продолжать ход необходимо картами с достоинствами, которые использовались за ход. Например, если за ход был использован валет червы, то нападающий может продолжить ход, например, с валет бубен. Однако нельзя продолжать ход самой старшей козырной картой в руках, если в руках более одной карты. Например, если за ход использовались тузы, а в руках нападающего есть несколько карт, среди которых есть козырный туз, то им продолжать ход нельзя. Выбирать карту для продолжения хода нужно самую младшую в руке (карты отсортированы в руке, см п.6); 13) Отбиваться необходимо старшей картой той же масти. Выбирается самая младшая из возможных карт для отбивания. Если нет подходящих карт той же масти, то отбиваться нужно самой младшей козырной картой; 14) Если отбиваться нечем больше, то отбивающий забирает все карты, что были использованы за ход. Также, у нападающего забираются все карты такого же достоинства, что были использованы за ход, кроме козырей. Иными словами, если козырь черва, за ход использовалась карта 10 пика и на в руках нападающего есть ещё 10 чева и 10 бубен, то 10 бубен переходит в руки отбивающегося. 15) Если игрок проиграл ход (забрал карты хода), то он пропускает свой ход и нападающим становится следующий по списку игрок; 16) После каждого хода игроки берут недостающие количество карт из начала массива колоды. Вначале пополняет руку картами нападающий, затем обороняющийся и затем все остальные по порядку их следования; ~~17) Если в руках игрока не осталось карт и в колоде пусто, то этот игрок выходит из игры;~~~~ 18) Игра завершается, когда остается один игрок с картами в руках или не остается игроков (ничья).

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.