import pygame import numpy as np # Colors: # Define some colors BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) BLUE = (0, 0, 240) #Width and Height of each square: WIDTH = 20 HEIGHT = 20 #Margin: MARGIN = 5 grid = [[0 for x in range(16)] for y in range(16)] def change_value(i, j, width, n): for r in range (i, i+width): for c in range (j, j+width): grid[r][c] = n class Table: def __init__(self, coordinate_i, coordinate_j): self.coordinate_i = coordinate_i self.coordinate_j = coordinate_j change_value(coordinate_i, coordinate_j, 2, 1) class Kitchen: def __init__(self, coordinate_i, coordinate_j): self.coordinate_i = coordinate_i self.coordinate_j = coordinate_j change_value(coordinate_i, coordinate_j,3 , 2) class Agent: def __init__(self,orig_coordinate_i, orig_coordinate_j): self.orig_coordinate_i = orig_coordinate_i self.orig_coordinate_j = orig_coordinate_j self.state = np.array([1,2]) change_value(orig_coordinate_j, orig_coordinate_j, 1, 3) self.state_update(orig_coordinate_i, orig_coordinate_j) def state_update(self, c1, c2): self.state[0] = c1 self.state[1] = c2 print(self.state) def leave(self): change_value(self.state[0], self.state[1], 1, 0) def move_up (self): self.leave() self.state_update(x-1, y) change_value(self.state[0], self.state[1], 1, 3) def move_down(self): self.leave() change_value(self.state[0], self.state[1], 1, 0) self.state_update(x+1, y) change_value(self.state[0], self.state[1], 1, 3) def move_right(self): self.leave() self.state_update(x, y+1) change_value(self.state[0], self.state[1], 1, 3) def move_left(self): self.leave() self.state_update(x, y-1) change_value(self.state[0], self.state[1], 1, 3) ## default positions of the agent: x = 11 y = 11 agent = Agent(x, y) table1 = Table(2, 2) table2 = Table (2,7) table3 = Table(2, 12) table4 = Table(7, 2) table5 = Table(7, 7) table6 = Table(7, 12) table7 = Table(12, 2) table8 = Table(12, 7) #class Kitchen: kitchen = Kitchen(13, 13) pygame.init() WINDOW_SIZE = [405, 405] screen = pygame.display.set_mode(WINDOW_SIZE) pygame.display.set_caption("Waiter_Grid3") done = False clock = pygame.time.Clock() # -------- Main Program Loop ----------- while not done: x = agent.state[0] y = agent.state[1] pygame.time.delay(100) for event in pygame.event.get(): # Checking for the event if event.type == pygame.QUIT: # If the program is closed: done = True # To exit the loop screen.fill(BLACK) # Background color for row in range(16): # Drawing the grid for column in range(16): color = WHITE if grid[row][column] == 1: color = GREEN if grid[row][column] == 2: color = RED if grid[row][column] == 3: color = BLUE pygame.draw.rect(screen, color, [(MARGIN + WIDTH) * column + MARGIN, (MARGIN + HEIGHT) * row + MARGIN, WIDTH, HEIGHT]) keys = pygame.key.get_pressed() # Moving the agent: if keys[pygame.K_LEFT]: # Left: # Checking if not a table, a kitchen, or a wall: if y-1 < 0 or grid[x][y-1] == 1: continue else: agent.move_left() # If okay, the move if keys[pygame.K_RIGHT]: # The same procedure with right: if y+1> 15 or grid[x][y+1] == 1 or grid[x][y+1] == 2: continue else: agent.move_right() if keys[pygame.K_UP]: # The same procedure with up: if x-1<0 or grid[x-1][y] == 1 or grid[x-1][y] == 2: continue else: agent.move_up() if keys[pygame.K_DOWN]: # The same procedure with down if x +1 >15 or grid[x+1][y] == 1 or grid[x+1][y] == 2: continue else: agent.move_down() clock.tick(60) # Limit to 60 frames per second pygame.display.flip() # Updating the screen pygame.quit()