from DataModels.Cell import Cell from DataModels.Road import Road from DataModels.House import House from DataModels.Dump import Dump from config import GRID_WIDTH, GRID_HEIGHT, DELAY from utilities import movement, check_moves from Traversal.DFS import DFS from Traversal.BestFS import BestFS import pygame class GC(Cell): moves_made = 0 def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0): Cell.__init__(self, x, y, max_rubbish, yellow, green, blue) self.moves = [] self.old_time = pygame.time.get_ticks() def move(self, direction, environment): self.x, self.y = movement(environment, self.x, self.y)[0][direction] self.update_rect(self.x, self.y) self.moves_made = self.moves_made + 1 #moves counter print(check_moves(environment, self.x, self.y,direction)) def collect(self, enviromnent): x, y = [self.x, self.y] coordinates = [(x, y - 1), (x, y + 1), (x - 1, y), (x + 1, y)] for coordinate in coordinates: if coordinate[0]<0 or coordinate[1]<0: continue try: item = enviromnent[coordinate[0]][coordinate[1]] except: continue if(type(item) == House or type(item) == Dump): item.return_trash(self) self.update_image() def get_moves_count(self): return self.moves_made def find_houses(self,enviromnent, house_count): x = self.x y = self.y result = [] for home in range(house_count): avalible_moves = check_moves(enviromnent, x,y) [x,y],result = DFS(enviromnent,avalible_moves,[[x,y]]) self.moves.extend(result) self.moves.reverse() def find_houses_BestFS(self,enviromnent, house_count): x = self.x y = self.y result = [] houses_list = [] a = 0 for row in enviromnent: b = 0 for col in row: print(col) if (type(col) is House): houses_list.append([col,[a,b]]) b += 1 a += 1 for home in range(house_count): avalible_moves = check_moves(enviromnent, x,y) [x,y],result = BestFS(enviromnent,avalible_moves,[[x,y]],houses_list) self.moves.extend(result) self.moves.reverse() def make_actions_from_list(self,environment): now = pygame.time.get_ticks() if len(self.moves)==0 or now - self.old_time <= DELAY: return self.old_time = pygame.time.get_ticks() if self.moves[-1] == "pick_garbage": self.collect(environment) self.moves.pop() return self.x, self.y = self.moves.pop() self.moves_made = self.moves_made + 1 #moves counter self.update_rect(self.x,self.y)