snake_move #16

Merged
s481834 merged 14 commits from snake_move into BFS 2024-04-24 17:41:47 +02:00
5 changed files with 41 additions and 11 deletions
Showing only changes of commit 066894d85c - Show all commits

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) ui=Ui.Ui(screen)
#Tractor creation #Tractor creation
traktor_slot = pole.get_slot_from_cord((0, 0)) 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 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") ui.render_text_to_console(string_to_print="Przejazd inicjalizujacy- traktor sprawdza poziom nawodnienia")
traktor.initial_move(pole) traktor.initial_move(pole)
traktor.reset_pos(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 start_flag=False
demo_move() # demo_move()
old_info=get_info(old_info) old_info=get_info(old_info)
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:

View File

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

View File

@ -51,4 +51,6 @@ class Slot:
def print_status(self): def print_status(self):
return f"wspolrzedne: (X:{self.x_axis} Y:{self.y_axis}) "+self.plant.report_status() 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) elem = fringe.pop(0)
if goalTest(elem.state["hydradeIndex"]): 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) explored.append(elem)
@ -181,23 +186,40 @@ class Tractor:
self.do_move_if_valid(pole,(0,0)) self.do_move_if_valid(pole,(0,0))
def initial_move(self,pole): def initial_move(self,pole):
for y in range (0,12): for y in range (0,dCon.NUM_Y):
if(y%2==0): if(y%2==0):
for x in range(0,20): for x in range(0,dCon.NUM_X):
self.snake_move(pole,x,y) self.snake_move(pole,x,y)
else: else:
for x in range(20,0,-1): for x in range(dCon.NUM_X,-1,-1):
self.snake_move(pole,x,y) self.snake_move(pole,x,y)
def snake_move(self,pole,x,y): def snake_move(self,pole,x,y):
next_slot_coordinates=(x,y) next_slot_coordinates=(x,y)
if(self.do_move_if_valid(pole,next_slot_coordinates)): 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) self.clock.tick(10)
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
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 #to tak zrobiłam już na później, może się przyda
def change_osprzet(self, new_osprzet): def change_osprzet(self, new_osprzet):
@ -213,4 +235,6 @@ class Tractor:
print("- Typ:", akcja.typ) print("- Typ:", akcja.typ)
else: else:
print("Brak akcji przypisanych do tego sprzętu.") print("Brak akcji przypisanych do tego sprzętu.")
def irrigateSlot(self):
self.slot.irrigatePlant()

View File

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