Skip to content

Latest commit

 

History

History
48 lines (40 loc) · 5.92 KB

README.md

File metadata and controls

48 lines (40 loc) · 5.92 KB

Игры 🎮

Все свои игры я реализовал самостоятельно, не опираясь на гайды.

Морской бой (battleship)

  • Человек играет с компьютером через консоль, вводя координаты клеток.
  • Человек может выбрать случайную расстановку своих кораблей или расставить их вручную. Во втором случае для каждого корабля ему нужно ввести координаты «головы» и ориентацию «хвоста» корабля.
  • Корабли компьютера всегда расставляются случайным образом.
  • Корабли не могут выходить за границы поля. Корабли не могут быть расположены вплотную друг ко другу.
  • Если игрок попадает в корабль на очередном ходе, ему предоставляется следующий ход.
  • Компьютер начинает с атаки координат, на которых нахождение кораблей статистически вероятнее всего. Попав, он начинает искать оставшуюся часть корабля, при этом он способен понять, как тот ориентирован.
  • Если выстрел в клетку завершился попаданием, четыре клетки по диагонали от неё отмечаются как пустые.
  • Если корабль погиб, все клетки вокруг него отмечаются как пустые. Сам корабль отмечается как потопленный.
  • Побеждает игрок, первый уничтоживший все корабли противника.
  • Игра реализована на классах: игрок, корабль, поле, игра.
  • Каждому игроку принадлежит два объекта класса «поле» — то, которое видимо ему, и то, которое видимо его противнику.
  • У каждой клетки на поле есть буквенное и цветовое обозначение, соответствующее происходящему на ней.

Игра «Жизнь» (game_of_life)

  • Мёртвая клетка, с которой соседствуют три живые, оживает.
  • Живая клетка с двумя или тремя живыми соседками продолжает жить, иначе погибает.
  • Размеры поля задаются пользователем.
  • В моей реализации на каждой итерации обсчитываются не все клетки поля, а только живые и их окружение. Для их хранения используется set. Это позволяет игре работать относительно быстро на большом поле.
  • Также в моей реализации игру в любой момент можно поставить на паузу, изменить конфигурацию на поле и запустить игру снова.
  • Рисовать можно, не отрывая курсор от канвы.

Крестики-нолики (tic-tac-toe)

Разработано несколько режимов:

  • игра двух человек на поле 3 × 3 (XO_two_players.py);
  • игра двух человек на поле n × n (XO_two_players_nxn.py);
  • игра человека против рандомного компьютера (XO_AI_random.py);
  • ❗ игра человека против непобедимого компьютера, человек за крестиков (XO_AI_perfect_noughts.py).

В процессе разработки следующие режимы:

  • игра человека против непобедимого компьютера, человек за ноликов (XO_AI_perfect_crosses.py);
  • реализация через ООП (XO_classes.py).

Симуляция лото (russian_lotto)

Я написал эту программу, чтобы продемонстрировать, что успех при игре в русское лото зависит только от количества удерживаемых игроком карт, и иной выигрышной стратегии нет из-за случайной природы игры. В игре три игрока, каждому можно задать количество карт, которые он будет держать, а также количество раундов в игре.

Из примечательного: можно использовать не только стандартный набор из 24-х карт, но и случайно сгенерированные карты, созданные по правилам (матрица 3 × 9 заполняется числами от 1 до 90 без повторений, в каждой колонке должно быть 1 или 2 числа, в каждой строке — 5 чисел. Первая колонка заполняется числами от 1 до 9 (9 штук); колонки со 2-ой по 8-ую — числами одного десятка (например, вторая — от 10 до 19, 10 штук); последняя, 9-я, колонка — числами от 80 до 90 (11 штук)).