ruch_traktora_po_bfs #14

Merged
s481834 merged 4 commits from ruch_traktora_po_bfs into snake_move 2024-04-14 19:50:31 +02:00
5 changed files with 41 additions and 11 deletions

8
App.py
View File

@ -21,7 +21,7 @@ pole.draw_grid() #musi byc tutaj wywołane ponieważ inicjalizuje sloty do slown
ui=Ui.Ui(screen)
#Tractor creation
traktor_slot = pole.get_slot_from_cord((0, 0))
traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.plug,clock)
traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.opryskiwacz,clock)
def init_demo(): #Demo purpose
@ -37,8 +37,12 @@ def init_demo(): #Demo purpose
ui.render_text_to_console(string_to_print="Przejazd inicjalizujacy- traktor sprawdza poziom nawodnienia")
traktor.initial_move(pole)
traktor.reset_pos(pole)
bfsRoot = Tractor.BFS({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict})
bfsRoot.reverse()
# ui.render_text_to_console(string_to_print="traktor porusza się ścieżką bfs")
traktor.move_by_root(bfsRoot, pole, [traktor.irrigateSlot])
start_flag=False
demo_move()
# demo_move()
old_info=get_info(old_info)
for event in pygame.event.get():
if event.type == pygame.QUIT:

View File

@ -55,8 +55,8 @@ class Pole:
def check_collision(self,mouse_x,mouse_y):
mouse_x=math.floor(mouse_x/dCon.CUBE_SIZE)
mouse_y=math.floor(mouse_y/dCon.CUBE_SIZE)
if(mouse_x<20):
if(mouse_y<12):
if(mouse_x<dCon.NUM_X):
if(mouse_y<dCon.NUM_Y):
collided=self.get_slot_from_cord((mouse_x,mouse_y))
return collided.print_status()
return ""

View File

@ -51,4 +51,6 @@ class Slot:
def print_status(self):
return f"wspolrzedne: (X:{self.x_axis} Y:{self.y_axis}) "+self.plant.report_status()
def irrigatePlant(self):
self.plant.stan.nawodnienie = 100

View File

@ -72,7 +72,12 @@ def BFS(istate):
elem = fringe.pop(0)
if goalTest(elem.state["hydradeIndex"]):
return elem #TODO ciąg akcji zbudowany z wykorzystaniem pól parent i action
x = elem
tab = []
while x.parent != None:
tab.append(x.action)
x = x.parent
return tab
explored.append(elem)
@ -181,23 +186,40 @@ class Tractor:
self.do_move_if_valid(pole,(0,0))
def initial_move(self,pole):
for y in range (0,12):
for y in range (0,dCon.NUM_Y):
if(y%2==0):
for x in range(0,20):
for x in range(0,dCon.NUM_X):
self.snake_move(pole,x,y)
else:
for x in range(20,0,-1):
for x in range(dCon.NUM_X,-1,-1):
self.snake_move(pole,x,y)
def snake_move(self,pole,x,y):
next_slot_coordinates=(x,y)
if(self.do_move_if_valid(pole,next_slot_coordinates)):
self.slot_hydrate_dict[(x,y)]= pole.get_slot_from_cord((x,y)).get_hydrate_stats() #Budowanie slownika slotow z poziomem nawodnienia dla traktorka
if pole.get_slot_from_cord((x,y)).get_hydrate_stats() < 60:
hydrateIndex = 0
else:
hydrateIndex = 1
self.slot_hydrate_dict[(x,y)]= hydrateIndex #Budowanie slownika slotow z poziomem nawodnienia dla traktorka
self.clock.tick(10)
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
def move_by_root(self, root, pole, actions = None):
for move in root:
self.slot.redraw_image()
if move == 'forward':
self.move_forward(pole)
if move == 'right':
self.turn_right()
if move == 'left':
self.turn_left()
for a in actions:
a()
self.clock.tick(3)
#to tak zrobiłam już na później, może się przyda
def change_osprzet(self, new_osprzet):
@ -213,4 +235,6 @@ class Tractor:
print("- Typ:", akcja.typ)
else:
print("Brak akcji przypisanych do tego sprzętu.")
def irrigateSlot(self):
self.slot.irrigatePlant()

View File

@ -1,6 +1,6 @@
CUBE_SIZE = 64
NUM_X = 20
NUM_Y = 12
NUM_X = 5
NUM_Y = 3
#returns true if tractor can move to specified slot
def isValidMove(x, y):