import pygame from collections import deque import prefs class Agent: def __init__(self, x, y, cells, baseScore=0): self.sprite = pygame.image.load("sprites/BartenderNew64.png").convert_alpha() self.sprite = pygame.transform.scale(self.sprite, (prefs.CELL_SIZE, prefs.CELL_SIZE)) self.current_cell = cells[x][y] self.moved=False self.last_move_time = pygame.time.get_ticks() self.last_interact_time = pygame.time.get_ticks() self.last_update_time = pygame.time.get_ticks() self.cells = cells self.score = baseScore self.multiplier = 1 def move_up(self): if pygame.time.get_ticks()-self.last_move_time > 125 and self.current_cell.Y > 0 and not self.cells[self.current_cell.X][self.current_cell.Y-1].blocking_movement: self.current_cell = self.cells[self.current_cell.X][self.current_cell.Y-1] self.moved=True self.last_move_time=pygame.time.get_ticks() def move_down(self): if pygame.time.get_ticks()-self.last_move_time > 125 and self.current_cell.Y < prefs.GRID_SIZE-1 and not self.cells[self.current_cell.X][self.current_cell.Y+1].blocking_movement: self.current_cell = self.cells[self.current_cell.X][self.current_cell.Y+1] self.moved=True self.last_move_time=pygame.time.get_ticks() def move_left(self): if pygame.time.get_ticks()-self.last_move_time > 125 and self.current_cell.X > 0 and not self.cells[self.current_cell.X-1][self.current_cell.Y].blocking_movement: self.current_cell = self.cells[self.current_cell.X-1][self.current_cell.Y] self.moved=True self.last_move_time=pygame.time.get_ticks() def move_right(self): if pygame.time.get_ticks()-self.last_move_time > 125 and self.current_cell.X < prefs.GRID_SIZE-1 and not self.cells[self.current_cell.X+1][self.current_cell.Y].blocking_movement: self.current_cell = self.cells[self.current_cell.X+1][self.current_cell.Y] self.moved=True self.last_move_time=pygame.time.get_ticks() def update(self, surface): surface.blit(self.sprite, (self.current_cell.X * prefs.CELL_SIZE, self.current_cell.Y * prefs.CELL_SIZE)) current_update_time = pygame.time.get_ticks() # różnca czasu między wyoływaniami, używa do uniezależnienia od ilości wywołań funkcji delta_time = ((current_update_time - self.last_update_time)/1000) self.increase_multiplier(-(1 / 16) * delta_time) self.last_update_time = current_update_time def increase_score(self, amount): self.score += amount * round(self.multiplier,2) print("Agent score changed from {} to {} (multiplied by {}!)".format(self.score - amount, self.score, round(self.multiplier,2))) def increase_multiplier(self, amount): self.multiplier += amount if self.multiplier > 2: self.multiplier = 2 print("Agent score changed from {} to {}".format(self.multiplier , self.multiplier + amount if self.multiplier + amount <= 2 else 2)) return if self.multiplier < 1: self.multiplier = 1 def moveto(self,x,y): if not self.cells[x][y].blocking_movement: self.current_cell = self.cells[x][y] self.moved=True self.last_move_time=pygame.time.get_ticks() print("Agent moved to x,y: ",x,y) else: print("Agent cannot move to this direction")