From 5afcc0a1a5178de280f5b2961106164c958867f5 Mon Sep 17 00:00:00 2001 From: SaluSL Date: Fri, 7 May 2021 19:25:13 +0200 Subject: [PATCH] rotation added to the agent --- src/img/electronics.png | Bin 0 -> 2617 bytes src/main.py | 227 ++++++++++++++++++++-------------------- 2 files changed, 114 insertions(+), 113 deletions(-) create mode 100644 src/img/electronics.png diff --git a/src/img/electronics.png b/src/img/electronics.png new file mode 100644 index 0000000000000000000000000000000000000000..2f04b1a24de2ee08e45267e25bf2112417dd81d5 GIT binary patch literal 2617 zcmZ`*e>{_G8-Em0BBdf;KYA;Qq+X|V#*E`vixBG6WRc3KOc-m6dFjXT7LMi|Avz6t z(I}Q5n;FN6%25ro{MaOE)`OkdSek8Tc2wtl)F1bAU!Ui>@9Vy<@BO{L*OTVwgwl*LdT(F zQRrxMxT~vqbPW1*#Mx5-fbAz|JlNmrx7PXjHPUN8YxVQdSmM^LweLdOif!EW?y)vL z=`FsqKVl6M$x6CZ6r^d8z-WGQFxqc!iNg8(yH|P}Q&Y7H`Gc*aF)japi75@u4%Iuu zih^`aU;I}3+sXjo#qye-sE4}1>&+SOTX@z>UR~&}bkLEvUA$?f5Dtx0(OrRHFjd+%G4s^ z5dUy`fKA2Er{J`F^(;rzQxKz*F)&^IpDfCYigx^{&}=@@^fC$(LykO(2j}c6c^!k? zOughIxa|m+y@9+TtLp_ryw`2m4Z7%1oIizQUEh~{86=Sp-)Yp4jMz4}`O3x+z9*Eh znuqQ4KL7x@EdY?53IMYT|BLHY6!rfc~vHjy5-|N{4 zChfutPpe;Wvig2Gw$H6Au$vMIH!nH3vKZ@Mw2K~5w2huS6Ov~{)?97f)?Ai7vn+zx zmU{Jd$=x&*yvO{1!+wz@i#@w%QXb`o#)pO{x7#g;!=7e3uCl9Q&*p>|!dmmgi2`|T zIY?a^ZCT%81E^~|-v?Tj=xtX%RJOYIO`X`NmN@+Ad!f}aBiYkddsD*Tfk(#clS9-} zG|Z0xDH>Yyw$^&3U6%uwIP_SzXO)umB{;T*M6`u%>-i(~Sc!33rGGUczSH5Qht8$^g{0RY>Y> zSE9NAZGHObs4m%Xm93lpINx+U7Az-$>kSO9Aq7)YG0YLx@DHN@F4ZJq`09AbYC?3U z9K{h8jL&sJIXSi21$%8}#(-B)lL6U5n6JZMNrQ6KzH~@pIkl`a*OlNTdf2fg)Bax> zMawxzbZ}hQ2br~d=J$tAY5w2^8xqegOJ$X(iSXiC&)zMdE^@%k#FitK$-^bc+$(~i znF1J%md1Olqy5LGjUVs$6PV392u7)Nw1dsI1aWj!b3-@yQ^DpTN?DK?t4M+kbkOQT zoe=ggMs1b|yreJ8ck+*4CB@w+7^*oV@dR};ZHofz0I`W+E|BG-;dtun=JMbwEJY~8_U zFbR$c?jsOGW2P%TOrtp4}vP}%h^pe09|%0dN0%AkfBMVJyxYW@vwPQ(LA zb2tezT|CYeb7uMP8H@>i;n#RcnkG*2i{l}yVK(~XgL&-2Z}pQDdpy9r{%+2fAqj|x zLhRVg?M~d8)=S4so~2X{1nZNH(<|3OxxM(hb#wwBy&~}P?SYI^Sg;sdB8l`Z!Ba~K z0p=`F1;*zhU!ZBoiq6h{4TeY(%cR;n$;(K$r5wC`9obl1}(nOl zr%VZ0OH(C#5zKu=-?*#Iz3ATU}_>Ht=xI%$a0D4exnqgCF*nc1qBW zg=^{Dl9K7^>l_BD9gKq*3=A$sA4xV_zDUoLHymVPCUyW{K2sIMLaSaB(4voDUzn_5 b5i|kId&B6+^|= 0: - neighbours.append(("left", (x-1, y))) + neighbours.append((actions, (x + 1, y), "right")) - if y > 0: - neighbours.append(("up", (x, y-1))) + if x > 0: # LEFT NEIGHBOUR + if self.agent_direction == "right": + actions = ["rotate_left", "rotate_left", "move"] + elif self.agent_direction == "left": + actions = "move" + elif self.agent_direction == "up": + actions = ["rotate_left", "move"] + elif self.agent_direction == "down": + actions = ["rotate_right", "move"] - if y < 8: - neighbours.append(("down", (x, y+1))) + neighbours.append((actions, (x - 1, y), "left")) + + if y > 0: # UP NEIGHBOUR + if self.agent_direction == "right": + actions = ["rotate_left", "move"] + elif self.agent_direction == "left": + actions = ["rotate_right", "move"] + elif self.agent_direction == "up": + actions = "move" + elif self.agent_direction == "down": + actions = ["rotate_left", "rotate_left", "move"] + + neighbours.append((actions, (x, y - 1), "up")) + + if y < 8: # DOWN NEIGHBOUR + if self.agent_direction == "right": + actions = ["rotate_right", "move"] + elif self.agent_direction == "left": + actions = ["rotate_left", "move"] + elif self.agent_direction == "up": + actions = ["rotate_left", "rotate_left", "move"] + elif self.agent_direction == "down": + actions = "move" + + neighbours.append((actions, (x, y + 1), "down")) return neighbours @@ -141,7 +184,7 @@ class Shelf: class Agent: - def __init__(self, pos): + def __init__(self, pos, agent_direction="right"): self.pos = pos self.pos_coord = get_position_from_pix(pos) self.image = IMAGE @@ -149,82 +192,74 @@ class Agent: self.goal = (0, 0) self.path = None self.goal_achieved = False + self.agent_direction = agent_direction self.image_left = pygame.transform.flip(IMAGE, True, False) self.image_right = IMAGE self.image_down = pygame.transform.rotate(self.image_right, -90) self.image_up = pygame.transform.rotate(self.image_left, -90) - def move(self, key): - if key == pygame.K_UP and self.rect.y - size > 0: - self.rect.move_ip(0, -size) - self.pos = (self.pos[0], self.pos[1] - size) - # - self.pos_coord = get_position_from_pix(self.pos) - - if key == pygame.K_DOWN and self.rect.y + size < HEIGHT: - self.rect.move_ip(0, size) - self.pos = (self.pos[0], self.pos[1] + size) - # - self.pos_coord = get_position_from_pix(self.pos) - - if key == pygame.K_RIGHT and self.rect.x + size < WIDTH: - self.rect.move_ip(size, 0) - self.pos = (self.pos[0] + size, self.pos[1]) - # - self.pos_coord = get_position_from_pix(self.pos) - - if key == pygame.K_LEFT and self.rect.x - size > 0: - self.rect.move_ip(-size, 0) - self.pos = (self.pos[0] - size, self.pos[1]) - # - self.pos_coord = get_position_from_pix(self.pos) - def move_bfs(self): if self.path is None or not self.path: self.goal_achieved = True - # LIFT PACKAGE?? else: move = self.path.pop(0) - if move == "right": - self.image = self.image_right # ROTATION + if move == "rotate_left": + if self.agent_direction == "right": + self.agent_direction = "up" + self.image = self.image_up - self.rect.move_ip(size, 0) - self.pos = (self.pos[0] + size, self.pos[1]) - self.pos_coord = get_position_from_pix(self.pos) - elif move == "left": - self.image = self.image_left # ROTATION + elif self.agent_direction == "left": + self.agent_direction = "down" + self.image = self.image_down - self.rect.move_ip(-size, 0) - self.pos = (self.pos[0] - size, self.pos[1]) - self.pos_coord = get_position_from_pix(self.pos) + elif self.agent_direction == "up": + self.agent_direction = "left" + self.image = self.image_left - elif move == "down": - self.image = self.image_down # ROTATION + elif self.agent_direction == "down": + self.agent_direction = "right" + self.image = self.image_right - self.rect.move_ip(0, size) - self.pos = (self.pos[0], self.pos[1] + size) - self.pos_coord = get_position_from_pix(self.pos) + elif move == "rotate_right": + if self.agent_direction == "right": + self.agent_direction = "down" + self.image = self.image_down - elif move == "up": - self.image = self.image_up # ROTATION + elif self.agent_direction == "left": + self.agent_direction = "up" + self.image = self.image_up - self.rect.move_ip(0, -size) - self.pos = (self.pos[0], self.pos[1] - size) - self.pos_coord = get_position_from_pix(self.pos) + elif self.agent_direction == "up": + self.agent_direction = "right" + self.image = self.image_right - else: - print("error: bad path :move_bfs") + elif self.agent_direction == "down": + self.agent_direction = "left" + self.image = self.image_left - def lift_package(self, key): - if key == pygame.K_e: - for package in Package_list: - if package.is_package_up: - package.is_package_up = False - elif package.pos == agent.pos: - package.is_package_up = True + elif move == "move": + if self.agent_direction == "right": + self.rect.move_ip(size, 0) + self.pos = (self.pos[0] + size, self.pos[1]) + self.pos_coord = get_position_from_pix(self.pos) + + elif self.agent_direction == "left": + self.rect.move_ip(-size, 0) + self.pos = (self.pos[0] - size, self.pos[1]) + self.pos_coord = get_position_from_pix(self.pos) + + elif self.agent_direction == "up": + self.rect.move_ip(0, -size) + self.pos = (self.pos[0], self.pos[1] - size) + self.pos_coord = get_position_from_pix(self.pos) + + elif self.agent_direction == "down": + self.rect.move_ip(0, size) + self.pos = (self.pos[0], self.pos[1] + size) + self.pos_coord = get_position_from_pix(self.pos) def lift_package_bfs(self): for package in Package_list: @@ -233,35 +268,6 @@ class Agent: elif package.pos == agent.pos: package.is_package_up = True - def rotate(self, key): - if key == pygame.K_a: - self.turn_agent_left() - - if key == pygame.K_d: - self.turn_agent_right() - - if key == pygame.K_s: - self.turn_agent_down() - - if key == pygame.K_w: - self.turn_agent_up() - - def turn_agent_left(self): - self.successor = (self.pos_coord[0]-1, self.pos_coord[1]) - self.image = self.image_left - - def turn_agent_right(self): - self.successor = (self.pos_coord[0]+1, self.pos_coord[1]) - self.image = self.image_right - - def turn_agent_down(self): - self.successor = (self.pos_coord[0], self.pos_coord[1]-1) - self.image = self.image_down - - def turn_agent_up(self): - self.successor = (self.pos_coord[0], self.pos_coord[1]+1) - self.image = self.image_up - def goal_test(self, state): if state == self.goal: return True @@ -298,7 +304,7 @@ Package_list = [ generate_package(40, 40) ] -agent.path = breadth_first_search(agent.pos_coord) +agent.path = breadth_first_search(agent.pos_coord, agent.agent_direction) running = True while running: @@ -308,9 +314,10 @@ while running: running = False if event.type == pygame.KEYDOWN: - agent.move(event.key) - agent.lift_package(event.key) - agent.rotate(event.key) + pass + # agent.move(event.key) + # agent.lift_package(event.key) + # agent.rotate(event.key) for package in Package_list: if package.is_package_up: @@ -329,12 +336,7 @@ while running: if is_dock_empty: Package_list.append(generate_package(40, 40)) - # screen.fill((0, 0, 0)) - - - - - # pathing + # PATHING if not agent.goal_achieved: print(agent.path) @@ -348,8 +350,9 @@ while running: agent.goal = coord_goals.pop(0) agent.goal_achieved = False - agent.path = breadth_first_search(agent.pos_coord) + agent.path = breadth_first_search(agent.pos_coord, agent.agent_direction) + # DRAWING screen.blit(BACKGROUND, [0, 0]) screen.blit(DOCK, [0, 0]) screen.blit(board, board.get_rect()) @@ -359,8 +362,6 @@ while running: for package in Package_list: screen.blit(package.image, package.rect) - - pygame.display.update() pygame.quit()