Skip to content
This repository has been archived by the owner on Jul 2, 2024. It is now read-only.

Commit

Permalink
fix styling
Browse files Browse the repository at this point in the history
  • Loading branch information
Vlad Ponomarov committed Feb 19, 2024
1 parent df15d44 commit 2b53876
Showing 1 changed file with 75 additions and 58 deletions.
133 changes: 75 additions & 58 deletions OOP_task.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,36 +28,41 @@

Должен содержать два класса

- Player
- Enemy
- `Player`
- `Enemy`

#### Player

Аттрибуты:

- name - Имя игрока, задается пользователем через консоль
- lives - Количество жизней, берется из константы из `settings.py`
- score - Очки игрока, изначально 0
- `name` - Имя игрока, задается пользователем через консоль
- `lives` - Количество жизней, берется из константы из `settings.py`
- `score` - Очки игрока, изначально 0

Методы:

- __init__ - для инициализации игрока, принимает только имя, назначает имя, кол-во жизней и очков.
- select_attack - метод для ввода атаки игроком. Вводим до тех пор, пока пользователь не введет валидное значение (1, 2, 3), использует константы из файла `settings.py`
- decrease_lives - метод, который будет вызываться если игрок проиграл "бой", уменьшает жизни на 1. Если жизни закончились, вызывает исключение `GameOver` из файла `exceptions.py`
- add_score - метод для начисления очков игроку.
- `__init__` - для инициализации игрока, принимает только имя, назначает имя, кол-во жизней и очков.
- `select_attack` - метод для ввода атаки игроком. Вводим до тех пор, пока пользователь не введет валидное значение (1, 2,
3), использует константы из файла `settings.py`
- `decrease_lives` - метод, который будет вызываться если игрок проиграл "бой", уменьшает жизни на 1. Если жизни
закончились, вызывает исключение `GameOver` из файла `exceptions.py`
- `add_score` - метод для начисления очков игроку.

#### Enemy

Аттрибуты:

- lives - Кол-во жизней, изначально зависит от уровня соперника и уровня сложности, уменьшается на 1 когда соперник проигрывает "бой"
- level - уровень соперника, будет увеличиваться с каждым новым соперником. Изначально 1.
- `lives` - Кол-во жизней, изначально зависит от уровня соперника и уровня сложности, уменьшается на 1 когда соперник
проигрывает "бой"
- `level` - уровень соперника, будет увеличиваться с каждым новым соперником. Изначально 1.

Методы:

- __init__ - для инициализации соперника, принимает только уровень и сложность, что бы вычислить кол-во жизней, назначает кол-во жизней и уровень.
- select_attack - метод для случайного выбора атаки (1, 2, 3), использует константы из файла `settings.py`
- decrease_lives - уменьшает жизни при проигрыше "боя", вызывает исключение `EnemyDown` из файла `exceptions.py` если у соперника закончились жизни
- `__init__` - для инициализации соперника, принимает только уровень и сложность, что бы вычислить кол-во жизней,
назначает кол-во жизней и уровень.
- `select_attack` - метод для случайного выбора атаки (1, 2, 3), использует константы из файла `settings.py`
- `decrease_lives` - уменьшает жизни при проигрыше "боя", вызывает исключение `EnemyDown` из файла `exceptions.py` если у
соперника закончились жизни

### game.py

Expand All @@ -67,25 +72,29 @@

Аттрибуты:

- player - объект игрока
- enemy - объект соперника, при убийстве будет создан новый, с более высоким уровнем
- mode - уровень сложности, normal или hard, содержит либо 1, либо 2, которые определены константами
- `player` - объект игрока
- `enemy` - объект соперника, при убийстве будет создан новый, с более высоким уровнем
- `mode` - уровень сложности, normal или hard, содержит либо 1, либо 2, которые определены константами

Методы:

- __init__ - принимает объект игрока и уровень сложности, создает первого соперника
- create_enemy - метод для создания нового соперника
- play - метод запуска игры. Запускает бесконечный цикл в одной итерации которого происходит "бой". Для этого вызывает два метода, `fight` и `handle_fight_result`. Отслеживает не произошло ли одно из исключений при вызове второго метода `GameOver` или `EnemyDown`, при первом завершает игру и вызывает метод для записи очков, при втором создает нового, более сильного соперника.
- fight - метод запрашивает у пользователя и соперника атаки, из констант получает результат боя (-1, 0, 1)
- handle_fight_result - принимает результат боя, и в зависимости от результата отнимает жизни либо у игрока, либо у соперника.
- save_score - вызывает сохранение очков при помощи вызова класса из файла `score.py`
- `__init__` - принимает объект игрока и уровень сложности, создает первого соперника
- `create_enemy` - метод для создания нового соперника
- `play` - метод запуска игры. Запускает бесконечный цикл в одной итерации которого происходит "бой". Для этого вызывает
два метода, `fight` и `handle_fight_result`. Отслеживает не произошло ли одно из исключений при вызове второго
метода `GameOver` или `EnemyDown`, при первом завершает игру и вызывает метод для записи очков, при втором создает
нового, более сильного соперника.
- `fight` - метод запрашивает у пользователя и соперника атаки, из констант получает результат боя (-1, 0, 1)
- `handle_fight_result` - принимает результат боя, и в зависимости от результата отнимает жизни либо у игрока, либо у
соперника.
- `save_score` - вызывает сохранение очков при помощи вызова класса из файла `score.py`

### exceptions.py

Классы
Классы

GameOver - когда у игрока заканчиваются жизни
EnemyDown - когда у соперника заканчиваются жизни
- `GameOver` - когда у игрока заканчиваются жизни
- `EnemyDown` - когда у соперника заканчиваются жизни

### settings.py

Expand Down Expand Up @@ -138,67 +147,75 @@ ATTACK_PAIRS_OUTCOME = {

Классы:

- ScoreHandler - класс для обработки очков
- GameRecord - класс содержащий записи об игроках
- PlayerRecord - класс для хранения записи об одном игроке
- `ScoreHandler` - класс для обработки очков
- `GameRecord` - класс содержащий записи об игроках
- `PlayerRecord` - класс для хранения записи об одном игроке

#### ScoreHandler

Аттрибуты:

- game_record - объект класса GameRecord, туда мы будем считывать сохраненные очки и записывать таблицу с новыми
- file_name - имя файла откуда и куда мы записываем очки
- `game_record` - объект класса GameRecord, туда мы будем считывать сохраненные очки и записывать таблицу с новыми
- `file_name` - имя файла откуда и куда мы записываем очки

Методы:

- __init__ - принимает только имя файла и сохраняет его. Вызывает метод для чтения файла.
- read - метод, который будет читать файл и каждую его строку сохранять в PlayerRecord, которые будут сохранятся в GameRecord.
- save - метод, который нужен, что бы записать новые результаты в файл (предварительно отсортировать и обрезать, если нужно)
- display - метод для отображения очков
- `__init__` - принимает только имя файла и сохраняет его. Вызывает метод для чтения файла.
- `read` - метод, который будет читать файл и каждую его строку сохранять в `PlayerRecord`, которые будут сохранятся в
`GameRecord`.
- `save` - метод, который нужен, что бы записать новые результаты в файл (предварительно отсортировать и обрезать, если
нужно)
- `display` - метод для отображения очков

#### GameRecord

Аттрибуты:

- records - список объектов типа PlayerRecord
- `records` - список объектов типа PlayerRecord

Методы:

- __init__ - создает объект с пустым списком записей
- add_record - метод для добавления записи об одном игроке. Должен проверять нет ли у нас уже такого игрока, и если есть, то перезаписывать его результат. Тот же самый игрок проверяется по имени и уровню сложности (игрок может быть представлен в таблице два раза на разном уровне сложности). (Можно использовать меджик метод __eq__ для поиска через `in`)
- prepare_records - метод для сортировки существующих результатов и обрезки до максимального кол-ва указанного в настройках

- `__init__` - создает объект с пустым списком записей
- `add_record` - метод для добавления записи об одном игроке. Должен проверять нет ли у нас уже такого игрока, и если
есть, то перезаписывать его результат. Тот же самый игрок проверяется по имени и уровню сложности (игрок может быть
представлен в таблице два раза на разном уровне сложности). (Можно использовать меджик метод `__eq__` для поиска
через `in`)
- `prepare_records` - метод для сортировки существующих результатов и обрезки до максимального кол-ва указанного в
настройках

#### PlayerRecord

Аттрибуты:

- name - имя игрока
- mode - уровень сложности
- score - кол-во очков
- `name` - имя игрока
- `mode` - уровень сложности
- `score` - кол-во очков

Методы:

- __init__ - для создания объекта принимает все три параметра
- __gt__ - для того что бы можно было отсортировать записи по очкам
- __str__ - для удобного вывода данных
- `__init__` - для создания объекта принимает все три параметра
- `__gt__` - для того что бы можно было отсортировать записи по очкам
- `__str__` - для удобного вывода данных

### main.py

Содержит функции:

- main - для запуска всего кода, внутри этой функции должен быть запущен процесс выбора из трех пунктов (Запуск игры, посмотреть очки и выйти из игры (1,2,3))
- play_game - вызывается если игрок выбрал начать игру, в этой функции будет запущен процесс создания игрока, создание объекта игры и запуск самой игры
- create_player - спросить игрока имя и сложность, создать объект игрока с указанным именем, и передать объект игрока и сложность в класс игры.
- show_scores - показать очки, используя класс `ScoreHandler`
- exit - выйти из игры
- `main` - для запуска всего кода, внутри этой функции должен быть запущен процесс выбора из трех пунктов (Запуск игры,
посмотреть очки и выйти из игры (1,2,3))
- `play_game` - вызывается если игрок выбрал начать игру, в этой функции будет запущен процесс создания игрока, создание
объекта игры и запуск самой игры
- `create_player` - спросить игрока имя и сложность, создать объект игрока с указанным именем, и передать объект игрока и
сложность в класс игры.
- `show_scores` - показать очки, используя класс `ScoreHandler`
- `exit` - выйти из игры

## Пример как выглядит содержимое файла с очками


Name Mode Score
Vlad Normal 14
Test Hard 12
Jack Normal 12
Vlad Hard 10
Jack Hard 9
| Name | Mode | Score |
|------|--------|-------|
| Vlad | Normal | 14 |
| Test | Hard | 12 |
| Jack | Normal | 12 |
| Vlad | Hard | 10 |
| Jack | Hard | 9 |

1 comment on commit 2b53876

@shorodilov
Copy link
Member

@shorodilov shorodilov commented on 2b53876 Feb 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

edu-python-course/problem-sets#130

Original challenge is available on GitHub pages.

Please sign in to comment.