From a67d160f9aedaae88d4db7520fb6a5bf4b097f87 Mon Sep 17 00:00:00 2001 From: michalnowak18 Date: Thu, 7 Apr 2022 13:01:11 +0200 Subject: [PATCH] added moving by bfs --- main.py | 5 ++-- src/__pycache__/constants.cpython-39.pyc | Bin 0 -> 523 bytes src/__pycache__/settings.cpython-39.pyc | Bin 0 -> 644 bytes src/__pycache__/tile.cpython-39.pyc | Bin 0 -> 1025 bytes src/__pycache__/tractor.cpython-39.pyc | Bin 0 -> 4117 bytes src/__pycache__/world.cpython-39.pyc | Bin 0 -> 1968 bytes src/tractor.py | 23 ++++++++-------- src/utils/__pycache__/bfs.cpython-39.pyc | Bin 0 -> 2686 bytes src/utils/bfs.py | 32 +++++++++++------------ 9 files changed, 29 insertions(+), 31 deletions(-) create mode 100644 src/__pycache__/constants.cpython-39.pyc create mode 100644 src/__pycache__/settings.cpython-39.pyc create mode 100644 src/__pycache__/tile.cpython-39.pyc create mode 100644 src/__pycache__/tractor.cpython-39.pyc create mode 100644 src/__pycache__/world.cpython-39.pyc create mode 100644 src/utils/__pycache__/bfs.cpython-39.pyc diff --git a/main.py b/main.py index adb4033..ffb56a9 100644 --- a/main.py +++ b/main.py @@ -19,8 +19,7 @@ def main(): screen = pygame.display.set_mode((settings.screen_width, settings.screen_height)) pygame.display.set_caption('TRAKTOHOLIK') - search = BFSSearcher().search((8, 1), (6, 2), Constants.UP) - print(search) + path = BFSSearcher().search((8, 1), (6, 2), Constants.UP) run = True while run: @@ -33,7 +32,7 @@ def main(): if event.type == pygame.QUIT: run = False - tractor.update() + tractor.update(path) tractor.check_collision(obstacles) pygame.display.update() pygame.quit() diff --git a/src/__pycache__/constants.cpython-39.pyc b/src/__pycache__/constants.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..873376646e99252d4aadc159f61a9521d9b549fe GIT binary patch literal 523 zcmY*U%T59@6z$9u7+z}pf^OOH0fZO~BAO@|95iVrY09*~#9;>8VuD-!89%|LzcE`^ zY<1^G?*P7TbI$2Gcc$&-)oKYrJ-_ruZ=kQ4`CAT{7C`R-piM8Re z(f4)Ij=0vuBt*%%l3K=w@F*g|_a|hWC}O6P@cEpic$VDB6+8j0tc*UPXhkK48_85S znHpN&x=4;quU1Z7#$rB`jHM;UW{Frt*}lTq?Se+_|`hRUG#fLsgP*mAcETkCGGw$a}UH@jW H-T~+fNezeF literal 0 HcmV?d00001 diff --git a/src/__pycache__/settings.cpython-39.pyc b/src/__pycache__/settings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59a3217e4d952dee68ecbd79ef6a34b388d448d5 GIT binary patch literal 644 zcmY*VJ&zMH5cPgs2zS{6DoVFOC_U(ePDBDxkmjIStu%7hv%7}*NQfUnoJPXpia`&VUI{I9bj$c0=R(KV zVxE+I|6jzct{C))2}K@hk;gj96CLa1R^+Kpx$ewQuhBWv*R*>rm#rd_Zjcs7i-f(C zs%<4X2&YP&|+Du-4ol8dscWyw$Y7vVdYSu*G`la6i#ux;i@ zC(LY!IngOI<9#^Kv>`_`%tTwjnai{nZb#D-NJAdK#ti{$@3g_UB1Mi4emmnC&o@8oD$7O;*N>m?Prn9?{UT+5MX0>NZE^(3ByZS~ zmz=YAOa?N%U@}zvJS+nl9kU|-jb5zaE;;T&TUC>~zrq{EJV!yXl1ql4@-n<+bM6DC zWh5gRU$8Qki5%dWT(XFj0}P+K=tMVa^DLhhqpj{*7wcuUP%Z*h zTNn3D)!K4+ww6$lxg57a7&efvST6K}s+rput{oHx#0#ZV7S4 z{=AsHoP96~%xtOavud``_H1=J)2&sFUSJ#B^$AoTZ3i<0^^Dqh)UP4NP!!!fL128u z6aVZ^(l!~5=4e-QO}*YNl4(zH8%oP}9Iw+cCOEy~aDeZM0LFND8Sazh;Q>l+SV<{- zUml}sd~CkC=NWHJHT8eDNdAY?56n}-A==;}Lcy;o|6?12T6Uk+HQ`hA+Yugm!hI`V zNgQ)qEftP=B*e0ltA^yU5T906b7L6@A-h@#-$-~w{8Wg`Ze~-fra|jn9vQh%=|K0D venLZoO?ecIvo!Q?r$y+pe!W2QBjbNJpo+b1FVtNZ(^uE&y{6{)n#SQ@2&3fw literal 0 HcmV?d00001 diff --git a/src/__pycache__/tractor.cpython-39.pyc b/src/__pycache__/tractor.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1975256fa4eee6998ae4bca0c49524f6005fbc54 GIT binary patch literal 4117 zcmbVPPjB4D6`vuwTymGYk{!iX(o|L36zCSPT_iy3rmmYnb&~?EQaDNutN?=Mj8
p?Zyx8(d%t;a zChT-t49{==vHR$suQK*8YAin%8t>xE?tusn&n}dXAv=%AG2y?k5Q3~Ci4x! zee*MRz=a{qr;cxx)A$Wxi{?}2+rkkp%BEEU9pC;CDz3?lx=Zcyn@mb z8{$=z9dSe4MA;Ra;x&|OpD~O1>rndjqPeHSC?Bcm*7i;kX4!T=+E#L`WG2&mdo)qo zVV`P|y`(+W8~A7u*#IPGPuQHFGR|h^j0Hw+4y<_t)SkmSr+mf+#=t4*fpKbJjE$B( zcTXAWt(k>ZD`?Ley7b5ZeHzu7K{n{lsJGc|c=fAregRK`aXs*P8wc3*v2DMCu!7|=l#KAXV5HcErtMUK8F<9gO zTVYV|sMZ39&JqsQcVT|@JtA8~-XKDr@3mjn>FWC=^8*mSeW0YA%79Ryen{Pyyzgpv z5yWnR`)!?n?Sk{^Z!h?sGPRCBU!X#}*kS{nR|J2J+Q>K??B~p20re7>a)}{~bM9T@ zQZFP0KjP|-0(oUnNemjgPgH%?IPj6hG;MCOqlWtH#hzt(&7mx34$85Azu2S4Hgb2+ znzt!BR#C)S_TDyD*Yngh6lE^Z8->G7Hkd37jI!P2>7QsPja2$*LQ0X1psk#m& zMVWGsFC4nkht_cPXZZkAR2gE6Z|U4X`C*f9&}U4&+C?-tGBCP+sJ`&dCurob?;Mt$ z@l!)R%(2U!V69laRe8m(ywV&v8*Jef;<^}R3sd_{bG1j^D)am1iOkMJF2Wc^u)@yt zfvZ?A%V?A&v5;YUQZ&Fw^HtW=w$e8289J;L?&uNDYEgn2E@6BvI+W2-p#Pg8pYLJP zjIt_)IfrlY>CM_WmquQ&6P=dm(EG-Jo$-6jYZ|WL1(H@ zndaHx-A7+@sn0O{q1P0Js`_w46$Qj@5nT7QziSsf^(e|kQW|w%std%8Hc-+Uh zOk4&o>8!(ALv6r@1_7di16cvj zzkdyP-bKZ?`)YIyhk8oVZVt5m>K9YP-A*EzB>2^N%p^1_IvOg1GU=NU)8Urk zdCn%@HK*x#j_Fuyd&butdy`!N literal 0 HcmV?d00001 diff --git a/src/__pycache__/world.cpython-39.pyc b/src/__pycache__/world.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..401ca43299c9b3faf51dfddee0984b927921b5cd GIT binary patch literal 1968 zcmb7EL2u+V6t)v5lS!wg+g-6Bfe1*TjkIbxfrJoR(UtZ@59}hO(IAt?ZklN(ncA*O zN10Ricc3XZ?wmMt;wSjZslNb;%krKx?X=zHKq5cC=lAmR{Jzi5*4JYK&)2_yv;SwG zkiXEl`S@TwfuTPEA&8(A8RG0!bm9#?N}dtn3-*!-cJ2**L7$T}xP(};mr~1Kl$FfU zy7_ouJb|G<1tH0h3NrKrg|9u~za&E@m}xjozEPE!eVgo7 znbwJE5+$cfYFV2kZzj`98krQ?L?-)9ro`h!n?{v&kzh4Rjvq;#l(jB}OrB3w3E|IF zb23eGEbZz+eGSGg4Bdh#VEez&JJNG2oqXN9T8Uf2iJ@a};S2wQg2k2=b5_veS_o^s zMRY+x@3&+TUl0oI#-{G2@g;>S6#E|{jsH8`CA%Xq_v|4y$mpGNk`+?#h*FvD@l+PG z_isD$W`Dnu(A-*rzW`+7Q$&V~%w#s4o*@P{aA_>7noQUjlksjPR!x4i)Fb$z0f@8> zwFATk4iOs|z)aggu4HB;cUJ0Ire$@Y5S?F%x(CxgpY47z`c6xwN0Tx?%tl3N4o~(+ zWo=|t7C?>q?1jpXfC(e5@{ucadwOOg&da(qoJWvFCm;w7Uw{7&;|;n2>jOI5aQxf8 z`Y^{HUOkuvha=4&pa?n#V8`Ss`Qf)Yuzc>f9_T;MS<8fXgG z!G%H`NZLmZ&xA-LwF&yLubNYyHz&2RKB&Wf z-c(DQVZxzbP72G+*;EcAP+dkxhfZu^*0(^s3qyYdf>1_d7!kbh0h%b$LTony+nCO_ zI&^Om?zL+HZ$*bNmI)ms3))ibpz9XhOTBJ0OsMP>3=9KiLrz)WsSl0>#B{`d3}M<` zL3Fm+m9cW(Dgq0@?z$ojCd;m@VK|5ddZDfiE2Q9*~1hi*Bx5 zFiKX@E06FX`uaFJHmm7526h$dfd-0dS#^)~{g0*A!77fD>+l zvX+h(>LJ>Lt}pzw6z0&bFRepa7KbMFUGG!^f$C!vc-U9yF1v>r^$vJ6a){6^`VQTC z#XOX^I_U!U(g=@z4Yw2LHs*ZNh!dbEw*$_PPqJ$1>2WTaoO5*_|A{RJ0-&iZl7%=Z^wCby(yQCzU->{3LC2NUXJL%{}&Ja B#RvcZ literal 0 HcmV?d00001 diff --git a/src/tractor.py b/src/tractor.py index 34cb215..4ef9a5f 100644 --- a/src/tractor.py +++ b/src/tractor.py @@ -1,7 +1,7 @@ import pygame import math from pygame.sprite import Sprite - +from constants import Constants as C class Tractor(Sprite): """ Class to represent our agent """ @@ -88,16 +88,17 @@ class Tractor(Sprite): self.rect.y += self.curr_direction[1] * self.settings.tile_size # jak wejdzie na kolizje to cofamy ruch # w przyszlosci mozna zmienic - def update(self): - key = pygame.key.get_pressed() + def update(self, path): - if key[pygame.K_d] and self.rect.x: - self.turn_right() - elif key[pygame.K_a]: - self.turn_left() - elif key[pygame.K_w]: - self.move() - # print(self.rect) + while(path): + action = path.pop(0) + if action == C.ROTATE_RIGHT and self.rect.x: + self.turn_right() + elif action == C.ROTATE_LEFT: + self.turn_left() + elif action == C.MOVE: + self.move() + # print(self.rect) def draw(self, screen): screen.blit(self.image, self.rect) @@ -120,4 +121,4 @@ class Tractor(Sprite): def fertilize(self, tile): if not tile.is_fertilized: tile.is_fertilized = True - tile.fertilizer = tile.plant.fertilizer \ No newline at end of file + tile.fertilizer = tile.plant.fertilizer diff --git a/src/utils/__pycache__/bfs.cpython-39.pyc b/src/utils/__pycache__/bfs.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6bc8e279001c5b656600a0685a136b7e2ca7ec6 GIT binary patch literal 2686 zcmZuz&2QX96rUN7z21*}D5~1Dlmekt+JdSIaX=M9Eos_-U|TgQNY)~2v-WOwv+-`m z-l~bb5>k5N)N{olIrh#!00;gA4s+nbsW(m>IPrU9@5UR|);xROn|br|`*dqzp~7(e z@mphuEi?8vO^TO=$z6>26Oe!fe8Bd(Cpde^0ufj*SYRCs&%#UwHfA1HB83b&Plo zB;_gdSt>wzDnUhRgIcKtDg(B~Uh_uX*5&qCsW3|X=Vz~n+G(|u-Z0Y6s6|4()aufj zpr=A3s5@H5;h>{z9Hr=RRVGp*;)1+ps*1;dch>JTpT?nzoBO@?ZmZetCA;IDW-m&@ zL63Ashuf;Pmkd=iR_*3E=?&uMPA9%KI@GT3_o80n`*cWb+{2yxK3X6f+?uXvb1a!& zw45LrTWrEADeJQd?9t~F5wMBXWfPh5fbTK&3S5y`eYq#pZ9MIX6+O;*4tNdlO8Kz6 z7Nno%QWw(QnM6RcnoG)%`~*n_!|plqU4{$@^d!7`9_ zikgdfAWP{)pu9GRq;emf%3Uz-DkDfbo9?!qIcJrlkc!aum z{^aOF0hv%YAqUh4~wbHbtafJC^~PuWS3s*AF+hwfyeU_ZwP% zyYXOK*PcAuzPG*MXA<%Bv6lBA{m{_WoNpF6t+3n)F ze2%vQo&(;|qRG73k#*6aI)Y@4TKl2z>x%F14}G%{ETw*j^eS!6v3-o+UclX)D87g_qtDTJO7Pjfrl8esolm$M;8i!W(5uHqT1=HILWlO>Cov#)|%C~zc4{0 zvlE^OR1OXQ#2N6aZb=HOkI*E zrBimF{g^hbi9K;9CDcq8qfBRkzdWg=E>>6iX8nPp-QX{RUnV|jIruqsQui5G9-d`- z0;6LvqO}2I>DZc7(VeQki|$nQjdtv=n%&;PRWdlT&g7a}!lyo{SJeA>s#PKs3)&hD zN7^>V*K2;kn0{tEKRoce!`8shGD&@aO`e;@?@*a;W%?F!*|_XOl1tiQdYUeUgK!_6 zDr;^Z(UIj@BlH%sFvy*6lxrEGH>t~5dCvdZiB05v3sHOngz>AE!zB{1!YiUCR`4!) z1*t|Uy38+RA+l2Vs#}=~1jy2~b>{%v6ur}nOhZAljuAfrNqL{C&4lAAj(K9i`JdDK zi9BW0i2A~~6+aAp`@~6wal!Qi3JaP;ZaCQ-d#0ICG8WV_IUI$?L|P7daiU8qe1^Us zsx=&L+*P+S1Aj~m^QUlD1}LVzi*NT>2eNn(go+wjrh?+MERNQSR(bo@M%`6cu~EHC zgnq6}5z=-t9t}culNe+vMb0QV%K$S~={*QGFigg}!nGH#DB@-RPSYPcMW$EyZ_L%v WinpoL?iX2Y{F17TsdP1K@!tPEr%Xfu literal 0 HcmV?d00001 diff --git a/src/utils/bfs.py b/src/utils/bfs.py index 05e1e93..06083c5 100644 --- a/src/utils/bfs.py +++ b/src/utils/bfs.py @@ -5,7 +5,6 @@ class Node: def __init__(self, current_x, current_y, agent_direction, action=None, parent=None): self.current_x = current_x self.current_y = current_y - self.state = tuple([self.current_x, self.current_y]) self.action = action self.parent = parent self.agent_direction = agent_direction @@ -40,7 +39,7 @@ class Node: neighbours.append((actions, (x - 1, y), C.LEFT)) - if y < 9: # upper neighbour + if y > 0: # upper neighbour if self.agent_direction == C.RIGHT: actions = [C.ROTATE_LEFT, C.MOVE] elif self.agent_direction == C.LEFT: @@ -50,9 +49,9 @@ class Node: elif self.agent_direction == C.DOWN: actions = [C.ROTATE_LEFT, C.ROTATE_LEFT, C.MOVE] - neighbours.append((actions, (x, y + 1), C.UP)) + neighbours.append((actions, (x, y - 1), C.UP)) - if y > 0: # down neighbour + if y < 9: # down neighbour if self.agent_direction == C.RIGHT: actions = [C.ROTATE_RIGHT, C.MOVE] elif self.agent_direction == C.LEFT: @@ -62,12 +61,10 @@ class Node: elif self.agent_direction == C.DOWN: actions = C.MOVE - neighbours.append((actions, (x, y - 1), C.DOWN)) + neighbours.append((actions, (x, y + 1), C.DOWN)) + return neighbours - def __str__(self): - return self.state + ' ' + self.parent - class BFSSearcher: @@ -76,27 +73,30 @@ class BFSSearcher: self.explored_states = [] self.path = [] - def search(self, first_state: tuple, goal: tuple, agent_direction: list): + def search(self, first_state: tuple, goal, agent_direction): self.fringe.append(Node(first_state[0], first_state[1], agent_direction)) while True: if not self.fringe: return False - element: Node = self.fringe.pop(0) + element = self.fringe.pop(0) if element.state == goal: return self.__state_eq_goal_action(element) self.explored_states.append(element) - for action, state, direction in element.successor(): + + for action, state, direction in element.succesor(): fringe_states = [] explored_states = [] for node in self.fringe: fringe_states.append(node.state) for node in self.explored_states: - explored_states.append(node.state) - if (state not in fringe_states) and (state not in explored_states): - x = Node(state[0], state[1], direction, action, element) + explored_states.append(node) + if state not in fringe_states and state not in explored_states: + x = Node(state[0], state[1], direction) + x.parent = element + x.action = action self.fringe.append(x) def __state_eq_goal_action(self, current_element: Node): @@ -107,7 +107,5 @@ class BFSSearcher: self.path.append(action) else: self.path.append(current_element.action) - current_element = current_element.parent - self.path.reverse() - return self.path + return self.path.reverse()