from random import randint from typing import Tuple import pygame from domain.commands.command import Command from domain.entities.cat import Cat from domain.world import World class RandomCatMoveCommand(Command): def __init__(self, world: World, cat: Cat) -> None: super().__init__() self.world = world self.cat = cat def run(self): move_vector = (0, 0) now = pygame.time.get_ticks() # region cat random movement cat = self.world.cat if now - cat.last_tick >= cat.cooldown: if not cat.busy: while True: cat.direction = randint(0, 3) if not ( (cat.direction == 0 and cat.y == 0) or (cat.direction == 1 and cat.x == self.world.width - 1) or (cat.direction == 2 and cat.y == self.world.height - 1) or (cat.direction == 3 and cat.x == 0) ): break if cat.direction == 0: # up if cat.busy: move_vector = (0, -1) cat.busy = not cat.busy if cat.direction == 1: # right if cat.busy: move_vector = (1, 0) cat.busy = not cat.busy if cat.direction == 2: # down if cat.busy: move_vector = (0, 1) cat.busy = not cat.busy if cat.direction == 3: # left if cat.busy: move_vector = (-1, 0) cat.busy = not cat.busy cat.last_tick = pygame.time.get_ticks() if move_vector == (0, 0): return end_x = cat.x + move_vector[0] end_y = cat.y + move_vector[1] if ( end_x > self.world.width - 1 or end_y > self.world.height - 1 or end_x < 0 or end_y < 0 ): return self.world.obstacles[cat.x][cat.y].remove(cat) cat.x = end_x cat.y = end_y self.world.obstacles[end_x][end_y].append(cat) # endregion cat random movement