Conversation
…орых аргументов выставлены default значения
12gerts
left a comment
There was a problem hiding this comment.
Да здравствует наследование! Код надо переиспользовать
bot_logic.py
Outdated
| return random.choice(available_moves) | ||
|
|
||
|
|
||
| def check_winner(grid_size: int, grid: List[List[Optional[str]]], row: int, col: int) -> bool: |
There was a problem hiding this comment.
Это старая типизация. С 3.11 не надо импортировать из typing
| def check_winner(grid_size: int, grid: List[List[Optional[str]]], row: int, col: int) -> bool: | |
| def check_winner(grid_size: int, grid: list[list[str | None]], row: int, col: int) -> bool: |
bot_logic.py
Outdated
| return best_move | ||
|
|
||
| # 5. Если нет угроз и победных ходов, делаем случайный ход | ||
| available_moves: List[Tuple[int, int]] = [(x, y) for x in range(grid_size) for y in range(grid_size) |
There was a problem hiding this comment.
Не понимаю, зачем вы складываете это в кортеж, потом распаковываете, а потом опять собираете в кортеж. Можно это просто будет сразу какая-то структура, с которой везде будете работать
bot_logic.py
Outdated
| return None | ||
|
|
||
|
|
||
| def bot_move(grid_size, grid, bot_color, player_color) -> Tuple[int, int]: |
bot_logic.py
Outdated
|
|
||
| for dr, dc in _DIRECTIONS: | ||
| count: int = 1 | ||
| for i in range(1, 5): |
button.py
Outdated
| is_transparent: bool, obj: Optional[str], text: str = '') -> None: | ||
| function: Callable, args=None, | ||
| color=(0, 0, 0), hover_color=(0, 0, 0), on_close=False, | ||
| is_transparent=False, obj=None, text='') -> None: |
classic_game.py
Outdated
| current_time = time.time() | ||
| elapsed = current_time - self._last_time | ||
| if elapsed >= 1: # Обновляем каждую секунду | ||
| self._total_time -= int(elapsed) # Уменьшаем общий таймер | ||
| self._player_time -= int(elapsed) # Уменьшаем таймер игрока |
There was a problem hiding this comment.
Давайте datetime
from datetime import datetime
| current_time = time.time() | |
| elapsed = current_time - self._last_time | |
| if elapsed >= 1: # Обновляем каждую секунду | |
| self._total_time -= int(elapsed) # Уменьшаем общий таймер | |
| self._player_time -= int(elapsed) # Уменьшаем таймер игрока | |
| current_time = datetime.now() | |
| elapsed = current_time - self._last_time | |
| if elapsed >= 1: # Обновляем каждую секунду | |
| self._total_time -= elapsed.seconds # Уменьшаем общий таймер | |
| self._player_time -= elapsed.seconds # Уменьшаем таймер игрока |
n_enemies.py
Outdated
| winner = pygame.transform.scale(pygame.image.load("images/winner.png"), (290, 150)) | ||
| self._robot: pygame.Surface = pygame.transform.scale(pygame.image.load("images/robot.png"), (290, 190)) |
There was a problem hiding this comment.
Вынесите (290, 150) и (290, 190) во что-нибудь
n_enemies.py
Outdated
| from window import Window | ||
|
|
||
|
|
||
| class NEnemiesMode: |
There was a problem hiding this comment.
Есть ощущение, что надо сделать интерфейс и базовый класс для этого и ClassicMode, чета слишком много общего кода
options_of_n_enemies.py
Outdated
| окна настроек. Изменения темы сохраняются в файл. | ||
| """ | ||
| themes: List[str] = ['grid0.jpg', 'grid1.jpg', 'grid2.jpg'] | ||
| theme_file = Path('setting/theme.txt') |
There was a problem hiding this comment.
чета какое-то бесполезное действие. вы не используете возможности pathlib и зачем-то приводите к пути на месте, так тут еще и обратно в строку конвертируете и вечно строкой везде прописываете
options_of_n_enemies.py
Outdated
| prev_theme: str = theme_file.read_text().strip() | ||
| theme_index: int = (themes.index(prev_theme) + 1) % len(themes) | ||
| theme_file.write_text(themes[theme_index]) | ||
| theme_image_path = Path('images') / themes[theme_index] |
Видны отличия от старой версии