Compare commits
2 Commits
0f92ffd53f
...
dd4f656ea2
Author | SHA1 | Date | |
---|---|---|---|
|
dd4f656ea2 | ||
|
0e2d63fbbf |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -148,29 +148,53 @@ class Tractor:
|
|||||||
|
|
||||||
|
|
||||||
def draw_tractor(self, win):
|
def draw_tractor(self, win):
|
||||||
|
|
||||||
imageTractor = pygame.transform.scale(self.image, (TILE_SIZE, TILE_SIZE))
|
imageTractor = pygame.transform.scale(self.image, (TILE_SIZE, TILE_SIZE))
|
||||||
win.blit(imageTractor, (self.rect.x, self.rect.y))
|
win.blit(imageTractor, (self.rect.x, self.rect.y))
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
|
||||||
|
|
||||||
|
def store_tile_image(self, tile):
|
||||||
|
return pygame.image.load(tile.image).convert_alpha()
|
||||||
|
|
||||||
|
def restore_tile_image(self, screen, tile):
|
||||||
|
image = pygame.image.load(tile.image).convert_alpha()
|
||||||
|
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
|
||||||
|
screen.blit(image, (tile.x, tile.y))
|
||||||
|
pygame.display.update()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#translates move_list generated by bfs into the actual movement:
|
#translates move_list generated by bfs into the actual movement:
|
||||||
def do_actions(tractor, WIN, move_list):
|
def do_actions(tractor, WIN, move_list):
|
||||||
trail = pygame.image.load("resources/images/background.jpg").convert_alpha()
|
# trail = pygame.image.load("resources/images/background.jpg").convert_alpha()
|
||||||
trail = pygame.transform.scale(trail, (TILE_SIZE, TILE_SIZE))
|
# trail = pygame.transform.scale(trail, (TILE_SIZE, TILE_SIZE))
|
||||||
|
tile_images = {}
|
||||||
|
for tile in tiles:
|
||||||
|
tile_images[(tile.x, tile.y)] = tractor.store_tile_image(tile)
|
||||||
|
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
for move in move_list:
|
for move in move_list:
|
||||||
WIN.blit(trail, (tractor.rect.x, tractor.rect.y, TILE_SIZE, TILE_SIZE))
|
# WIN.blit(trail, (tractor.rect.x, tractor.rect.y, TILE_SIZE, TILE_SIZE))
|
||||||
|
current_tile = None
|
||||||
|
for tile in tiles:
|
||||||
|
if tile.x == tractor.rect.x and tile.y == tractor.rect.y:
|
||||||
|
current_tile = tile
|
||||||
|
break
|
||||||
|
if current_tile:
|
||||||
|
tractor.restore_tile_image(WIN, current_tile)
|
||||||
|
|
||||||
if move == "move":
|
if move == "move":
|
||||||
tractor.move()
|
tractor.move()
|
||||||
elif move == "rotate_right":
|
elif move == "rotate_right":
|
||||||
tractor.rotate_to_right()
|
tractor.rotate_to_right()
|
||||||
elif move == "rotate_left":
|
elif move == "rotate_left":
|
||||||
tractor.rotate_to_left()
|
tractor.rotate_to_left()
|
||||||
|
|
||||||
tractor.draw_tractor(WIN)
|
tractor.draw_tractor(WIN)
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
|
||||||
#displays results of the "work_on_field" function next to the field:
|
#displays results of the "work_on_field" function next to the field:
|
||||||
def display_work_results(screen, text, position):
|
def display_work_results(screen, text, position):
|
||||||
font = pygame.font.Font(None, 30)
|
font = pygame.font.Font(None, 30)
|
||||||
|
@ -91,7 +91,7 @@ def heuristic(current_x, current_y, end_x, end_y):
|
|||||||
# actions(string): move, rotate_to_left, rotate_to_right
|
# actions(string): move, rotate_to_left, rotate_to_right
|
||||||
|
|
||||||
# main search function:
|
# main search function:
|
||||||
def a_star(istate, succ, goaltest, tractor):
|
def a_star(istate, succ_astar, goaltest):
|
||||||
fringe = []
|
fringe = []
|
||||||
explored = set()
|
explored = set()
|
||||||
node = Node(0, istate.get_x(), istate.get_y(), istate.get_direction(), None, None, 0)
|
node = Node(0, istate.get_x(), istate.get_y(), istate.get_direction(), None, None, 0)
|
||||||
@ -109,7 +109,7 @@ def a_star(istate, succ, goaltest, tractor):
|
|||||||
|
|
||||||
explored.add(elem)
|
explored.add(elem)
|
||||||
|
|
||||||
for (action, state) in succ(temp, tractor):
|
for (action, state) in succ_astar(temp):
|
||||||
fringe_tuple = []
|
fringe_tuple = []
|
||||||
explored_tuple = []
|
explored_tuple = []
|
||||||
|
|
||||||
|
@ -158,7 +158,43 @@ def succ(elem, tractor):
|
|||||||
|
|
||||||
return actions_states
|
return actions_states
|
||||||
|
|
||||||
|
|
||||||
|
#its the copy of successor function for A* only - tractor can ride through stones if there is no other way:
|
||||||
|
def succ_astar(elem):
|
||||||
|
actions_states = []
|
||||||
|
temp = copy.copy(elem.get_direction())
|
||||||
|
|
||||||
|
if temp == 1:
|
||||||
|
temp = 4
|
||||||
|
else:
|
||||||
|
temp -= 1
|
||||||
|
actions_states.append(("rotate_left", (elem.get_x(), elem.get_y(), temp)))
|
||||||
|
|
||||||
|
temp = copy.copy(elem.get_direction())
|
||||||
|
if temp == 4:
|
||||||
|
temp = 1
|
||||||
|
else:
|
||||||
|
temp += 1
|
||||||
|
actions_states.append(("rotate_right", (elem.get_x(), elem.get_y(), temp)))
|
||||||
|
|
||||||
|
temp_move_east = elem.get_x() + TILE_SIZE
|
||||||
|
temp_move_west = elem.get_x() - TILE_SIZE
|
||||||
|
temp_move_north = elem.get_y() - TILE_SIZE
|
||||||
|
temp_move_south = elem.get_y() + TILE_SIZE
|
||||||
|
|
||||||
|
if Tractor.can_it_move_node(elem) == "move east":
|
||||||
|
actions_states.append(("move", (temp_move_east, elem.get_y(), elem.get_direction())))
|
||||||
|
|
||||||
|
elif Tractor.can_it_move_node(elem) == "move west":
|
||||||
|
actions_states.append(("move", (temp_move_west, elem.get_y(), elem.get_direction())))
|
||||||
|
|
||||||
|
elif Tractor.can_it_move_node(elem) == "move north":
|
||||||
|
actions_states.append(("move", (elem.get_x(), temp_move_north, elem.get_direction())))
|
||||||
|
|
||||||
|
elif Tractor.can_it_move_node(elem) == "move south":
|
||||||
|
actions_states.append(("move", (elem.get_x(), temp_move_south, elem.get_direction())))
|
||||||
|
|
||||||
|
return actions_states
|
||||||
|
|
||||||
#returns list of actions
|
#returns list of actions
|
||||||
def get_moves(elem):
|
def get_moves(elem):
|
||||||
|
@ -10,7 +10,7 @@ from area.field import tiles, fieldX, fieldY
|
|||||||
from area.field import get_tile_coordinates, get_tile_index
|
from area.field import get_tile_coordinates, get_tile_index
|
||||||
from ground import Dirt
|
from ground import Dirt
|
||||||
from plant import Plant
|
from plant import Plant
|
||||||
from bfs import graphsearch, Istate, succ
|
from bfs import graphsearch, Istate, succ_astar, succ
|
||||||
from astar import a_star
|
from astar import a_star
|
||||||
from NN.neural_network import load_model, load_image, guess_image, display_image, display_result, clear_text_area
|
from NN.neural_network import load_model, load_image, guess_image, display_image, display_result, clear_text_area
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
@ -26,13 +26,10 @@ pygame.display.set_caption('Intelligent tractor')
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
run = True
|
run = True
|
||||||
|
|
||||||
window = drawWindow(WIN)
|
window = drawWindow(WIN)
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Tractor initialization:
|
#Tractor initialization:
|
||||||
tractor = Tractor(0*TILE_SIZE, 0*TILE_SIZE, 2, None, None)
|
tractor = Tractor(0*TILE_SIZE, 0*TILE_SIZE, 2, None, None)
|
||||||
tractor.rect.x += fieldX
|
tractor.rect.x += fieldX
|
||||||
@ -71,13 +68,11 @@ def main():
|
|||||||
goaltest[1]=tile_y
|
goaltest[1]=tile_y
|
||||||
|
|
||||||
#moves = (graphsearch(istate, succ, goaltest, tractor)) #<-------BFS
|
#moves = (graphsearch(istate, succ, goaltest, tractor)) #<-------BFS
|
||||||
moves = (a_star(istate, succ, goaltest, tractor))
|
moves = (a_star(istate, succ_astar, goaltest))
|
||||||
print(moves)
|
print(moves)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# movement based on route-planning:
|
# movement based on route-planning:
|
||||||
|
|
||||||
tractor.draw_tractor(WIN)
|
tractor.draw_tractor(WIN)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
if moves != False:
|
if moves != False:
|
||||||
@ -213,9 +208,18 @@ def main():
|
|||||||
#work on field:
|
#work on field:
|
||||||
if predykcje == 'work':
|
if predykcje == 'work':
|
||||||
tractor.work_on_field(WIN, goalTile, d1, p1)
|
tractor.work_on_field(WIN, goalTile, d1, p1)
|
||||||
|
|
||||||
#update the initial state for the next target:
|
#update the initial state for the next target:
|
||||||
istate = Istate(tile_x, tile_y, tractor.direction)
|
istate = Istate(tile_x, tile_y, tractor.direction)
|
||||||
|
|
||||||
|
#old goalTile is displayed with a black border - to show that it was an old target:
|
||||||
|
tiles[tile_index].image = "resources/images/sampling_old_goal.png"
|
||||||
|
image = pygame.image.load(tiles[tile_index].image).convert()
|
||||||
|
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
|
||||||
|
WIN.blit(image, (tiles[tile_index].x, tiles[tile_index].y))
|
||||||
|
pygame.display.flip()
|
||||||
|
tractor.draw_tractor(WIN)
|
||||||
|
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
print("\n")
|
print("\n")
|
||||||
|
|
||||||
|
BIN
source/resources/images/sampling_old_goal.png
Normal file
BIN
source/resources/images/sampling_old_goal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
Loading…
Reference in New Issue
Block a user