Skip to content

Latest commit

 

History

History
50 lines (36 loc) · 3.92 KB

README.md

File metadata and controls

50 lines (36 loc) · 3.92 KB

Минигольф

Нужно написать классы для проведения матча в минигольф по двум разным системам правил.

Правила

На корте имеется H лунок, они строго упорядочены. В игре принимает участие N игроков, им так же присвоены номера.

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

Игра на очки

Лунка играется до тех пор, пока все игроки не забили свой мяч. Игроки, уже забившие, пропускают свой удар. Каждый игрок получает столько очков, сколько ударов он потратил (соответственно, чем меньше очков, тем лучше). Десятый удар защитывается автоматически, игрок получает 10 очков, удар не требуется.

Игра на лунки

Все игроки делают по одному удару. Если никто не забил, делают еще один круг. Если хоть кто-то забил, то забившие получают 1 очко, промахнувшиеся – 0 очков, лунка более не разыгрывается. Если за десять таких кругов никто не забил, все получают 0 очков и переходят к следующей лунке.

Интерфейс

Нужно написать класс, объект которого – однократно протекающий матч. Должны поддерживаться следующие методы:

  • конструктор — принимает количество лунок и массив с объектами класса Player (которые имеют только property name).
  • hit(success) — сообщает матчу, что произошел очередной удар. Кидает RuntimeError, если матч завершен. success — булево значение, указываюшее, попал ли матч в лунку (по умолчанию False).
  • finished — property, содержащее булево значение. True — матч закончен, False — нет.
  • get_winners() — возвращает массив победителей в том же порядке, в которым игроки были переданы в конструктор. Кидает RuntimeError, если матч еще не завершен.
  • get_table() — возвращает таблицу результатов. Это list, в котором содержится H + 1 tuple-ов. Первый — имена игроков, остальные — очки игроков на соответсвующих лунках. Если результата еще нет, то tuple содержит None (причем, если игрок совершил 3 удара, но еще не забил, то это все еще None, а не 3).

Нужно реализовать классы Player, HitsMatch и HolesMatch.

Тесты

К заданию прилагаются тесты, в которых можно лучше изучить интерфейс требуемых методов. Это тесты-сценарии, они не являются образцом хорошего юнит-тестирования. Нормальные юнит-тесты нужно дописать самостоятельно. "# minigolf"