143 lines
4.6 KiB
Python
143 lines
4.6 KiB
Python
|
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()
|