start making weighting system

This commit is contained in:
emil
2024-10-20 19:16:13 +03:00
parent 057d8eae9c
commit 8b0281ac26
+170 -18
View File
@@ -8,6 +8,9 @@ class Cell:
content = None
rect = pg.Rect(0, 0, size, size)
border_width = 2
g = 1
h = 2
f = g + h
def __init__(self, position):
self.set_position(position)
self.rect = pg.Rect(self.coordinates[0], self.coordinates[1],
@@ -21,29 +24,56 @@ class Cell:
self.content
def set_perceptor(self, perceptor):
self.perceptor = perceptor
def clear_perceptor(self):
self.perceptor = None
def draw(self):
if self.perceptor == None:
pg.draw.rect(screen, "white", self.rect)
else:
pg.draw.rect(screen, self.perceptor.color, self.rect)
print(self.perceptor.color)
pass
pg.draw.rect(screen, self.perceptor.color, self.rect) #TODO:DELETE THIS AND MAKE OVERLAPING HALF_TRANSPARENT ADDITIONAL CELLS SPAWNIN UNDER PERCEPTION IN NEO CLASS
g_font = pg.font.Font(None, 14)
text = g_font.render((str)(self.g), True, "black")
screen.blit(text, ((self.coordinates[0] + self.size * 0.05, self.coordinates[1] + self.size * 0.75)))
h_font = pg.font.Font(None, 14)
text = h_font.render((str)(self.h), True, "black")
screen.blit(text, ((self.coordinates[0] + self.size * 0.8, self.coordinates[1] + self.size * 0.75)))
f_font = pg.font.Font(None, 16)
text = f_font.render((str)(self.f), True, "maroon")
screen.blit(text, ((self.coordinates[0] + self.size * 0.425, self.coordinates[1] + self.size * 0.7)))
def calculate_cost(self):
self.g = abs(self.position[0] - neo.position[0]) + abs(self.position[1] - neo.position[1])
def calculate_heuristic(self):
self.h = abs(self.position[0] - keymaker.position[0]) + abs(self.position[1] - keymaker.position[1])
def calculate_estimated(self):
self.f = self.g + self.h
class Map:
cell_matrix = []
dimensions = (8, 8)
def __init__(self, dimensions:tuple):
self.dimensions = dimensions
for x in range(dimensions[0] - 1):
for x in range(dimensions[0]):
column = []
for y in range(dimensions[1] - 1):
for y in range(dimensions[1]):
column.append(Cell((x,y)))
self.cell_matrix.append(column)
def get_cell(self, x, y):
return self.cell_matrix[x][y]
if (x < self.dimensions[0] and y < self.dimensions[1]):
return self.cell_matrix[x][y]
def calculate_costs(self):
for x in range(self.dimensions[0]):
for y in range(self.dimensions[1]):
self.get_cell(x, y).calculate_cost()
self.get_cell(x, y).calculate_heuristic()
self.get_cell(x, y).calculate_estimated()
def draw(self):
for x in range(self.dimensions[0] - 1):
for y in range(self.dimensions[1] - 1):
for x in range(self.dimensions[0]):
for y in range(self.dimensions[1]):
self.get_cell(x, y).draw()
@@ -55,6 +85,7 @@ class Entity:
cell = None
name = ""
color = "black"
font_size = 32
def __init__(self, cell_position):
self.set_cell(map.get_cell(cell_position[0], cell_position[1]))
def set_cell(self, cell):
@@ -63,8 +94,10 @@ class Entity:
self.coordinates = (self.cell.coordinates[0] + self.offset[0],
self.cell.coordinates[1] + self.offset[1])
self.cell.set_content(self)
def set_position(self, x, y):
self.set_cell(map.get_cell(x, y))
def draw(self):
font = pg.font.Font(None, 32)
font = pg.font.Font(None, self.font_size)
text = font.render(self.name, True, self.color)
screen.blit(text, ((self.cell.coordinates[0] + self.offset[0], self.cell.coordinates[1] + self.offset[1])))
@@ -74,8 +107,6 @@ class Entity:
class Actor(Entity):
perception_radius = 1
percepted_cells = []
def percept(self, cell):
cell.set_perceptor(self)
pass
class Neo(Actor):
@@ -84,46 +115,167 @@ class Neo(Actor):
self.color = "blue"
self.name = "neo"
def percept(self):
#clear percepted celles
for i in self.percepted_cells:
if (i != None):
i.clear_perceptor()
self.percepted_cells = []
for x in range(self.position[0] - self.perception_radius,
self.position[0] + self.perception_radius + 1):
for y in range(self.position[1] - self.perception_radius,
self.position[1] + self.perception_radius + 1):
if (x != self.position[0] or y != self.position[1]):
print(x, y)
map.get_cell(x, y).set_perceptor(self)
self.percepted_cells.append(map.get_cell(x, y)) #set current percieved cells
#set perceptors
for i in self.percepted_cells:
if (i != None):
i.set_perceptor(self)
pass
class Smith(Actor):
def __init__(self, cell_position):
super().__init__(cell_position)
self.color = "red"
self.name = "smith"
self.font_size = 26
def percept(self):
#clear percepted celles
for i in self.percepted_cells:
i.clear_perceptor()
self.percepted_cells = []
for x in range(self.position[0] - self.perception_radius,
self.position[0] + self.perception_radius + 1):
for y in range(self.position[1] - self.perception_radius,
self.position[1] + self.perception_radius + 1):
if (x != self.position[0] or y != self.position[1]):
self.percepted_cells.append(map.get_cell(x, y)) #set current percieved cells
#set perceptors
for i in self.percepted_cells:
i.set_perceptor(self)
pass
class Sentinel(Actor):
def __init__(self, cell_position):
super().__init__(cell_position)
self.color = "orange"
self.name = "sentinel"
self.font_size = 18
def percept(self):
#clear percepted celles
for i in self.percepted_cells:
i.clear_perceptor()
self.percepted_cells = []
stencil_cells_positions = []
stencil_cells_positions.append((self.position[0], self.position[1] + 1))
stencil_cells_positions.append((self.position[0] - 1, self.position[1]))
stencil_cells_positions.append((self.position[0], self.position[1]))
stencil_cells_positions.append((self.position[0] + 1, self.position[1]))
stencil_cells_positions.append((self.position[0], self.position[1] - 1))
for i in stencil_cells_positions:
if (i[0] != self.position[0] or i[1] != self.position[1]):
self.percepted_cells.append(map.get_cell(i[0], i[1])) #set current percieved cells
#set perceptors
for i in self.percepted_cells:
i.set_perceptor(self)
pass
class Key_maker(Entity):
class Keymaker(Entity):
def __init__(self, cell_position):
super().__init__(cell_position)
self.color = "green"
self.name = "key maker"
self.font_size = 14
pass
class Backdoor_key(Entity):
pass
def read_initial_inputs():
neo.perception_radius = (int)(input())
keymaker_position = input().split(" ")
keymaker.set_position((int)(keymaker_position[0]), (int)(keymaker_position[1]))
def read_input():
inpt = input().split(" ")
return inpt
def move(x, y):
neo.set_position(x, y)
print(f"m {x} {y}")
map = Map((8, 8))
neo = Neo((3, 3))
neo.perception_radius = 2
smith = Smith((1,1))
sentinel = Sentinel((3,4))
keymaker = Keymaker((5,5))
pg.init()
screen = pg.display.set_mode([512,512])
pg.display.set_caption("Matrix Universe")
running = True
#pg.time.delay(7000)
move(0, 0)
read_initial_inputs()
while running:
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
running = False
screen.fill("black")
map.calculate_costs()
map.draw()
neo.draw()
neo.percept()
neo.draw()
keymaker.draw()
pg.display.update()
move_input = read_input()
move((int)(move_input[0]), (int)(move_input[1]))
'''
inpt = read_input()
item_position = ()
item_type = ""
if len(inpt) == 3:
item_position[0] = inpt[0]
item_position[1] = inpt[1]
item_type = inpt[2]
elif len(inpt) == 1:
pass
move(3,4)
'''
pg.display.update()
'''
neo.set_position(5,6)
smith.draw()
smith.percept()
sentinel.draw()
sentinel.percept()
keymaker.draw()
'''
#pg.time.delay(1000)