You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.1 KiB
81 lines
2.1 KiB
#!/usr/bin/env python3
|
|
from enum import Enum
|
|
|
|
class SquareType(Enum):
|
|
AISLE = 0
|
|
SEAT = 1
|
|
|
|
height=7
|
|
width=33
|
|
|
|
class GridSquare:
|
|
def __init__(self, typ, occupant):
|
|
self.typ = typ
|
|
self.occupant = occupant
|
|
def __str__(self):
|
|
return "(%s|%s)" % (str(self.typ), str(self.occupant))
|
|
def __repr__(self):
|
|
return str(self)
|
|
|
|
def makeGrid(height, width):
|
|
return [[GridSquare(SquareType.AISLE, None) for x in range(0,width)] for y in range(0,height)]
|
|
|
|
class Passenger:
|
|
#dest and curr are both 2-tuples
|
|
def __init__(self, dest, curr):
|
|
self.dest = dest
|
|
self.curr = curr
|
|
def __str__(self):
|
|
return "(%s|%s)" % (dest, curr)
|
|
|
|
def manhattanDistance(pos1, pos2):
|
|
return abs(pos1[0] - pos2[0]) + abs(pos1[1] - pos2[1])
|
|
|
|
def mooreNeighbourhood(pos):
|
|
return [(pos[0], pos[1]+1), (pos[0]+1, pos[1]), (pos[0]-1, pos[1]), (pos[0], pos[1]-1)]
|
|
|
|
def nextSquare(passenger, grid):
|
|
#simple behaviour for now
|
|
candidati = []
|
|
for i in mooreNeighbourhood(passenger.curr):
|
|
if manhattanDistance(passenger.dest, i) < manhattanDistance(passenger.dest, passenger.curr):
|
|
candidati.append(i)
|
|
for i in candidati:
|
|
if grid[i[0]][i[1]].typ == SquareType.AISLE: #this should work well enough for one aisle plane
|
|
return i
|
|
#todo: implement shufflin'
|
|
return candidati[0]
|
|
|
|
def GenPassList():
|
|
return []
|
|
|
|
grid=makeGrid()
|
|
|
|
passengers = GenPassList()
|
|
for index, i in enumerate(passengers):
|
|
grid[i.curr[0]][i.curr[1]] = index
|
|
|
|
def tick():
|
|
# print grid
|
|
print(grid)
|
|
for row in grid:
|
|
for guy in row:
|
|
if guy.occupant is not None:
|
|
print("X", end="")
|
|
elif guy.typ == SquareType.SEAT:
|
|
print("_", end="")
|
|
else:
|
|
print(" ", end="")
|
|
print()
|
|
for (i, man) in enumerate(passengers):
|
|
#im sexist
|
|
cp = man.curr
|
|
man.curr = nextSquare(man, grid)
|
|
grid[cp[0]][cp[1]] = None #they move out of there
|
|
grid[man.curr[0]][man.curr[1]] = i
|
|
|
|
def run():
|
|
while 1:
|
|
tick()
|
|
|
|
run()
|
|
|