From ee2c65730d3432134273961fc62d01dec742f93b Mon Sep 17 00:00:00 2001 From: Paulina Smierzchalska Date: Thu, 11 Apr 2024 22:25:38 +0200 Subject: [PATCH 01/15] =?UTF-8?q?Zmiana=20organizacji=20ruchu=20traktora?= =?UTF-8?q?=20na=20wybieranie=20kierunku=20i=20ruchu=20w=20prz=C3=B3d,=20j?= =?UTF-8?q?eszcze=20bez=20obrot=C3=B3w=20przed=20zmiana=20slota?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tractor.py | 79 ++++++++++++++++++++++++++++++++++---------- images/traktorN.png | Bin 0 -> 69012 bytes images/traktorS.png | Bin 0 -> 71630 bytes images/traktorW.png | Bin 0 -> 66452 bytes 4 files changed, 62 insertions(+), 17 deletions(-) create mode 100644 images/traktorN.png create mode 100644 images/traktorS.png create mode 100644 images/traktorW.png diff --git a/Tractor.py b/Tractor.py index d8bf2f4..adf265a 100644 --- a/Tractor.py +++ b/Tractor.py @@ -5,36 +5,81 @@ import Slot import Osprzet class Tractor: + DIRECTION_NORTH = 'N' + DIRECTION_SOUTH = 'S' + DIRECTION_WEST = 'W' + DIRECTION_EAST = 'E' def __init__(self,slot,screen, osprzet): - self.tractor_image = pygame.image.load('images/traktor.png') - self.tractor_image = pygame.transform.scale(self.tractor_image, (dCon.CUBE_SIZE, dCon.CUBE_SIZE)) + self.tractor_images = { + Tractor.DIRECTION_NORTH: pygame.transform.scale(pygame.image.load('images/traktorN.png'), + (dCon.CUBE_SIZE, dCon.CUBE_SIZE)), + Tractor.DIRECTION_SOUTH: pygame.transform.scale(pygame.image.load('images/traktorS.png'), + (dCon.CUBE_SIZE, dCon.CUBE_SIZE)), + Tractor.DIRECTION_WEST: pygame.transform.scale(pygame.image.load('images/traktorW.png'), + (dCon.CUBE_SIZE, dCon.CUBE_SIZE)), + Tractor.DIRECTION_EAST: pygame.transform.scale(pygame.image.load('images/traktor.png'), + (dCon.CUBE_SIZE, dCon.CUBE_SIZE)) + } + self.direction = Tractor.DIRECTION_EAST # początkowy kierunek wschód + self.current_tractor_image = self.tractor_images[self.direction] self.screen=screen self.slot=slot self.osprzet = osprzet + def draw_tractor(self): - self.screen.blit(self.tractor_image, (self.slot.x_axis*dCon.CUBE_SIZE,self.slot.y_axis*dCon.CUBE_SIZE)) + self.screen.blit(self.current_tractor_image, (self.slot.x_axis * dCon.CUBE_SIZE, self.slot.y_axis * dCon.CUBE_SIZE)) pygame.display.update() - def move_tractor(self, pole, direction): - next_slot = None - if direction == "right" and pole.is_valid_move((self.slot.x_axis + 1, self.slot.y_axis)): - next_slot = pole.get_neighbor(self.slot, 1, 0) - elif direction == "left" and pole.is_valid_move((self.slot.x_axis - 1, self.slot.y_axis)): - next_slot = pole.get_neighbor(self.slot, -1, 0) - elif direction == "down" and pole.is_valid_move((self.slot.x_axis, self.slot.y_axis + 1)): - next_slot = pole.get_neighbor(self.slot, 0, 1) - elif direction == "up" and pole.is_valid_move((self.slot.x_axis, self.slot.y_axis - 1)): - next_slot = pole.get_neighbor(self.slot, 0, -1) + def turn_left(self): + # zmiana kierunku w lewo + direction_map = { + Tractor.DIRECTION_EAST: Tractor.DIRECTION_NORTH, + Tractor.DIRECTION_NORTH: Tractor.DIRECTION_WEST, + Tractor.DIRECTION_WEST: Tractor.DIRECTION_SOUTH, + Tractor.DIRECTION_SOUTH: Tractor.DIRECTION_EAST + } + self.direction = direction_map[self.direction] + self.current_tractor_image = self.tractor_images[self.direction] - if next_slot: + def turn_right(self): + # zmiana kierunku w prawo + direction_map = { + Tractor.DIRECTION_EAST: Tractor.DIRECTION_SOUTH, + Tractor.DIRECTION_SOUTH: Tractor.DIRECTION_WEST, + Tractor.DIRECTION_WEST: Tractor.DIRECTION_NORTH, + Tractor.DIRECTION_NORTH: Tractor.DIRECTION_EAST + } + self.direction = direction_map[self.direction] + self.current_tractor_image = self.tractor_images[self.direction] + + def move_forward(self, pole): + next_slot_coordinates = None + if self.direction == Tractor.DIRECTION_EAST: + next_slot_coordinates = (self.slot.x_axis + 1, self.slot.y_axis) + self.current_tractor_image = self.tractor_images[self.direction] + elif self.direction == Tractor.DIRECTION_WEST: + next_slot_coordinates = (self.slot.x_axis - 1, self.slot.y_axis) + self.current_tractor_image = self.tractor_images[self.direction] + elif self.direction == Tractor.DIRECTION_SOUTH: + next_slot_coordinates = (self.slot.x_axis, self.slot.y_axis + 1) + self.current_tractor_image = self.tractor_images[self.direction] + elif self.direction == Tractor.DIRECTION_NORTH: + next_slot_coordinates = (self.slot.x_axis, self.slot.y_axis - 1) + self.current_tractor_image = self.tractor_images[self.direction] + + # sprawdzenie czy następny slot jest dobry + if next_slot_coordinates and pole.is_valid_move(next_slot_coordinates): + next_slot = pole.get_slot_from_cord(next_slot_coordinates) self.slot = next_slot self.draw_tractor() def random_move(self, pole): - directions = ["right", "left", "down", "up"] - direction = random.choice(directions) - self.move_tractor(pole, direction) + # losowanie skrętu + turn_direction = random.choice([self.turn_left, self.turn_right]) + turn_direction() + # wykonanie ruchu do przodu z uwzględnieniem aktualnej orientacji + self.move_forward(pole) #to tak zrobiłam już na później, może się przyda diff --git a/images/traktorN.png b/images/traktorN.png new file mode 100644 index 0000000000000000000000000000000000000000..940e09ac53cd5096bb3b02a02de387fd60362134 GIT binary patch literal 69012 zcmb@t}$!s*4nWeYD#$6)Yt$30Pn4`{09I4`ROY%02BS`aP2#H_jEw= z_@E>UsF|QWcsfC~kx`Wa0P2%*9?a36&aqsT^*sOp{K4lBQW_^d4FG^BeJd}c?Q3$J ziv}{9pC6g*^0Pep+t$hY0u@u<6^o~ol>0**S)5@g^N?W)+B?Ignc7m)cWyqI5ibT~ zX$B?#{z&S9?usMscb%+-JF{bS=dj{)41=ba{~P+dR(7WM`n3zVp<%{y zcQRZ2V4lL1R?=ZOLG9Cpy&jI?%P&e`hznH{YyF&PMt){B2@Cy*i6gGo8{7e%cF3SU z+4lBulIT`bB2aX%tF{BW53620g2!Y$^!6b+^owg`XUGy#M?O#8Cl10OR5^IVfqm94 z5%7me&>i>@)+z@KK3dKDX^pfuyw#y3Ot)cO=p)mV<|>S0kD&EMxLL`c*AHye)sSyu z(qdz~TMDmwKw3#yRUZXdS)r;)a5e7MP^J{m;jk&+=c!cmiqd-$;{|UKT!Si4#?6T%N?8#M8#4PeB)|IcP- z$X-U%=DdCk&)_u;9w4L0@v&}WE@5dsBe<=9j}twRB>kN`wg`DPhRWG$aG%G2lQ-ni zb8}FR;gj6Dij5%t2Yrolif02#NfK$^>>Hi0(p__#)(1*0VvZQ4IX?=Fp9rI_?!EDH zZ%;KJ_=0H7c)TCppT37jQE=BSmb-_b7ApRyORloFmk$RIPfx7J1K8*uo^||>@nJrc zsUV9YE2=8s%%l(zu#*NPCH3@8r6BVF5rOVs#CB=0{P*8Hz1`I-@b7j;=YPVX!1Ftm z+H0=}NX!e4U(Ir6nB~~vj{l5Y|4!-}2f^`L?X#j@MM!rc$tL~>-OBKlF0I+1^)NIX zdhq6hhx!0->ct!HZ@%Iq6)XiDI1Lro!z1|;i^WQ{hJKn@z}HU4*Kc4)KDB9>39rZh5pZV=q|m2!YjUhMPCX?u`qQApCO<<^s||~ z1{Qq7Fd=%AierY|eW67J2X;gh<%%U*^*_HM;0@MV>>7ij1gDn0>H2P6(; zdc268l)4#A@KBT5L0%nb4^F11xTs~=xA?a46on&h$0bPz zQJyUS9nytTorU7DjZJRg<{QHWXWW7x;D*V-LYeXoBLtmQ%U~;R=aRUusgtK+9f$(;vijK0jM%|mz|{b!gZ`2XcDq03C$nY+rh}kV_O~P-KcruPSl3jXJtof5TX z!DfdU`QYFq9bJY4sGGAOGY=xYmmj$UdO+sCRh&HeiDez-zejSJoCTl!KC#k6XZOFc z@qCVp=qiIj@R0P&ccfL0`e1(7;nXdYt@rB}F}sY=u3RSir?{|$t@IGkb9)xj1D!)j zPWU_)T#a#ugBjg#0G5Gsngs84YZ>t@QqXeefxIJppW=osPRc*&2XXL2Kh9a)ZL3td z9+rCV(!4_hujJW^u!ubuMhsYh$dUCw{5WiB-;M{|pDaTBF8iW~pYF%wL!PRi`2vIN zKzt@^*LKULXw5QXg_=;dnQ+3UvP1;$ZVqO_!8d)&rxJRDU?-Ve0435H0{VNc_5rGZ z%b4oGTM_tCHj3HnSr%?aHdkJnD&5+^iw7+=adn+rk_&aL9Gi>HWtVON+w+tw5$s8{ zH2_g8uEKK^G{C`((=;*hhE8vdK=z;w>&i}u)PB3r3)r!!kF|{ra8UE`TScVoFw=8n ztPZWbaM9mQW=)`n1HmIUl;3f;vh77y(P?Vh9G1FZBd-k5MXCiOaODo4jC^W_F*g*1 zdk=%{Arglm%oJ}4LfB*cU-=3Z#@zQoR^TDDI-^MK^3!p+^7NIAnA}+M^i22j8K%KR z&A;*DMl|n@xXC`?ms$0S^MaRbV3#|S?xY5eG4<)8%0y4naL01Ut@Q*gYn9Ok5Awcg zp2@Eg^4s1PG}h9ar}NEoCYt*_7f35UZQ#$HD1-K)L6MR?1U@6nZYZpfcrl$mj zJ{Jso$SM8?A9HSjL$KtpSr+Y$HQ$NsuyByZKkt5*YlzQ7cI%I(mGrwWP6l=}D4lGB za5Pzjun&^kHlE%%4)-ADZF4ASo%0*9R+!z;`ODI*Qn85Npg^G`>~0yzgj&havdyM?c!x5)=Va!i$&aP&5|vt#I)H;_Z_agi4~!bvGts>mPeGu8^MB zuOAV5Qhc+{iCinWOnE!R^&lQ+(d4ZX^U(!!S}f0bh5WnOpAREgx2xOca!3T!YZ2OV zlHx3zdF{3b=7CP89;yB<_Jt`6&k%P)asPmM?_MUhv-6XIV>dSiTV(T0=>1lIIn_z} z&Ts#S*>pJqDoOXsnt)krqmb=OruEO63WYIm^|=n^?yP6~iZ4aBXM5N5=i0w!j1FWR z8{x%wclei-{#2JgNhsqwwa@ak=-XtghENxZj;q)$6cHQLH6(bGjik0Rt}o7AX#FH~ zjUsrQmxKP6f-3>P^=ig)R=79IQa>kmO;SJGcRssudizQ^qZwt{bdQ&EZ?w7N%iyzl zRO5`kb1!E%cRnCk`H6@BV74)WxVtd~e~TFv1?PE>Vx0Bd4|cb%yymBKM~ud@j1WvG z4{y$OX6GkSn<|f}?kg9g@22DpcvD8K)v-;C>xlL=R^K(2nMl9Z;}ne@63d!Mh75RQ zHWb#|dBpVOwPs7*T2pWv=_vBEsEO*IroKj1-5ZXjsUdbttYt8(YbHXm*yY0~r|*)qWT= zM~ODp3t?FI#RM>PUiInb3!(2BpabvvNEqNQ6G!lyHfQ`p@w&~>;xqrN<6^Zg4d{^@ zOZt*%h)+=tz17vgoy}}=^2xgq^!pM5V+aa%?29AN#hIqE?P)gp*G35OjDo`*=Nn#d3KQ zrWdP!eDH0Ng)+z{y3_MYt(M5(f#jfP}UAiYDKk_a4 z-b5%4+0C5MIOqkX7oG-t%EN=mZH{##(|L%C^M^bnf%j%T4Rhg~pG<(|~_;7Q&80JD_UnHQe&A)sj zJoCd?X3RR&bzz2Ea;;2dGHzp4>4YBWx-yKEd*^igW!cWMg*PBv7g}S9VlG+Rk|>9T z;Y)njFKWZO&ZZU?3fX;V##w7Wj&xA_caNedLOSzv!~$lV(&WO4c~!yjIC`TS@&59V zM+|y<>iLsO@`M(+*RLAxu}c_aWR6lET!FV@RA}@VXvW>UG!}-~SQOt+MyyIhTyQmm zTb6?XPM+#?yuGPf>VG|Z49$9v>E zvth}L#0|5DFgwFd^boKKc;qn-PX&jDX#3YuiIQ6DREarBYto^hyF-5enqlXjkAB9{ zr16nkz(PZ4U8L^c2_!{X%%ep`5%M1MOO_Fd!a?A#O@g6#SG9lL7Dd=C#;!x`>0Q!u z8^gTp@za@1?Vd-Ice9W8WWCL@)^n8^=UdiW4cbdT5gSYzyZSdLb(tvcQ2Xw|dT4V9 zKu)@PyvVfc&AZ92raTkaCmKIV9w7q(ofp&OA|@a^NRUt3$QJxfk;tf-j9uI_OfUb` z%(QvEJ6?{5c*6pt=;MVdg(bd%bz2uz5hgnFP~N{XX!PXaCF+#)0KuD%ttj(hFCqN% z<)?(U3{a|fGtQfkM;E1GDA)C z{M$oPYm2`y$iuuRZV>x}&hkw0Tpt}{LYzdJ&jm5tlTi@3_9 zLH6zR28|s#!8dap2G>ENJ9~8(Gw6z-OXNZ3Q>ys%2ff**MUgQf*T^Qhr?kgbKQ&&! z`CEowW5~b2l`UbfftnkLM#@5`eoW8W2Q}S^HSN-4u&5g@>Mzy+qDl&WGszv*-VfW4 z84=3aCKH>(9~O}J=Jgn#tV@oMp*t9pPNFB}J-MR}3YdIehsQUsLxVjz@yF^ii$H)I zR*)n(le`|&Wr_Yf9}Q_;VI2b{c^yj*eB*M<5u;Bh8RR8FpKO+4Jz`L@91g1XuwgSWY35(Br*mI`8di+DISf zjeEiwtS2U;aL4t72Y1uPDl9M2B|$b3F-#5Mh_niAv)EP4>S?s!0Wb8kTL5(8h(#9Q zNPCYyR4oOi$_>aecn!BK6pz;@1Gf89Mz6T`_t$qrE5B1`(Kk(5L@*{UIu{g`?|;mluD??FLK=4VMX$h+rKS-v?_*yarMFhS0)s(k-OyLoXfn3eDS;!!L-CIV zCpnTS4{L4KRCq!F?S_eWg#26`C!N(z*&ZqMG06s5$mi|0SK-@Bzb!t-x3vh3N-Iql zn@E=dAMM+6uWA(@=!g~@yq3Df6+>?K4E(QQ%}v+Q*e~z)@%6AoYjOCaM+e{p1Ay*- z<^hS&c*~ugwt3QJCSCg2CDC93(TMc{Ti2BbLZAG_>IDVKuwf8Cg#n=__>Ffcoiq90uxQ`}MJo@GmZ4UAZ zy!5*};9bFQ-+7ifli7J?v}8EbqjDoQWr3&`mJ6^HR@OkOL>n6V|O_i**KM z?L9*uX+;mthhUHNFZ~))DLZcu`K8%1qM}Umw1kgH@2h#RK@U;&sJ%<92*6t{519o9 zrc)*u?~qG6-g?HT3fE zJL~zwZjHs>p3|N=N|E3fFH#h~Q$+Cj=~cJ?4O~J(!6$ygOJN0B*&KUed?3QUNrcCONo4u?QH5B%_*lcLc}<|xMZii5OeYpUy0 z*$~mn>8VtncSN}deKgT2R4w*gX&U_p9$Hkmk!2sJS>O0nxO+Ay)FLUOx$^MlK<$V)5n)=a%f zlIxot%{yNQ(eC!b)Q=Z|dCtrD>{rd3^6QVh7MlKGk(X+?tprwAwjPN7@M3m?=0km3 zH;1p9n`b_=Y7>d3h<*30)}jQlI#A{7yTK0ISzwF@41D|6CF^y?SMH_Q@BVsd=myQJ z3pg)Y({cgz8Uteb%^f+94`b+75xx@CFyb2wvtMQ@%#^M?q{fr=O&|6V;i7;U%Y}Gt#5-InA)D3@bG8PO;TzmX*EIxG53kNeQFa4O? zhY@s8Zqp(dTxb-(vU!%nf%t~_sf-Z&j*+4Mrq0Yp$1a@C1XhwZY%#t)dme2#FDdfmI@ z2M*+tk}`{4Z>%Yu6SgTfNZSRhKM>(ap$4-?8*7HQMB#Cm%P~gf(3YJbOH2foJMkzQDoZ2&%>a0>`&zsetS2R&!&tRp>EPz)~}Ib(VqGBLU!xmuJ3Z z{SZnwy6I3o-DW;uzI2`IdE=t1kzTul2bgEqc(M67kMg`a{gqGqB_{n5FoXK6lwW8q zJ(d|_D__jvf& z36>S=xs6SC}ne91}khTu-qjM z4N+G#!>ym&E%j!E&ZqDok4``kq#n$??T+cHhW|~pWcCM={gV4z?>Bv{$4hqQkJrm$ zWT6_x-yi>uc$J<8H9DF9c(vjdH@W(z|CATN9Vq40n z@h2A4aKQyvFWpO;xg+f?XG-tc$?qzZwmEp$WLx0)cNx?vtYPV~a-)L9at5oi5KcLh z;mXC`LA5o(Vm9xD;}+97cXQ4+BVS(s;-t~8(etVpKPnUfINc&#m-!CotN!hJSEEf} z4aW^FURQBq%up$Lf8QJw?UMs}Yl8;?|BF7mC|C>}(mUNES3`0{p-jH~zu8mL$+*PJx3(A(w@@ z6?_|a>J#mpLEB1%_|(_ui0VSyU*y3?D5zxcJK#k7NibaRfph8O1D)$5Pr7z|?arww zZqZN6%L?4R;XS-sv^b>4n@932U~Og-myosn=*|G22;$bcdJ8RP4 zZrHj|!}P!RB^RXb7Iy~S2%8MJ^U6xrhC zi`D(aQr&t(Tvx#%c9K+qc=qp+1KvblGDmPzi@nHrReu56B(l10BK=;mb`c^4rA0>{ z+X0|3dO3gB;QY_i7ZP`yz3`2oW>;T){f0H-qr)g%iLouVO$bngPL$tdiga_Dt#F|{ z-w?9>Xv|fhU?|Hml5he0OrxkqoqL=k&`y%;_kp0(DF|E4-Zf|+y)EF3t7B_3*nR~m z=Or%XHNA+99eWU;SM=daY3eQ0!%pUD z+31=BMH6WB9j9GVm0jHx1V7j0eiv2*=vpBh3uwLcY{Wuq8wE7KCp%pE8jaP(rY@-> z7sBw_s6#`A%)x<&i!22OgiR$+B@&dZ@0{fE^qDclPH&%BW-Qq&&^8&m^de9d4(t?a zN(+VPZgLoxI#oRqHnMRbye?*MiTt)LLbZxA02VR9k18$E2i3ej<*&jjUo+N*PlWME zm15ku8sNU@#G?ig`>f@UTb)bBy2iMFa#UXzp)g-(u&Vq+BZ%DmGXH)acu?KJ8FkMP zFvu1;zMwrt(HJ*Mwtl420C45x67p;i^R?RyMyqVFyoB31yGzjH2uo7OdcTv$vI9M@ z$0f>LVm+)a!H^y?-PY?i4)jq0R|Rw&yfMTw-wi0UFnh&qz=OT@tNMJF`hxJwD5*p# z8#g1c;E#?)G{XKz$%pGL%Z?9S>{eTZ!Eu^g_ER;=Ox40lGwvS9)ldex?1r)_jz#k( zjuzkvpTCyhpWnRbG?dmIkBGt<8)>0je?1!x0=K06r(!!sQwOr7c|~)^_73VQNrn%(S^x1O*6e7 zTMfdL$6dyLA4L#yULGh|9Zda>QJ)l;Qy-5uXHt`Zo+J*B;YpqS*_kn|!EkI8lJlNL z(U4ivF7eEE>Fj6W z<=;kseG^3qM}C6s4B)>Ir4a^nS?zk8Y3&RHntn`~{U=0w&k!96D9Y&K5BEq_VlD(? z$1rjr%wtv*s>a#Z8<)o|v->4-)dtt4_$;V1@1t)!jb5P@QwOO>Yv`91|ICKO2h#U& z=M4DhYqsE7NHA=%Pi7Nc+M~nVFMl3NUriRpjKqH+;$h^9wh?(u$CvK%#V8WWP!`oPDYD!~%Mq%7( z30Hago8x95-M;%_a>Qj!#=?CPbN4LfWjkJ6wkEl80L&yb8LODdnQA*J`e#1mv$vN> zl2By8#eLs$#mylBemGJ{l4Qx0lsvQAqF`2g-QX!|MOJUs0+NYvB4tW7ZbAA?$UHGf zzdO(mNxj27&#tf->-Td3d&+apXRy5%zE_iPnrZZyO#4mAr^?-^l;i-v2KzTcgP@@L zi_b^?82x>PxQk6#3-jj;GQ$70IR&p{_O5A8?{ui5(j)1{?RttI4543*LPcmzB&?lg?njNMh zmhD_}E*p?@ux8WvQ;6i3{)rK1DTa%%CNuoB3HM8djc~j-=xLD^gnO(YV1LCD>AqBT zQQ)~pUUiHfxVR_2k^~d9|EeRtMjyDZfBzLZnBe4Bo^)SKM)9Gkc9K?<3K%6GasJq% z!tnVVaLmE~2NScR1)&p<0ZWuIMlNlLs{0GKV6GTLZ$;aY(@b}S+zZW5 zfMl6u9;qEV5YGaJc(n7>sUDNURn+Ixu%jNVpRX7wha-erNt`_Jc7)5!O#sWKwbT1D zqFfzM0vZ+@Zjl{@wIG?*R%!(7T2aF4UtK}G;nX}Z`U6jZ~NE`_LXHlo=a5% zcrV;F1|NJVf&{RM)DQ?l_FAQ~haZ5UU*t8Q`M9=qB-;U%P~D+P=06qT7{JP$IQNqy zo~0&9Su&>Ue3yKVDELVtb2x41XhBa|^37(B1EiYZRqf;?@`~pchLTSwZk#niQJgIZ z5|4gN!aBGpQDD>i&$*XzU8Kw5s5OGmvNi*^HarhSd^aGiPy^!N!qzcPHd22}do7>( zKZm9|0E>zWxmzuh)ObvOL=@hj$1BKqlgFn;TSQG;h}M3@AOkF8mWKSuU{e_>5V2Pt z+P;s|nl;L~PhQG}h|nV^MPo4X8}iQiXDP^p~ zlyQmkz)g&UDqT?axz$J|(fhZM&fdE#NdFp!1s?<_Ub+*bpfqpCk9OLy;Bq5H2uME@ zeAFC*iIktib%ucRbl9%!K29Smj%kcE=YY94pVj?R51WVx1txZiXjXCnG=QnbC&Bbh zOtjzCRZ!x&rRH% z*Vt!AnhQnE-bTt;CqUk)%@gevbTK<}nQ@^~s{i&tYqr$4R0ik$x!_SGWvibZ z$#t%GbqDIH<3DVO46U?FBolek0P@kJ_=h#X6O7Vr+5#T(Ho!xr8?Bvkkoq!b$4frd zH=O*-)X^ka|2aS3lmt2apnRTt&mVF8TsNu}mm$Vw{VR^xN*j;5?7`MkAm*cVKqYc5 z_87EkYsKni#5`!RfM1VCz0n?wvPKjF@B-X+QM&_7$V7uX15CxS@1;wnM;Obon#gSv zTT}2r(*IA-;jNOgAd|fNVZbj+O|7?*#G8)!x;g+{MP?4IbpDdQW`R9;OZ1u@l^Lo4 zdb7@rD%9RrHaL^(zhT>*5bTic-^NNgcPl{mm9^&!B&I4OXCVK z0-AP8_UF@~xha)O`=Z-NKpEnjOV}GRS`7(aSx1s8J)?$ssP9YoTtW?dqzo}Gfpl3H z?TkPo$)W8PjFeq|2l@g|hN54d`)f(V@P|@=Ercqds|j%4GTu|%U_g}>UoAMfIi0tnQngbP*Yt*pXj|HJ#3t416k%ZlBd%@#j zfu=f&A!qkX{18hYtehs>aW(P_bhB)7=Szc9`Og+f(l7gW{h~(UBNqH)uUj{)Dh`P4 z<=Zb{S*;X9+IxzGo?ZIqn55eWCFbiae-!>5Vq3j9hgbHVkLb9(jqg=-@%#VgG*p1x z&aOlybRY8ryTn1Qd6Vz_0YR1-3@fht){msNYDGFRv zOPV_BHf>I?xoD1nUVHQ++;WX^f-2ihpN!s0?_6x7?k9Adp0Z+XLD6zucc6I$g|S5B zInm#89SpuMx>3Q&K>{&yf49bcs&c2d+&dam^Syw?%dV$=HQP#PKy`ZX$JW`d@s`9uKALA$X9M>V=9i$BOiqH zsWpJ?1O0OXVz-(P%h8TnbN_#j8}ds|qQijV7#Fa6yZ z-i+V9zlneNv>Oz*{!kN5tjX>9qOkp$LZXhYY`+;uVwl4OslmXiIbz$NzMd|Kl-a-X zNBYJ1pu9tJYt4+AMrWOBLUsiZI7P&@f6(&8R zU)~w8@Wo*SIc^vp_i)CgPtIIAgd-oRqC-u-gCe?W$N(R zi108f*lME2ijXFDtK{v{odi9^|BX1Qky2PR3J(UkY`^qP#kqdVp zfO%DplA`&Oacr(}X$er**{@I?oO)z=4Sbn|m8t~txaR{*A%KTCW`4c3(_hZU?G7s4 zbrLjnYyAZKs~QWHP*$(l>MS|XI5|e$VWPU#oS`Gwe8RL}QM6P&I5U8>^1Bm5bF2^S zJ22Tmshir{JwWjgw&C?btHMLlUlUwf@(d|I$I!6@T?k7Y?k3aM^qRj~pQea=Q9$9) z!$k~kz`Nr==q3gK_w_5ignqY5V&{*Od?2g92NBxo0}Mq4qF-@{`qmGR+HK#z=x{KB0ch8Ar{J_? z7@?v5oP|Uc+duFwHOb=vQjL%Zu^eTRBvJV=6{cbD$4fh^@p;g!CSf@}RWHC!F^!by zfzA_n8MEoXncV%V;+)PihEI)FhEnRd~r-$9Qjs;(>o8`Fa@->z<)HTvM) zJmb09#;B-I+) zPgf7bvBsF})fZ!q?)>1hB?zWTm^^10}i6Ro|*UN^N?e`k8;gP-2B?OGkL zIC}r83V7&CL$W%;ttVGi4O-O5c^z>7?Oe6o5`_BHPiZli`w`G^wCSsLgQALgVr$=w zDUP3+n$!kwiJ7ez*nnd#FYSJn2U;D!&~+U2r>4PJ7K*kzZFn8Pwr&qC6U7?AO?60F zJX+0(v2PE@`W^MWh~vxA_TKMmZWOmr!~+a6hR&0a0YX>t>Iz?HQK7j%ahm7rShfS7 z=%W?65d>vtMZTHUb@sy4;4PW2-`}6Uw~XHY_%FBC;M4hVa(7*N7$rmRtmk4I_j${d zE}rVZ1pMgw;V9eo;t+dGwqAi5nw(Au6mQ08zoplv@Ug;$tz5%$n4f9)BcU5=hXFg} zeF9Y6Rzrjk(Q4Eq)Bh4KJh`AZnk@kY zv<@(&i3(Z(IA#8l!<=5_jYHby<Tn$LUE+_-~EXmo@d5e0}9pUU@zxQ#3)KO*hh0j?G5Tt3NWCXYmOP@x`UK0lkn?=@)?k!t4g%7=lX6B^9+KB%Wy||%twLY3_cY(9aIjt2^g-%c!cJl11cC9I2a~~*e1soblT149 zj@L+qZ_U|IJP7z)&2UxoP2b1=9mOgiONx!;4zDzGJ7h1L-0{0cj==_fyB@aTdQMFS zG(;cufxrHm!e9Rw6dsfvsNh;b>?0AH;Q~BSKLr3@W4<^Mi%u&4^W9Te+ znAxDdD^(y*{U0*G3RM5u^#m4F?g9m^auE)pIHvWLK28A_rdab`SR^6E5v|p3gCUDG zY{t-i_xZ$H2o7(g(|N=nKpQNqXRcZov{@NzX)%DR$2xKJa39WH{qM97XR1;Cj4U>v z>R-PN&$E6GEjF?5O50t#ZI1mt$y9h{D%vu*e!pmNCp?|dFE0`6`bPsVoei;Joygx)QiEgCGc3eF4Xro_j+eGYz2P5-& zEHiwZ34yH0pVAuN@K0r}0dk@_AT}tU<_UH@hk{h>rlC8jDVB<=cYG}5bZD2f|ivq z(;Z9@u6vqutD>Jik~jrA3L~|a3DWlKH~23u^r?r$pLp*$S$&!|2zmaj)>AuHJt2_% zBlyq;O+8fKd`5lpSmDXQ%MR5U$PUdo&ElBC8E%&eu6t*z*eSR6entWEUJkaGYV=P+ zCwJT`wz?4qLU%Ap72A_^4YCVfD@}$O@p$@nH$GU9qbF4W6qdZ3V9S4=4{a%*M%IZB zO%E1uZskA#kGigUwoJ=okW}psim`u3{7-}amQvrV(9Dk~08FgrY?^gpqP_nS9oAYOddH?2*XUgeYkyoQBv7!Vd|mv^^BGR|edb9`3ye zrrv<56?4U5qjB0!R|Kxk&OMLKTn`}u9$!!Hbk9u2i#m-0iR3Y8eW#)yNLXKHeNh}8 zAda{T53F_Q>xdjU$rn<-N%><9>)O8h(>}~W4+v=fHL$+o=A)i1jN#eatr*!0?C$uS z&daW8buh0$!<_s%kpE+^u`XUoe(u88xbfo)YDZq#9PCR^gO2ZEHNIw4@ZE#?reH1Q z6C5(!(AVg`40zMJKjLoa4#9<4yb=NZ{8=k=HXyhB}RksW+B%oxdOj=0S}I zlVExo$pG}x%7qOAjlDiMK3{tO;6!RD!wogHdvGGsX$XsT8&0Qp;w?OsKm=Qf6dFSP z%n;2HlyoSsi-mMt9tCp@A0QF-BVAnFi)?sZy=z(4OGM4ASa&V}yvV4fNJIKdY3rbZ z0i~^Z;EO-(4uOS+aUIuCi}h+M0>()bK!&^w(yb;d>Udlcpp(y6QTMbg_>UP1ur5>X z5)4FJR=U|b6S;u^)m&iKAqYbjPtylESe!|ezIE8`YCsk2Wb-u3K`h3uBg`GilU_=0 z3E1v`&H9|SNd`rWVm3!n#HKu;NhNu!aKSiWZ~c13?NNyER1?}z>iGQ#zah01fHLan zL4`;5B!nHIE@#vd|A8$r!TN$!x0NN}^=qL*pS~Hu)vG$3XY@8-1HO=C}QqDO*gHKi5C6 zdp0`?2T58|NS-e;*bcN{?ldZ+U~IXKWP$yESswgpND{m?7Xg(GCuw8l9 zPKo&I8xLP3#nNL<=eYD$x@U=%#XR@CI&~I}jrL}uCv}=M+hQ(rEAdD*W56%FdbsWa zc^q@*UOe)BTz`A(eu&@k7)w^!ZsyQ!9}I?IMi1PvLM8$kd3h0ww2?H?J++YnGEWRd zIl~wrhI+c{l~mwd<37?9qZ};498fRmuu5Q~7sU7!rUnYg85D z@fUD+VJG=hz8YbW0N7F7TY2Mtm9Gj>2nq5kKIEXZIw((xuGS91Ut`}j$CbC-Km6OH zr&RDYl6ukzEianyUZl0QabFjrJ6D$)U8se@oBO7e#@O>6!5GhZxph3B#24s6!C-!3 zIv!29C+sO49M#0w(}9j`@jUYBJBZ-R{| zHeC$SbCGyabTTo2ch);-c=3K{6-MQXFWO%J=j`ZxF|!~{o;V!BsZRt*)tEUTh~CFu zByLhOR1sdh38v9uEDpxq3xA5n(95%E#aUjS z!n8q1UmfmZ>X!N)!KCc1g31h`pKVy3OA0QF*KfG*H0ywNf)-MWj5E*rO}QH&1yfuB znGzQh%lGKjcs1@Rt^tbYzdx$TpIK^TnwF4bxK4pfPzZeQ>|nlCn4JYMS^SCxaKtPf z$h2US^T(J9S$$P3RW0+6=FMm{euPF7VN&M17*6BcKjiny__0)!F}}Px7D$c+)%0&f zGMo|mA^sN|)1F6UDCO$OfNxz~6Zh2>T?``52*D$c{mT1{8G>xt!!Cp3nf!3-hiDIk zC4q!l>*QX*OCqPv?uaJYH~^|SMEdyiIF-j}kkT)u9bg$TBe5T5kh!x^?(1M&);r27 zW33tl)SCOnS8#3C*GpXFx0oC#HSu5m*~L<41Ji!cOR&7~V485V1mto~oD}1djhDAu z(DmLC`e?Jg0Mh_%kJ9;m>l?iDNKdV_4$Jn55T$UbXz;=8T1xxyw2iWLFVI9)XW}UH ztgtVr!S;B{D2q=lKkDE3D~i4C*hH-PMg|wdc0WOm$!NSx7*5>50;}%Kzg5j0ZsmXP zo6yyEz`|1Z*SwPc*Ii$VbFdp^vz{ZsF^$fni{36;w1n?1PJj+T0QYdVJtYZf)|3T3 z?5KQ*eg_(pwdFl8wP#3AaiAIgv&X=m+9Z-(_@lpMHhKTOkC7CpLGwkgs5>Q6Gd3@> z`(m3A!E$IhYcJ3;M+>4!T6$wR&}5~X8W&frO)a3KC0kO#b~Jh6Fvm10XN=uF*IAYC z@A*$t$Nqh(@c0HC-?(Bl#Rsj-fERY7a- zmv}_T#4aPcbk_5hjAI%rKx)K0dWpOGuczfENPNU^Y(2qw0(OIp)aklL%5W2 zoj{`@;6=Df1jTwZrk!c(_Z+14^(K5uNxtaQ4hujceVY29B8d2}K^GFfZ$jlI{bZGl zFXLDyGa#nkt0sQkg^slAppKjidlED3>RQt|C8MqRtmxmwlo%lNV1Z*&+{-UxeF);rpc5Ruzn&8p?*;Px^aRP5@-R zVmaIo_!!OD*xaIyfTNS&hV;=Wi60En@|0$u2)aj&-O2W#81NECypQo_a?n6^a#DB` zZLakMdr|zU(R;+k3Xp@sqUoT8Fr;7$`}TqLeddELGY49J!~gm+I%JSBP^1z5utgTa zLYDh9RCf>(vnWSj)YL2oh1_MQ5 z$&MUyZf+|UX|3PKjDNgU5rc}{ps^EHdAe1c;wZ$#CM6tZ>TnQd%3Y)@wPp<^A4OMj z(EV4H)WPDIljFO|4n0@L3<(Grc!U4U$~tQ^kH`XDwWhywJyjcWctD}A0iLbYn4|0r ziWW(00L>RuJR9Rl$v;1=fwa9tMK-gC+Jooj5Vm(bcYnK8_J^N5sW60`y-z`nwjZ~S zM^+0LnU-WYx{<*q5J16Td9#Fl2fuPS=vtCM$ysV2~2tVhaX;W*Hgjdn`8xg%uI|_bc9mT8zndrQwF{tOnA{@u~F?e=cXdSlktq>C8 z360OYLx=t@avQj^T}d&bp5iRXx^ABa0#NCY7Nho#jaUZhtuQm0q4>}su9_?y3nS1F zB%?|Sjc=$x8gN6beG=TIG!gs(pmPNzc0)kJp^x*m5Kz3xyC9PPw?oY`wUP#4i!4%NqbuePE*ztjrd?@v3F!pIafam-*qn<1yh0rm8+*@KN`k(1{6;?N zuW7RhKOQqlAM2hxTzRad;vp>xHq$LAV94ylTy)(MT8`tU zqN<6W=$AsePRmMG8G)DbhQS0`B(L{f80Vdd+!2)5HtXkwR+HfCOSYt?L78uYdORh< z&+G9M#=-%N53Xm1VEyaU{^Wo{eCaT*tS1^TXDgjvTE3hNGG;VJ4_0+BIU<3=H zEPyklu$oT2b4^+^FvXZdYCmtx;SDeGLfJ%i2+1U{PxH(DB%|Z(Q!vbkcQEn(j_svOG3K48{YAKe}C_@-Mbs-Jm=i!JZH2iAbu@fIK@Ki z)8abh4hS4+ger@n+)0wOBR5hFY%PBli$S;Ou0yh<2Y zt6+Kxf!7(g`?{e-J!?`RpC+Y&QT_{iV!ks^R)!t*CY zokN(e2?;EW5L*Ho{PZKu2s@UJ(V8Mvkzk0%z8DAQMJzY{ zg^^$-lk4*MA1XqZ7#ShAp$$BZ2-#vUsrWi5p$KW2nke9V`C-C+RT%Kfb*TW0v+u0h2IP@*SuZohiEw>obR z588O*#=9j%&i43O>^R?Q-f*Xly%9W)9ygk*HJOQwy98hkqLCH>;N2CPXly^|lZoew zNAE62oz)aApICt(ThyKkkM;PoVGw?b+KypzurY*4wdciQRe99R!9#8p2Xmyy1? zBNJ?(ZYk$|AI2Da`9>CoVRd}-2*M0{R1&%hKSZS#S>2`xDF`k|l60(H`R}?bhsBbB zL;&3V1_0@yxc+PJ3mHxEW)cac1{gQ;#uN6)Beg&SwL9~W4iN>EV(g;IC`pCTUO^qw z&(8u=o-t|ksFB!szh6}}CX}_fyh8Fflf04&y!RJgpsf6qg%3Y-YA@a*#W~k{)2i`3O1Z1VUQKL8S`riP!?E- zJGLY}^OX-ltE@q$Wo&E5VTs2S|61Niwf$Fg()ZjX#^H@KN&QX4;%)(d{E1*#t*J zfMV4+BUMod!F(|5{zk1U*(lF5(v#gA*9PVyxueUVxJ4q7HHGNci=P zRLGHZBtR7%0l(uO9bx%#+C2YGaj*`j4Tw;U4ZTtK5I+Usb1+HF1pIw3YGdpx5djt` zeZCcc_NkYTHEdsD)VlkT1{QwdI~2awK5BHnwwOlfK!aUkhF#Ps-cb(Jbo^b9;QBKlI<1sW`RneR+*D=T9yCG4FrLe4*_?z(*H{{Yt)NlFV z@mhRGKjx2bEXllgQ3#gYe}inEXH?lV!F}V!`4?=N4uBKns#E*u0wFm@q5~Q#DJn!f z1`krF{p@pMboDEi_w%~su+>?S_Y9~3#+`-)rp3xLBZ-Zmwl2`D5B&;^RN2?inL>Am}y z_rS7Z^_RoBJ8NJD+kKT3Ye{IMWDTKNOv2Q}KLFo}h8&3cCKA!9FZ4*-3NPly$bTO@ zYP5YNXI;QX7PM|2b~vCwP-0X8B+O(4a}KE!w^JmYl(g6hs?Z z_!2(5?LuI*8%gOq&Fz*&pXQ6}DbyV~Gt?{fVVeCK10vm8)kyZ!+9$+fXTVu7Zya4X<>Dbd;ij zfbSo9U-OoWH{C=BUxHii2KF`c)7(VlkJo6{mSf^o74d9Lmdf3EV}O9Xz%jUm6as$i z2BN)B%!_^KN)6!LH+X^c182SoBv8)nSbJlUETdp33=7JJ+*mA-)hQ>D91U@x;!^D^ z@M5pHD_bLX)j)80OvLBb55;$Hf4;1R$$g{neVBPYb45KD=Hpu4s=j&s!B`KAU}N3a_27xV z(9G~R8AXw#96;l(7Rr#v4|gT19vITW8bE~TLlv1!PIcx?t7^qq?JZ{c!CcikD@Am3 zI4Yg_(;>xe8d5e>jD~wgRrMAz00&fI$f{|Bi=4)Ghg%i8a=ojsV0M4~DO4gTxQV#Z zXfceUJvN4%|2zB%op%wfqZrTsDV7Sc40;|>Ezn5dDA6iWZq)eDW%78ITCR7u1KC+fo(kk*HPw0<*EYW4R@<& znF4-s1czG}`o`ds&<&Iaw?9Crc1fTd5h`E`b7%kUd9Gh1?pcvV&>D6jCBtki=+Wr* zB$!>NF zRl<|nttzj9-IlAzH;7$(Y(51?WRrWJCgNM(xk1RZ`Ww8JFlU*JrH?eitJqG7m>%WJ zWw7{t@uMkCK2@XIn}at0dxJkw9|dT(+5PV^|5H0D&e_Nn(HBFQOo0JbSO{S`1jf}j z9i(a~5|NgbG#&AUlF+-WoKDduo|b+?M5jnZ4l9ChkS7CSO#w2^Q*0r+PjdefT%S)6 zk{O5!tB?pea4K8O*=RS5+^*?oRYUi|)cz;2_u%`5Q-|S44EE3yVNX@O;um+OC0lfz z_`M8qy5ft3vgbu|lKu)VwyeBRkv=-!pAw%V=Ai<_unSGWi>;Ac9T+Eqhyy=m&9f74 zF92?0;I)}{rIC>Q01(ONSFU|RVwr3HEgn^Xz#0`{z#pUCqgc7c`lqdoMs5;T(Kgjg zkobBJ>EN>UT2d2x?pXfI#`;3s3MV#+7Cv2SbB5N<@*@Oz+J4Ewg~+6d7O@~G$YTEy z{A=*&V|CWo$(KsNnqt^WM^uF! z;`>SRZO2d9&F=AONAbNhqvvu^D(1HCiNv?Pg&!&+PCP_kEsK1Bx-(haodalizFp;S ztdvcpSNcR2@FXx12(bZ{OFX^1eW+{48#k&V_ZQfi!zupPto6(8#yO$lNJcJ?Qmrq7 zF;^>nGNZ4VEj>OC9V_RdLa+h3H7!JZ!K@GpdnSZ{kOhC^>k*z7Pfu;sth|B8Yvd8+ zoLFG6ijb8!*?fs`&m1GiEehWNIRsE;xxg&eVM&ev+th4nA2kf6LnK8SX+pCO{IQ@z zc?*x`op?$OK#%Tw|Baba#@KO6OF|l79++5Iil#%Ic-ae<7pt-t3hx~dNjume`*g#@u6&*sd+4mUgLYmKnG5-%B zw%tpL(7}o1mPvZ(H$r>>}vR8XMzKwCH06 z*pI_({5!Rg&t}5?yS;sY47#C?Fdy@-5zKD2rCKdHg+UY@SJLQ^~n2 z69eB3Pdc_Sn#76lj!mJ-1+6h-z_k|K=%~zaJ`m ztb4Ls>Igm`zxa$AO%3jgNXc*QO_i;BkD6A7);?yX@9{dH1`Ufq+sw1_Cf z+&H+4wp$xvHCV!ZXfRu|H}*sK{QJss>xk=#3=J*EtyX(Z@&)j?I80*WEa zy#M~?+n6`Ewq(*#G-F+2i?8G7}3i2o4%f)T@-#oWvI|4a$M$&S1Vby zTwgqS??0;SyR3l|LDFeMjE2isHG6XgP41XR9!u=)!Vf1i|jPoY} zF{YH-$HBL`qA$*vDz4+p^0Dsuan19?Zj`FyE6^5(z_!#EZRyOc-9nz%dH)<@>$y{kV`RPlo$EySs>EebE z*LLORf{}cddi*zzU>))Zr%@{#{&E`xIUhbhh-Ew4=RG!kZONWf)~q&i< z$bx3Vu~~M!zpuudadcItp!-l)nYV-0YRQTAb4tv74$w0vU2mk7w-746-7BGmwNJ*S z4DzPxJOErt!4h!9hjIcwv;kJ86LVPT71?Jp?2tP5lG(4vZ12zJdjTGCbD!Z!1)bHyeeIzyV0X&I3#o@B<=X=%#>&<+7EiJ?BM5tE>2u1k1=*Shn(urLc<= zpy#CW+4~`$(cb81oAnM6u!fFL$zO@9Oe$8Xp_VP4|GHq-atIo!7VKK69R*s5RN??Y znvyt>2n3(ics{0j5HZJgB<2vfN9%@;mG(*ycu~8>3L7plBgIg=KjfRqDH-xs!wQdu zHVB8zpew#0=9#mcVTwK1cO&-6OhVFT- zA*4X5{g>SG93x^!q@LwB@Ji*ZZ7~3iLNcAl4=?)lSaY=!WuO**#KZzO36DeH0x{hy zYyfJ4$7x+w1F~uC{-U8q{udLw`MT7|!JvdL3NuP<^ZS9Ml?&kv8A10J;FZZ|;6dsGWzeo6nUOwsiZBre3QGJpOh4x0#9RB+-&PC{;qk zo)CE$AF)XXR;vpBtSvq9Gg_Oxkk*{oQ z0aL90kalqQqu*FbT#p22hpP%W@uc^nbULrgjpyPASy@$-7Z-H1Wa`-KkgEuST}H$N zJu@pvy1#G#05fbqP_B1yVtEico{RfFQH!1I{Y&z`76_d@&!nkk)PO5w*=bQi^7Im) zkN>nkKEMABw4s*8pluW6jBwVt4BjhLCKby3yD%j{R2fA-UySW(4QGxSGmUwSfuS) zo+cHuw`poffD@-T>cn4=;URw~%0G_%K_X4@_S*#E*wR5j2Y-70c=} z)T4Ue3+)og!hveS{npf5)h&k8-&b1yVlu;AoLmmVa55?%`&~hvgcTOfe)R%9!n%nG zwmoI~U0klE4ZGZ|lY_k`n{)UNRHP2WlA!cj5GT4e4uxFUYv4g3;mtHY3yYl zLO#7nz0LhNX@ZmT=hI;Sz%CRne!O+p9s<@6psBawp0U7=zyL{z*su1VuCYbqm^65Z zSs)t9Zf^Z%`vR`Dv?>Y;#Fak$FvrKGU${71+JlFzDcG<+Hy;3D@TV88w?9+}!XA#J z%0sged%LQ?uzn~1Nnl9;Oj2vViA$~kHay2$&?Vun_D-Sitm0;u3)lrg{8!#eLXh8! z0x|4gs4w4p>2T$PAS%)obR!QT++4&9cb0N1UrOe55E(rVIw zERc+o%oDyW@<>ELX-Zxxzq#LHu^aTom!JR~*G2G^OS`VU;A*)h$>MZYfS z*Kw!0?RzY7aeInyA+Y(rUjKD}B9)A~h2|^Ge`vr({j}mYjuC|k1PC#O6f^griw;Nl ze>6d@A=vwj&}CW7VwQ~=s^$xOg+e7K(MOPMEa z08zcr8;gCUBk)5Bf^8_7SH4dR4VqNse?K7t$Tuek^h2ApX|oTVo)^x2KXs)|GQd^s zq=a7LkvANyP(yzJBd$aa!3x#E(bpb$kRa9c-$&uUszj7*sWIl*=tFO$x35dTmVlUi z0XB^^aP>mYmwZ-WCB8OFN1GZ7Km>r!5rqT68vOVfRiZc}39io;24C$s8VbzWzvyww zBI@XsOgqSU2Ec_-$-T|`9z^&s?k|Bsuowz`r#~4$SKS@q=LukiUxs=uR_*n#k0-a? zWm>{TQ{7a9@bO->6ats{g%d&s51j#js)R(hJn$vfP=h|31CmdJQEBS%K9q<8eZ*zby*jrECs35wF94I&tiJkDwp}*Xzv{dilBN5&_-sA+HTQXMaW4 zrvlHu4Y1BbpS6jBxmob5jg200M8Ftkme$iNB--@<9P7i|cmh?^woaLG>`L7i<;oW^;X_K8WhN2Er-oPO*a*TL zU*B|m>-diIBiQ4GDP{Z$O(Rzw1)u~;whl+6L5#CxtY!Fb{7n3Byb}P0awNuFZjBI4 zD^>Uzt@TXfS$4FNgHApt$CIK;DA;xfznXsq9|Yl5EX+T7FOkYIoEFe2u>hX@F7z^i z|8!KN#X0TqDhbEvE8i!;;D3<&Wq@}o=(vzsgM#nUC!D4fPl7A;WT+A!{~rvKeevg2@1M_I zfXXQaNQ8TEZO=DFbCv8z_(4>A701OBA>AP&CD+c(vSav?+%%+ui&Mt@gQ5W>FT@`^ zU5WmG*WGFE6j0R5maG?J;>JT3S@tgXP)PX!rkSOLdlp3>A*Kkq!e>Y!SMYU{;_{-V zxoZqH(H8+99eDop+f4ZE*nYKFpKqN3J5_6x^Gy6PP+7=~3mH8*RKFr~eve4w{k8zD zg9^ioIu#SXFlg{a!|@_vA-;3X0Ii)i{5fmwHr?nW^(Np$J|G7G5*i2w7b-}4#lYEAR z*hgb5AK6{ahg~VJ#vZ?ozxFPZK5S#xFrWgcSx0e>7GX<_M0*ZDY!Joewcw{3 zZ|Zn$kRoC5M}5=Pdf&JovD#W%i_TL4sA9Tvd5XDK_g7@DT_J>z}Zc(+4iFn=|KrKR}VX25jyIK zx5KTxan%a+(%HNmY9p?(DiN+wNve*=^iKSx} zDT3H~OnsYJdg~o4Y${@x*~Gy0di3Jtn17e5i?VESHa$k(Rj4x1n||+K=(_3WaXJ)> z4NELvR?;M?fWs=+rcg1L?o~ao=T;EC_cR?&1F)eh@IQS^38Yhki^ul%r^_XA(Wh>O zk;59a&_fDm-k2t_{fMqY+IcgtgiS?zvv+}()<8W0hlECOZQuAHe9~-96E8>L< zRx--fb6$N%DY8%%YAO0yN`+I>BOttxRivMwj?u|SWbW_VMPKrsR9y1tJFt# zy9~#V$0N3mVpGQzOK5-?+N@@MXZrX2hDMbJroTTI9qQkB)n!0U$k@899-KOUv7mA| zIBgFV%8omIL!p>X!g;(E(AI)r1pP8b)FK1y&jEDd9(+s;ep3~CPmz#5vFP26VvdTO zvn=g%_w&@fi-5-AOYE3n1xM0PJr|0(ZA`Dfr;^qT>c+5!iylk)BB8gz=k{=_5*&&{ zefs0NJ>x1FU)sBIHIQGTjJ8%UPDdg}Ty3R**Qm5Wmb&zfBOj)Dj(`ka@CE$6B3p<9 zA+BruMP_X9A|z^r9K4fju&SmDPuUPN0smZ9EIv#51QqCO&Y?2iUt4%v^)HkZTDiUt zRr}N%K!dg$LI^~2UxjCa+uizeU~Gc-2h{QLUPii%ZuRzPq-hWP9_ilXhFcXDG{O7o z!DGojNW-Dpv8FMhX$G#~Ps&Twj*hd(_1pVWjdx3F{2hFCxwt6{va1t}(SnXhlzt`Q(N#K5J~TO3Y&4((KBb zy#GgfQ?*WrpU`ebSO0Lk=4sUo2@Ie+gwiql;+o-#I>C1V$$YQ}Pw%K&%3voEXa zgL9&GgsRey>tm%7m@x2!Fo!zgHIIXrIN3~vu&mj;)7B4ZI8OrS$vs9n3R7A3%%0;p z{GZf%5-}zoeGWGt9yU}Oo}KolN+4MO*bGvU&wLB8AR)H=zFCh%`B` zuP0dkRv*+wJ$c{8x+OV~eO(c{R`#zgr}Zpu+n=#)?H0n@aN_wG7EK{#hI)~WH(K%! z49RW2uJNZB$cYTO9$C9UVtNweK)5#tyn~H8K8EhksDZDzU2|V+?ZxB{W z_t_W+S>k98+H!etum!%}bgxIzP7fIBQ_L*@(xXKKBeH0C2;W?uAa&44NWAJyK|sNh zDx^BL)6whz=`jnyxOtN-ifY@lY5%4bzMra9W=0{@UNNDqFK;=g;3%W|UfsJMqS|=7du?+X;u2xmen|s;4JM*TyF~c#6ONpTXttaJeEo#Huf}JL>e%p> z2!sCHaO>y&&mTop zuV7+H^6u={-&)tt@$^w~%y{ds5Efjo{&Xv)8c57MaDo z;u<>Hxg9-{Tn^a=wP#qA-ALX6@#c}?5`swYEV{?2C3=B}a!GA^Bu802juknZ)K3zF z;)TMcsZ9Z=)x5()V$%Iqg3XBGHz;fOCm=I;Pvq(xae&mOCP# zmut($#BJ!*#D(f4Pb88VkJ|uXZ;sihjxes;RZ>A54uOM}Pz61-5H{2_L)u#rg4>B* z(I}B*2k55k?MTR6_tdzgb{8Hi;F$bBG))jyXaQ+DBIYdthKr!!VbaQUp!=n)4*n;4x$5a@W~}5pIPI+fJ4gKb_<8?c`HuY*ey3?@^1I;)nRfUkFd?m1 z99%4Av8~0o0J2AE1j~wO7`Ee;g%?3ik%VG*6v7O_aJjd2q=A7;O%_uvGE_LEWq7&5 z#}YkjjwAlQGl<8}S2S>*+8?<$W>{wWX&;>TeoyLDSU~nHjQ2d^8DP?l=`}@W$0AGz zni5nMDpfS(NDu6jE>8)=0G*10&&+wRv;Om6R>xm|13RQBV|sV`5JM;DB>fo)Bfif7 zPUX(<_*uE=?Bq^jm4+{cQ92H^_pL^X>ue0M0JM|wbO6adV~R$c1bIe%vZC>6Bc1S1 zG6~Jp!Zy@w;Boi=q63<*9C6%VZw9+e-mXO#qs^5w-PIM?63q+0gf#2tH)hFXp}$N% zcL+4{Mtl7HsX6rX%l*Ba2texog$HlUqg+E!^BQ^J!~`zu!Cb&9`*vg6op-9DlArET z%J(Jtsvw{B=~9aY{)9PT->LBP!LY&$!KNc`@!7>F_zHeUc7t-2>_g~(mk|}O?|grC zGM%$PSFoRx^816-w1sE0wWYP7KZhrN*+N^CX=wIZ33Zb{s-+4%pq;?t5S93Td}GgP zlin{$rGK9F^%5$Z33A^izg8*cqHrQw-4yR{-_I#$(9ASXUTf|qR9*Vz891pUE``%h zMwY3DC7vuag53z}>MoJ~Nq(Z)vA=X(S4-~%X8MDV;o>Cn2ELtrU*Wo5)HDyFq9t)M zg{Le3ItyKnvTy%Ru;>4~x>^d`B_jto^8vDc6yk>CZFazkXM~**Fd>%SVn@nwuI_n! zJIjCg`zc$tdPzadoUuJN&rEa9S02eO8Fe)(r<|V&kM~yVgXo=AetS%Z6Y%|u?O*sZ zml-FcAMKXBsQMC$zoSQyun7v5V@4+teLTDyjX6%|w_48{pFbj={vE&6WzsEswccT%x{!>GI9P)k?V5afnPNr%t9%KpC!YcNKihCDgTqdWmx)i|ZuH}H)9a4VY@hN8I1EGIC(lfynIVyHR7KQjL zq<}E2l*;vAu3-K^sE12O!tYr}l|CByxpZzbykA|rO%PW>Dtu;}T`Fx4WiK zq?&o|R&T+eGWPu#M{|SLU*2Uku*%3mpy z1shcTb~7jG8e4A~Y1CSBY#Iu`p95N|lK(q|NKeoI!afS2pHaCK4g<8ezhYuydgp(; zS-|kL9t-~GxZdRc*#;Y@Z*!k&YA?2#>s?aj$CaWEw4JOU-lk%WA{6ltZd`z+uZSJ? z4R;S>l#q$5+sBO^RQ_`bYjw3c;nU!%`l7Q$YtUlV*w4iKmE zAGQ^BxqnEWwchP6tP4;O&WYVG2H8KFRn3j3@;L}x9D^Sx$En*d9aQV&)_CREGF@+O z^32`X#I-vpabW!-Z&Gu*{O#~gx~%xPOUw`ILJzcO=Kz&hI|PHgSV_P z=SLP3^{lz1FB2&?r4~>9k(uUkF5JXF_zn7yd0In+$A|T}jk@$G^PB(rouvVbq8UXe ztoE+%>$$%`Wp3`q&FAHjjP6(p^leynbyLOH(z>7Th1NGvcE1em6*2MH4H`NXA*we|qWJ z%M(o@@M^FAb(A78PbdR zN?ZyfVise=<1zct^U~UMvqm9g6&duGPRY+R{*G#YNh*AwaqjKK%)3YD@zp0z&}fFvU-zrxeztRj154Y~s6l z;OBij?ZntRf)8opEBtES?CZ7%_4qqyzZ)Syy!WvaW9z768_d1xxj(T1o=bGIgcKzH zij{!LNz4T1iwf|$RD(BEX;32vS>^EKAi zem!HL_VapJem>idmtFXMt7S7Nd7YIYy`Qj2@9at7^_KB)Q@G>pd0wcLN#wamXh&JU z@)DjC^>FwH@5i&9(y&CceQ+23|f<7*0;%rbcA)I&$YV+WB82_7;rXUJu zuIdh{ohk!kU-?3G!32*nA4_Q(4IJDZ$&oXNRIw&=I3ImAM^%s?O0TAvbsH?`6T-SS zW_}j5eD0)mS{%7;%OB za~USW5jXoesTO1#phXJPvgV=t&Io6=W##0gGx(ifPJM_KzZnZyjf@iw2ZqfQS2<#~ zvEC_kC==tt@wCzQB6Rr}S}rQA?x?bYigT7-pvgi|LO7it=*NN;mHBv#{zbDk+OH{$+I#(&{)&VfTgc)7jclfbJmmJa zNMD@Y*X&MY-cY|-1UT#nXkZ+GkxkSvD+?O`^s&^v*WT89<&(+rob^vWMzM5$@kY98 zg%X_MeO=+7IEVokY#Rr%cSnbbWnlES#Rb6cKD-}^*jZJDgZ{w<5RjG@zBLk|?|QQ2 zgz2y~Muq}Exio@6sX!h^vS_M0yZ-O%M*h2bh~l83VW((zz%UoFnN+@A*dC>`2cZgN;kyomo$DX(KR4RJCjM6h!e?=t7yg^#|m1 zmm_tz!@6zFN}jKnZmy(&h@}od!|rE@XP4MmA)MrQXZkOSPQY z8t0MtvxXB^VZM&5PCo!J9;Y5F8XtYq#)J z-|vElym!d7uA-AeaU7Az0YAL{y5YcK`7j272W_2`#)e(Gt6kqC14!q4!KN{x1jF^x z(1$F9ZAdr#@f$z>gvQN0UesZGgi`gTP1Z;{m&rqpG%UvZ>dbXi_;S5|d3SZzKk>+H zJj^%q+Ej+_$Vs4-zu<;GenxjJEz)k>>f69z5R<2ErJCE3hQd0-w|qr5;UJLzv-U-I zP5mTdtf9P)5tvF@(1Z({bSw&98iYJ3t@Y`PO1#rgA@+X~7Rk{}gx2~4$uIs!ytRi2h!edp0E-LpkeOBT*dzuGD;N@>Ga2=3#*P>wz$lgkImT|!eG z8k6@c4D2ph=|u^7rMZ&~^Cqy6?` zkPTF^e0Kkcf<#?+t&Ouhvdceszk$|9VD%JDAtr-`fYWq&pd_#SOG3xM6G!xHL;0e) zz#&`sxHWA=$P(j_--B^;%c4YI)TMQ9gv06cZ_;A_vnNVmcQ+Ty-dt;(2q<>o(Hx^; zMuG8Tx)1Thp{J1?^54IN(LDnH+B|6AIydrCGg-a?VMqO9T$76fMUCh4%5kkIejPi% za0dHKzz)5Mv&(JrF=4D8gX2>5?cXFLFO#EAs6301-(mx-T;O_fl2|EKPggYQxZyH2 zk0tZkI7zZbf*}}V^E5BbOy2%cMHIt&LLGH%b2d{MSJYWl^l7Nf4OYQkK%MT+g83wI z27M4C&Hnz~1*57^@`Tn-rBL&vB!E|WFjoZ`x%fTJ0EE2K`(sXdW(B=X_fCo)TNYw3 zRzdYyaE?aMaVg73Xu7q3$edK^?z#o?|CKHxhU4y}+$_ z?nzL@ea*XL{DTSJw7(i4>@Xx*vk4%qnj^G}^* zX=3tMSN2LqPT~VWv`r_)lhy;AuM$i`Fu?HqS^tZzmk20iY^XscIOEv$EsEcopxFtR zcXGK&h9gT@-EvgV;S_7yAoyq$oCdxLSl^=l{rseA=-HpAY2hbUS95gA)G5zK?Q1il zFE-LzoiCQD%|n=XR*k__f%ctYK~WlplSTb};MKG)*_`;~e{Cd9V&F!0DDK0!Sw$Mg zqs?U8HB)lHP%+_MO z8az(FER^ng3-3tE-PN^8J6u$ic`zf-mRWC0@bTnTql?>`X%;BX zv9Q>1(sgt9qdi3scI>fHWX>Bd$Z__x zcT!T%&Ru?TLaq)*-1DL!YyYy>HsY!fcM=!aX<3gnlqo0wrqaSY9?^*c^NAJ8P9-o5 zQ=Sj@D6{J*(;XmHc;`Uzf&;nHVL3H+FnAT!-!sGmYPXD{x5qXi{k3VCRaz5am?JfN z!Vn=GU4|MaSsgqCewbFKtE*ZFJOK0nV$`mi{J@GAbu0E8q; zi2#Zsm~BwT-}|o>U}FK_s7>mCrq_>`TR3vz45&#~(W7frETS>Y%xqY6EZHf=|Vot9`uP#_G#=2(5^Tb8r9ZFt*@P1;MUf2I% zEf_L(ienV@qofz4iJta~iG+&p6yUQr>NzodZSYaN?Zk^r6h!J>(>kCS@Cid;e@fUB z#AX+c?1JcaFPfx&TyBupm`Q_nDWwrH)lE`wbBsD=R=x9MdBWSqDwG-iqRd2!Kdj(| zNfxak_%!+_CuLjE!Jk`>ve`3BT2&ytyya5F=VCW?w;q1n`SpEiDShWUr=XgaTy&vJ zw<;XDE@S=5j~a@6*C^?urhwE=#JjO7c`B*)hCMr&z&=xj8EY;bHg^=^4v>lL{9xtPoxqKe9O3Afj?>1^oMXpAahyd zV{og0FW1^eWbb?8$awKlRVXf*)V7f~+0y-j?M{THBeeOb1@1r(1;{2UaJ~ENJ^S^j zv_yyA#{!YWkzH>ufkzu^Z*s~}l?lrVWks7k@+Vb<0*}BeNf#ZjX4NYsm$Y@d?fv~n zPFD>Y*Lq!d#?Vm}T*W2v$l#2NqL7c%pTnE>j*`e)l2d)&Rq;6)-`|;t8p%4nkIm5s6NjwgcL0P~MAEL6Y&$E^y_lUu znMj6{kh)O*kd>oN(xM*8ljyrdGLbm!5B5CDIXwSiRxOxR71Ee~N=j>oi#1AWe4CQ$ z|CqKGGG;EC#qU_geLx9p#dKveLWZXhMO(g7CM(aJ-hNHjk{Fk+DI5j178%t$5MsiZ zmhOt9mV))D5vF>{=9pH5rZ2120izPLF(EcLE59kY0o#c52Sb@E*_b2ZpRpr12u?={ z=esQ5=AwPK$))+UI1tiuw>~UFM(Pn(b$9L_iF^9P-HYuP14*2_KD-dfT)ib#zK%`; zACPhp0_FS~!OfPmth-_;e|Y!%fCX(^O+#M}mg!Au0J{B5$b`$>k2l>%dQ%d6s14M` z`+@+Et>U~E&*)_xf4>3jb^M_|?iYM~h0!Mx?|K)uso__d$p|ace=bG?$N~izqsWs7nq1Mcz=8iU~*iMywa_+Hx!5G z$4qAbwL&nYTwf9e*(*Bm^&T|yFLrQ9Bn$Z)jbZ=*~7HVjww+9Yr;rp zK}p}*{qaT}>Sk@?HSy-*ZSHc32LQS{wR=nTiO-k04GRn?66A>4BLf&?v)o(bU7n92 zeui3O4s-m7<9ufCkb_JHRw*8LoTaS}0=kMEj~#v{r1lJ&0IW7H_Xtn!8TsRsLG4M= zz}USl5`Q)c?6^S{Z8$l$-BvvBPmCQ+C%`IZGQ|03vU|s)DN0Ranldc>Txb;l

%8;A3S3cI=E{SyWH!--p%6t|vh7|WWNb_n+CeN0rDpLQlgcZN5 z5<}R7u;}*{Ha-{)O~_uu?CjoM=&;3XXS@Ke1`IyO6x#o0w%g%MZ#@TTSOeC9H_J_nL1uw$(_TI0t75W9NGbNCrmb9?sMS3lG{&Os!z& z_`<<+A!^hr(F`@uwRO-N<^rbo%+eg@L?p3@xju7)dpJiB?IJKY^mgZaG_jsB;pA#! zX)Flg#{TqiX>$Ex32oE32TF&k9F?3-1gga5-Gd=}+24i;hqkTyuc6A?pDTVJqg)r4 zvMAiEQb@M9oFeSa*1#D~iB&h2Oirn(&QYM-r%Ws5aX#K^)BIdkIEe&%(n;L?-?5mm z-_C{^!FX9fc>7q6R%BG1kP}1jR@8y>e?8X&i zMkR(!*Ef$_*+v?pBk9_ik6wnqSe|??vqK1Was9@iDVWLAaF83)fLsUJ#Y-( z6D7`PBPlepX2spp2CW|XkhZ;veI*t6v5fCiKlmWE!h@+uhzNl>+#*=hO6^mD(eW``mM zrv7?z6lDre7ZNJOX5_89;yWNOj;TQbeXGTb$@3jS1?v)H(b1-VJPLa~kk&dFZ`al9 z(~W(PX+Fm{rv*;suR$`RRr7vHB9=Wpq}>j&mhJO=2>uxiUAq8Z*#!#8_UJq05uvZQ zu^pH*DvWb`j^+k?I(ajl?iip#(zPie0vhjt@K-`$>0|S_R7BH8$ATXKBIl@DgagB& zb$L}4b&_>Tw^9>;m?}=rPdf6jeof2SmQ|_VDVtaIh(J01mQfE6DH85~g{|#UR zUq@~veBa8jKqSAzKJZD6oZgod`5Xmdw0ON%md|E&Z24Q0$G*SpylClb$v9xFyfP%y z0bwagBWK`6MUxQjPnB~yP)r1^PY`Jkd&XMcgiP>>lEr5iSPK!meEvARgB|NXevu)M zz0@=46ytMqg%clkf*$1wpEyC9$ji{hh=JEbTl}Xyj)j7tdt7K=3hZ5X$mF!oduDoi zMcU>07)cKEyK@|9A!Fd~zS#O9obCG~4|(Eg7mHjtDSxtx$nllO_H%eN#UuOJZiDN~ ze%tZproRerz#VVvx z&9jxO&Etf|^GS%_T{%fs&Sdd;(b}thl3mpWnp&lOT*#EKTV`HHzJF<)B`EH+OL7sW z^=!0G%Q4z^Z2=X|F>sbjD~?ypcwG{usiJUG#W$%Ea>ahP*g`S0vhyAHYd&DiK>z7 z2?S$L-7=q7e#9B)s^!G&aoMV60ku=dVsAB?qC*ZjqH$E}18i_xVxiEgg&#My2mK5hw zFn^#ZYAuN!y)Rm*U@!Gmj3nDb>aZ0Uhz9tp$T4O9j z3e&#y{DTlmk&i90WNwe^UuViB%zG&LJekLCy*z=|9u{3IB;tO~k(W0A)y?C_B6`!p z$he?13(LRCb(V`&zG`bb%u76$ow446nqj+-VBSzN=S|l@V0GL88BCW5=X&ZLi79JU z$Xj)8pd;eTT<76tdxcf3{6S-NxnuFhwP{FL%C+xo0&Gm6*-PkLO0pm9SIn(%SZUXT z(7H%!b6^3w95-qJdGYIZy1@pzmypa7M;R{SmR>Fd0u|cL@G9yyEPVm&Ph*k^I)PgK zZ}f0uoMF-tpc#$8pLkc(wexmIxxQKXWa%F2D#ner#U@Z%_eGUhdeIO>j&`=L={^^d z_1tK`DnFJ|l{2vVofzXA#_HHT=)wJ_-QB0|NhKsaJ>BjQ7Ff+ENp)zZ9v^wFVvM4c-g_Rd5pt;c6dkD zhrC%bv$8RaRcrkak8c`ft%BQtX@0+L+nY95-IU0@L1DD4W-OfUC`C!UmRzb64xoEA z`TG{PVZssB;pZ^rK9J<^Q z``XZX^*9ysjU5PRid+Au5I`S(N!3|v-#R{S>QYMqR)1Tkf3_V_-~`wLlb*IdFn-XP zy3F

U{D--`}$=AN8Gf(!v97b&4LDM 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 literal 0 HcmV?d00001 diff --git a/images/traktorS.png b/images/traktorS.png new file mode 100644 index 0000000000000000000000000000000000000000..0020c3d1b19ea3b6447e8c55beac80197567cdc9 GIT binary patch literal 71630 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≶ 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 literal 0 HcmV?d00001 -- 2.20.1 From 18d2fdbb49ecfe7b42951e09a1c2db79c60e01ee Mon Sep 17 00:00:00 2001 From: jakzar Date: Fri, 12 Apr 2024 09:12:38 +0200 Subject: [PATCH 02/15] -Fixed direction changes --- Tractor.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tractor.py b/Tractor.py index adf265a..84710b9 100644 --- a/Tractor.py +++ b/Tractor.py @@ -1,3 +1,4 @@ +import time import pygame import random import displayControler as dCon @@ -41,6 +42,7 @@ class Tractor: } self.direction = direction_map[self.direction] self.current_tractor_image = self.tractor_images[self.direction] + self.draw_tractor() def turn_right(self): # zmiana kierunku w prawo @@ -52,6 +54,7 @@ class Tractor: } self.direction = direction_map[self.direction] self.current_tractor_image = self.tractor_images[self.direction] + self.draw_tractor() def move_forward(self, pole): next_slot_coordinates = None @@ -71,6 +74,7 @@ class Tractor: # sprawdzenie czy następny slot jest dobry if next_slot_coordinates and pole.is_valid_move(next_slot_coordinates): next_slot = pole.get_slot_from_cord(next_slot_coordinates) + self.slot.redraw_image() self.slot = next_slot self.draw_tractor() @@ -78,6 +82,7 @@ class Tractor: # losowanie skrętu turn_direction = random.choice([self.turn_left, self.turn_right]) turn_direction() + time.sleep(0.5) # wykonanie ruchu do przodu z uwzględnieniem aktualnej orientacji self.move_forward(pole) -- 2.20.1 From ce698aa14adc2fb3bba33f4f4f06af495478ab62 Mon Sep 17 00:00:00 2001 From: Mateusz Czajka Date: Fri, 12 Apr 2024 22:11:30 +0200 Subject: [PATCH 03/15] Made BFS algorithm. --- Node.py | 8 +++++ Tractor.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 Node.py diff --git a/Node.py b/Node.py new file mode 100644 index 0000000..cc88608 --- /dev/null +++ b/Node.py @@ -0,0 +1,8 @@ +class Node: + state = None #[{stan}] + parent = None #[Node] + action = None #[Forward/Right/Left] + + def __init__(self, state): + self.state = state + diff --git a/Tractor.py b/Tractor.py index 84710b9..b4f9598 100644 --- a/Tractor.py +++ b/Tractor.py @@ -4,6 +4,88 @@ import random import displayControler as dCon import Slot import Osprzet +import Node + + + +def goalTest(hIndex): + for i in list(hIndex.values()): + if i == 0: + return False + return True + + +def succ(state): + resp = [] + hIndex = state["hydradeIndex"].copy() + + if state["direction"] == "N": + if state["y"] > 0: + if hIndex[state["x"], state["y"]-1] == 0: + hIndex[state["x"], state["y"] - 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]-1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "S": + if state["y"] < dCon.NUM_Y-1: + if hIndex[state["x"], state["y"]+1] == 0: + hIndex[state["x"], state["y"] + 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]+1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "E": + if state["x"] < dCon.NUM_X-1: + if hIndex[state["x"]+1, state["y"]] == 0: + hIndex[state["x"] + 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]+1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + else: #state["direction"] == "W" + if state["x"] > 0: + if hIndex[state["x"]-1, state["y"]] == 0: + hIndex[state["x"] - 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]-1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + + return resp + + +def check(tab, state): + for i in tab: + if i.state == state: + return False + return True + + +def BFS(istate): + fringe = [] + explored = [] + + x = Node.Node(istate) + fringe.append(x) + + while True: + if fringe == []: + return False + + elem = fringe.pop(0) + + if goalTest(elem.state["hydradeIndex"]): + return elem #TODO ciąg akcji zbudowany z wykorzystaniem pól parent i action + + explored.append(elem) + + for resp in succ(elem.state): + if check(fringe, resp[1]) and check(explored, resp[1]): + x = Node.Node(resp[1]) + x.parent = elem + x.action = resp[0] + fringe.append(x) + + + + class Tractor: DIRECTION_NORTH = 'N' @@ -100,4 +182,5 @@ class Tractor: for akcja in self.osprzet.akcje: print("- Typ:", akcja.typ) else: - print("Brak akcji przypisanych do tego sprzętu.") \ No newline at end of file + print("Brak akcji przypisanych do tego sprzętu.") + -- 2.20.1 From 2dac7c64a9e7626e0d42aadcb2c6f925d67fd8d5 Mon Sep 17 00:00:00 2001 From: jakzar Date: Sat, 13 Apr 2024 00:13:51 +0200 Subject: [PATCH 04/15] -minor changes to move action (added do_move_if_valid) --- Tractor.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Tractor.py b/Tractor.py index b4f9598..ab4707b 100644 --- a/Tractor.py +++ b/Tractor.py @@ -154,6 +154,9 @@ class Tractor: self.current_tractor_image = self.tractor_images[self.direction] # sprawdzenie czy następny slot jest dobry + self.do_move_if_valid(pole,next_slot_coordinates) + + def do_move_if_valid(self,pole, next_slot_coordinates): if next_slot_coordinates and pole.is_valid_move(next_slot_coordinates): next_slot = pole.get_slot_from_cord(next_slot_coordinates) self.slot.redraw_image() @@ -168,6 +171,9 @@ class Tractor: # wykonanie ruchu do przodu z uwzględnieniem aktualnej orientacji self.move_forward(pole) + def snake_move(self,pole): + pass + #to tak zrobiłam już na później, może się przyda def change_osprzet(self, new_osprzet): -- 2.20.1 From 911876e59abada9207d7b97c458ceaa4a4049713 Mon Sep 17 00:00:00 2001 From: jakzar Date: Sat, 13 Apr 2024 01:39:39 +0200 Subject: [PATCH 05/15] -added initial_move to get all slot's hydrate stats by visiting all slots -added way to get hydrate stats for single slot -added console to print things there instead of terminal --- App.py | 17 +++++++++++++---- Roslina.py | 6 ++++++ Slot.py | 9 ++++++++- Stan.py | 3 +++ Tractor.py | 32 ++++++++++++++++++++++++++++---- Ui.py | 19 +++++++++++++++++-- displayControler.py | 16 +++++++++++++--- 7 files changed, 88 insertions(+), 14 deletions(-) diff --git a/App.py b/App.py index 8029d49..76665ca 100644 --- a/App.py +++ b/App.py @@ -6,19 +6,21 @@ import time import displayControler as dCon import Image import Osprzet +import Ui pygame.init() screen = pygame.display.set_mode((dCon.getScreenWidth(), dCon.getScreenHeihgt())) - +FPS=5 +clock=pygame.time.Clock() image_loader=Image.Image() image_loader.load_images() pole=Pole.Pole(screen,image_loader) pole.draw_grid() #musi byc tutaj wywołane ponieważ inicjalizuje sloty do slownika - +ui=Ui.Ui(screen) #Tractor creation traktor_slot = pole.get_slot_from_cord((0, 0)) -traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.plug) +traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.plug,clock) def init_demo(): #Demo purpose @@ -27,8 +29,14 @@ def init_demo(): #Demo purpose time.sleep(2) pole.randomize_colors() traktor.draw_tractor() + start_flag=True while True: - time.sleep(0.5) + clock.tick(FPS) + if(start_flag): + ui.render_text_to_console(string_to_print="Przejazd inicjalizujacy- traktor sprawdza poziom nawodnienia") + traktor.initial_move(pole) + traktor.reset_pos(pole) + start_flag=False demo_move() old_info=get_info(old_info) for event in pygame.event.get(): @@ -42,6 +50,7 @@ def init(demo): #TODO: Implement + def demo_move(): current_slot = traktor.slot if current_slot: diff --git a/Roslina.py b/Roslina.py index 48f3479..c5a7897 100644 --- a/Roslina.py +++ b/Roslina.py @@ -78,5 +78,11 @@ class Roslina: self.stan.checkStan() return + def return_stan(self): + return self.stan + + def get_hydrate_stats(self): + return self.stan.return_hydrate() + def report_status(self): return f"Nazwa rosliny: {self.nazwa} "+self.stan.report_all() \ No newline at end of file diff --git a/Slot.py b/Slot.py index 4ca10fa..b50f872 100644 --- a/Slot.py +++ b/Slot.py @@ -42,6 +42,13 @@ class Slot: def random_plant(self): #Probably will not be used later only for demo purpouse return self.image_loader.return_random_plant() + + def return_plant(self): + return self.plant + + def get_hydrate_stats(self): + return self.plant.get_hydrate_stats() def print_status(self): - return f"wspolrzedne: (X:{self.x_axis} Y:{self.y_axis}) "+self.plant.report_status() \ No newline at end of file + return f"wspolrzedne: (X:{self.x_axis} Y:{self.y_axis}) "+self.plant.report_status() + \ No newline at end of file diff --git a/Stan.py b/Stan.py index 5789e25..6b9686d 100644 --- a/Stan.py +++ b/Stan.py @@ -44,5 +44,8 @@ class Stan: self.akcja = None return + def return_hydrate(self): + return self.nawodnienie + def report_all(self): return f"Nawodnienie: {self.nawodnienie} Zyznosc: {self.zyznosc} Wzrost: {self.wzrost} Choroba: {self.choroba}" \ No newline at end of file diff --git a/Tractor.py b/Tractor.py index ab4707b..14186fd 100644 --- a/Tractor.py +++ b/Tractor.py @@ -92,7 +92,7 @@ class Tractor: DIRECTION_SOUTH = 'S' DIRECTION_WEST = 'W' DIRECTION_EAST = 'E' - def __init__(self,slot,screen, osprzet): + def __init__(self,slot,screen, osprzet,clock): self.tractor_images = { Tractor.DIRECTION_NORTH: pygame.transform.scale(pygame.image.load('images/traktorN.png'), (dCon.CUBE_SIZE, dCon.CUBE_SIZE)), @@ -108,6 +108,8 @@ class Tractor: self.screen=screen self.slot=slot self.osprzet = osprzet + self.clock=clock + self.slot_hydrate_dict={} def draw_tractor(self): @@ -162,18 +164,40 @@ class Tractor: self.slot.redraw_image() self.slot = next_slot self.draw_tractor() + return True + else: + return False def random_move(self, pole): + self.clock.tick(2) # losowanie skrętu turn_direction = random.choice([self.turn_left, self.turn_right]) turn_direction() - time.sleep(0.5) + self.clock.tick(5) # wykonanie ruchu do przodu z uwzględnieniem aktualnej orientacji self.move_forward(pole) - def snake_move(self,pole): - pass + def reset_pos(self,pole): + self.do_move_if_valid(pole,(0,0)) + def initial_move(self,pole): + for y in range (0,12): + if(y%2==0): + for x in range(0,20): + self.snake_move(pole,x,y) + else: + for x in range(20,0,-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 + self.clock.tick(10) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() #to tak zrobiłam już na później, może się przyda def change_osprzet(self, new_osprzet): diff --git a/Ui.py b/Ui.py index 61ffc5c..3f3ccbf 100644 --- a/Ui.py +++ b/Ui.py @@ -7,10 +7,25 @@ class Ui: def __init__(self,screen): self.screen=screen self.font='freesansbold.ttf' #Feel free to change it :D - self.font_size=int(32) + self.font_size=int(16) def render_text(self,string_to_print): font=pygame.font.Font(self.font,self.font_size) text=font.render(string_to_print,True,Colors.BLACK,Colors.WHITE) textRect=text.get_rect() textRect.center=(dCon.getScreenWidth() // 2,dCon.getScreenHeihgt() // 2) - self.screen.blit(text,textRect) \ No newline at end of file + self.screen.blit(text,textRect) + + def render_text_to_console(self,string_to_print): + font=pygame.font.Font(self.font,self.font_size) + self.break_string_to_console(string_to_print) + line=10 + for string in self.to_print: + text=font.render(string,True,Colors.BLACK,Colors.WHITE) + textRect=text.get_rect() + textRect.center=(dCon.getGameWidth()+350/2,line) + textRect.scale_by(x=350,y=100) + self.screen.blit(text,textRect) + line=line+10 + + def break_string_to_console(self,string_to_print): + self.to_print=string_to_print.split(" ") diff --git a/displayControler.py b/displayControler.py index ea90442..9cdf461 100644 --- a/displayControler.py +++ b/displayControler.py @@ -10,8 +10,18 @@ def isValidMove(x, y): return False return True -def getScreenWidth(): - return NUM_X * CUBE_SIZE def getScreenHeihgt(): - return NUM_Y * CUBE_SIZE \ No newline at end of file + return NUM_Y * CUBE_SIZE + +def getGameWidth(): + return NUM_X * CUBE_SIZE + +def getScreenWidth(): + return getGameWidth()+350 + +def getConsoleWidth(): + return 350 + +def getConsoleWidthCenter(): + return getScreenWidth()+getConsoleWidth()/2 \ No newline at end of file -- 2.20.1 From 7ac10932313f14d42d2b9dd44c0f31a6ed93bb91 Mon Sep 17 00:00:00 2001 From: jakzar Date: Sat, 13 Apr 2024 01:51:52 +0200 Subject: [PATCH 06/15] -fix in gap between lines -added option to disable console --- App.py | 3 ++- Ui.py | 4 ++-- displayControler.py | 18 +++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/App.py b/App.py index 76665ca..d3c0a73 100644 --- a/App.py +++ b/App.py @@ -10,7 +10,8 @@ import Ui pygame.init() -screen = pygame.display.set_mode((dCon.getScreenWidth(), dCon.getScreenHeihgt())) +show_console=True +screen = pygame.display.set_mode((dCon.getScreenWidth(show_console), dCon.getScreenHeihgt())) FPS=5 clock=pygame.time.Clock() image_loader=Image.Image() diff --git a/Ui.py b/Ui.py index 3f3ccbf..c9755cd 100644 --- a/Ui.py +++ b/Ui.py @@ -12,7 +12,7 @@ class Ui: font=pygame.font.Font(self.font,self.font_size) text=font.render(string_to_print,True,Colors.BLACK,Colors.WHITE) textRect=text.get_rect() - textRect.center=(dCon.getScreenWidth() // 2,dCon.getScreenHeihgt() // 2) + textRect.center=(dCon.getGameWidth() // 2,dCon.getScreenHeihgt() // 2) self.screen.blit(text,textRect) def render_text_to_console(self,string_to_print): @@ -25,7 +25,7 @@ class Ui: textRect.center=(dCon.getGameWidth()+350/2,line) textRect.scale_by(x=350,y=100) self.screen.blit(text,textRect) - line=line+10 + line=line+18 def break_string_to_console(self,string_to_print): self.to_print=string_to_print.split(" ") diff --git a/displayControler.py b/displayControler.py index 9cdf461..492395a 100644 --- a/displayControler.py +++ b/displayControler.py @@ -11,14 +11,22 @@ def isValidMove(x, y): return True -def getScreenHeihgt(): - return NUM_Y * CUBE_SIZE - def getGameWidth(): return NUM_X * CUBE_SIZE -def getScreenWidth(): - return getGameWidth()+350 + + + +def getScreenHeihgt(): + return NUM_Y * CUBE_SIZE + + +def getScreenWidth(show_console): + screen_width=getGameWidth() + if(show_console): + print("true") + screen_width=screen_width+350 + return screen_width def getConsoleWidth(): return 350 -- 2.20.1 From 9ca821bab87006e541cc6754e1645933c02a8c5d Mon Sep 17 00:00:00 2001 From: jakzar Date: Sat, 13 Apr 2024 02:09:49 +0200 Subject: [PATCH 07/15] -fixed a bug where mouse on the console would sometimes cause a crash --- Pole.py | 7 +++++-- displayControler.py | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Pole.py b/Pole.py index 017848e..f2c6f4d 100644 --- a/Pole.py +++ b/Pole.py @@ -55,5 +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) - collided=self.get_slot_from_cord((mouse_x,mouse_y)) - return collided.print_status() \ No newline at end of file + if(mouse_x<20): + if(mouse_y<12): + collided=self.get_slot_from_cord((mouse_x,mouse_y)) + return collided.print_status() + return "" \ No newline at end of file diff --git a/displayControler.py b/displayControler.py index 492395a..f09da3f 100644 --- a/displayControler.py +++ b/displayControler.py @@ -24,7 +24,6 @@ def getScreenHeihgt(): def getScreenWidth(show_console): screen_width=getGameWidth() if(show_console): - print("true") screen_width=screen_width+350 return screen_width -- 2.20.1 From eb5556e5149a450887e23f708a9eab22cca00902 Mon Sep 17 00:00:00 2001 From: tafit0902 Date: Sat, 13 Apr 2024 23:49:04 +0200 Subject: [PATCH 08/15] poprawki --- Pole.py | 4 ++-- Tractor.py | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Pole.py b/Pole.py index f2c6f4d..983dbf9 100644 --- a/Pole.py +++ b/Pole.py @@ -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 Date: Sat, 13 Apr 2024 23:55:58 +0200 Subject: [PATCH 09/15] traktor porusza sie po scieszce bfs i nawadnia na sztywno pole --- App.py | 9 +++++++-- Slot.py | 2 ++ Tractor.py | 19 ++++++++++++++++++- displayControler.py | 4 ++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/App.py b/App.py index d3c0a73..4a92366 100644 --- a/App.py +++ b/App.py @@ -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,13 @@ 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() + print(bfsRoot) + # ui.render_text(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: diff --git a/Slot.py b/Slot.py index b50f872..262ee12 100644 --- a/Slot.py +++ b/Slot.py @@ -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 \ No newline at end of file diff --git a/Tractor.py b/Tractor.py index 74afc34..0e8aa5a 100644 --- a/Tractor.py +++ b/Tractor.py @@ -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) @@ -202,6 +207,16 @@ class Tractor: for event in pygame.event.get(): if event.type == pygame.QUIT: quit() + def move_by_root(self, root, pole, action): + for move in root: + if move == 'forward': + self.move_forward(pole) + if move == 'right': + self.turn_right() + if move == 'left': + self.turn_left() + action() + self.clock.tick(3) #to tak zrobiłam już na później, może się przyda def change_osprzet(self, new_osprzet): @@ -217,4 +232,6 @@ class Tractor: print("- Typ:", akcja.typ) else: print("Brak akcji przypisanych do tego sprzętu.") + def irrigateSlot(self): + self.slot.irrigatePlant() diff --git a/displayControler.py b/displayControler.py index f09da3f..cad2f16 100644 --- a/displayControler.py +++ b/displayControler.py @@ -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): -- 2.20.1 From fbe6a7e386e36f8926d5c473e06c63c848ad3886 Mon Sep 17 00:00:00 2001 From: tafit0902 Date: Sun, 14 Apr 2024 00:13:27 +0200 Subject: [PATCH 10/15] poprawa obrotu traktora --- App.py | 2 +- Tractor.py | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/App.py b/App.py index 4a92366..9ae7626 100644 --- a/App.py +++ b/App.py @@ -41,7 +41,7 @@ def init_demo(): #Demo purpose bfsRoot.reverse() print(bfsRoot) # ui.render_text(string_to_print="traktor porusza się ścieżką bfs") - traktor.move_by_root(bfsRoot, pole, traktor.irrigateSlot) + traktor.move_by_root(bfsRoot, pole, [traktor.irrigateSlot]) start_flag=False # demo_move() old_info=get_info(old_info) diff --git a/Tractor.py b/Tractor.py index 0e8aa5a..8cbee1f 100644 --- a/Tractor.py +++ b/Tractor.py @@ -207,15 +207,18 @@ class Tractor: for event in pygame.event.get(): if event.type == pygame.QUIT: quit() - def move_by_root(self, root, pole, action): + 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() - action() + for a in actions: + a() + self.clock.tick(3) #to tak zrobiłam już na później, może się przyda -- 2.20.1 From 2c03c4857cb2178b5b12dd609e3afa5d1ccd3b3d Mon Sep 17 00:00:00 2001 From: tafit0902 Date: Sun, 14 Apr 2024 00:41:18 +0200 Subject: [PATCH 11/15] poprawki --- App.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/App.py b/App.py index 9ae7626..be9f2d5 100644 --- a/App.py +++ b/App.py @@ -39,8 +39,7 @@ def init_demo(): #Demo purpose traktor.reset_pos(pole) bfsRoot = Tractor.BFS({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict}) bfsRoot.reverse() - print(bfsRoot) - # ui.render_text(string_to_print="traktor porusza się ścieżką bfs") + # 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() -- 2.20.1 From 63229b2c6094a9e4134c5aedf5adbfbf75379e13 Mon Sep 17 00:00:00 2001 From: Mateusz Czajka Date: Sun, 14 Apr 2024 21:39:04 +0200 Subject: [PATCH 12/15] Made BFS1 and BFS3 algorithm in BFS.py file. --- App.py | 17 ++- BFS.py | 254 ++++++++++++++++++++++++++++++++++++++++++++ Tractor.py | 95 ++--------------- displayControler.py | 2 +- 4 files changed, 276 insertions(+), 92 deletions(-) create mode 100644 BFS.py diff --git a/App.py b/App.py index be9f2d5..6a994a7 100644 --- a/App.py +++ b/App.py @@ -7,6 +7,7 @@ import displayControler as dCon import Image import Osprzet import Ui +import BFS pygame.init() @@ -37,10 +38,20 @@ 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() + + bfsRoot1 = BFS.BFS1({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict}) #displayControler: NUM_X: 6, NUM_Y: 3 (klasyczne) + #bfsRoot2 = [[{'x': 2, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'left'], [{'x': 1, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 0, 'y': 3, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 1, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 3, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 4, 'y': 2, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 1, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 3, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 1, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 0, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward']] #displayControler: NUM_X: 10, NUM_Y: 5 (klasyczne - duże) + #bfsRoot3 = BFS.BFS2({'x': 0, 'y': 0, 'direction': "E"}) #displayControler: NUM_X: 20, NUM_Y: 12 (skarb) + + bfsRoot1.reverse() + #bfsRoot2.reverse() + #bfsRoot3.reverse() # ui.render_text_to_console(string_to_print="traktor porusza się ścieżką bfs") - traktor.move_by_root(bfsRoot, pole, [traktor.irrigateSlot]) + + traktor.move_by_root(bfsRoot1, pole, [traktor.irrigateSlot]) + #traktor.move_by_root(bfsRoot2, pole, [traktor.irrigateSlot]) + #traktor.move_by_root(bfsRoot3, pole, [traktor.irrigateSlot]) + start_flag=False # demo_move() old_info=get_info(old_info) diff --git a/BFS.py b/BFS.py new file mode 100644 index 0000000..23cb7f3 --- /dev/null +++ b/BFS.py @@ -0,0 +1,254 @@ +import random +import Node +from displayControler import NUM_X, NUM_Y + + +def goalTest1(hIndex): + for i in list(hIndex.values()): + if i == 0: + return False + return True + + +def succ1(state): + resp = [] + hIndex = state["hydradeIndex"].copy() + if state["direction"] == "N": + if state["y"] > 0: + if hIndex[state["x"], state["y"]-1] == 0: + hIndex[state["x"], state["y"] - 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]-1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "S": + if state["y"] < NUM_Y-1: + if hIndex[state["x"], state["y"]+1] == 0: + hIndex[state["x"], state["y"] + 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]+1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "E": + if state["x"] < NUM_X-1: + if hIndex[state["x"]+1, state["y"]] == 0: + hIndex[state["x"] + 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]+1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + else: #state["zwrot"] == "W" + if state["x"] > 0: + if hIndex[state["x"]-1, state["y"]] == 0: + hIndex[state["x"] - 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]-1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + + return resp + + +def check1(tab, state): + for i in tab: + if i.state == state: + return False + return True + + +def BFS1(istate): + + + fringe = [] + explored = [] + + x = Node.Node(istate) + fringe.append(x) + + while True: + + + if fringe == []: + return False + + elem = fringe.pop(0) + + if goalTest1(elem.state["hydradeIndex"]): + x = elem + tab = [] + while x.parent != None: + tab.append([x.parent, x.action]) + x = x.parent + return tab + explored.append(elem) + + for resp in succ1(elem.state): + if check1(fringe, resp[1]) and check1(explored, resp[1]): + x = Node.Node(resp[1]) + x.parent = elem + x.action = resp[0] + fringe.append(x) + + + + +def goalTest2(state, goalTreassure): + if state["x"] == goalTreassure[0] and state["y"] == goalTreassure[1]: + return True + return False + + +def succ2(state): + resp = [] + if state["direction"] == "N": + if state["y"] > 0: + resp.append(["forward", {'x': state["x"], 'y': state["y"]-1, 'direction': state["direction"]}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "E"}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "W"}]) + elif state["direction"] == "S": + if state["y"] < NUM_Y: + resp.append(["forward", {'x': state["x"], 'y': state["y"]+1, 'direction': state["direction"]}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "W"}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "E"}]) + elif state["direction"] == "E": + if state["x"] < NUM_X: + resp.append(["forward", {'x': state["x"]+1, 'y': state["y"], 'direction': state["direction"]}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "S"}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "N"}]) + else: #state["zwrot"] == "W" + if state["x"] > 0: + resp.append(["forward", {'x': state["x"]-1, 'y': state["y"], 'direction': state["direction"]}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "N"}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "S"}]) + + return resp + + +def check2(tab, state): + for i in tab: + if i.state == state: + return False + return True + + +def BFS2(istate): + goalTreassuere = (random.randint(0,NUM_X-1), random.randint(0,NUM_Y-1)) + print(goalTreassuere) + fringe = [] + explored = [] + + x = Node.Node(istate) + fringe.append(x) + + while True: + + if fringe == []: + return False + + elem = fringe.pop(0) + + if goalTest2(elem.state, goalTreassuere): + x = elem + tab = [] + while x.parent != None: + tab.append([x.parent, x.action]) + x = x.parent + return tab + + explored.append(elem) + + for resp in succ2(elem.state): + if check2(fringe, resp[1]) and check2(explored, resp[1]): + x = Node.Node(resp[1]) + x.parent = elem + x.action = resp[0] + fringe.append(x) + + + + +""" +def goalTest(hIndex): + for i in list(hIndex.values()): + if i == 0: + return False + return True + + +def succ(state): + resp = [] + hIndex = state["hydradeIndex"].copy() + + if state["direction"] == "N": + if state["y"] > 0: + if hIndex[state["x"], state["y"]-1] == 0: + hIndex[state["x"], state["y"] - 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]-1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "S": + if state["y"] < dCon.NUM_Y-1: + if hIndex[state["x"], state["y"]+1] == 0: + hIndex[state["x"], state["y"] + 1] = 1 + resp.append(["forward", {'x': state["x"], 'y': state["y"]+1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) + elif state["direction"] == "E": + if state["x"] < dCon.NUM_X-1: + if hIndex[state["x"]+1, state["y"]] == 0: + hIndex[state["x"] + 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]+1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + else: #state["direction"] == "W" + if state["x"] > 0: + if hIndex[state["x"]-1, state["y"]] == 0: + hIndex[state["x"] - 1, state["y"]] = 1 + resp.append(["forward", {'x': state["x"]-1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) + resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) + resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) + + return resp + + +def check(tab, state): + for i in tab: + if i.state == state: + return False + return True + + +def BFS(istate): + fringe = [] + explored = [] + + x = Node.Node(istate) + fringe.append(x) + + while True: + if fringe == []: + return False + + elem = fringe.pop(0) + + if goalTest(elem.state["hydradeIndex"]): + x = elem + tab = [] + while x.parent != None: + tab.append(x.action) + x = x.parent + return tab + + explored.append(elem) + + for resp in succ(elem.state): + if check(fringe, resp[1]) and check(explored, resp[1]): + x = Node.Node(resp[1]) + x.parent = elem + x.action = resp[0] + fringe.append(x) +""" + + + + + + + + diff --git a/Tractor.py b/Tractor.py index 8cbee1f..74c8645 100644 --- a/Tractor.py +++ b/Tractor.py @@ -8,90 +8,6 @@ import Node -def goalTest(hIndex): - for i in list(hIndex.values()): - if i == 0: - return False - return True - - -def succ(state): - resp = [] - hIndex = state["hydradeIndex"].copy() - - if state["direction"] == "N": - if state["y"] > 0: - if hIndex[state["x"], state["y"]-1] == 0: - hIndex[state["x"], state["y"] - 1] = 1 - resp.append(["forward", {'x': state["x"], 'y': state["y"]-1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) - resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) - resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) - elif state["direction"] == "S": - if state["y"] < dCon.NUM_Y-1: - if hIndex[state["x"], state["y"]+1] == 0: - hIndex[state["x"], state["y"] + 1] = 1 - resp.append(["forward", {'x': state["x"], 'y': state["y"]+1, 'direction': state["direction"], 'hydradeIndex': hIndex}]) - resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "W", 'hydradeIndex': state["hydradeIndex"].copy()}]) - resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "E", 'hydradeIndex': state["hydradeIndex"].copy()}]) - elif state["direction"] == "E": - if state["x"] < dCon.NUM_X-1: - if hIndex[state["x"]+1, state["y"]] == 0: - hIndex[state["x"] + 1, state["y"]] = 1 - resp.append(["forward", {'x': state["x"]+1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) - resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) - resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) - else: #state["direction"] == "W" - if state["x"] > 0: - if hIndex[state["x"]-1, state["y"]] == 0: - hIndex[state["x"] - 1, state["y"]] = 1 - resp.append(["forward", {'x': state["x"]-1, 'y': state["y"], 'direction': state["direction"], 'hydradeIndex': hIndex}]) - resp.append(["right", {'x': state["x"], 'y': state["y"], 'direction': "N", 'hydradeIndex': state["hydradeIndex"].copy()}]) - resp.append(["left", {'x': state["x"], 'y': state["y"], 'direction': "S", 'hydradeIndex': state["hydradeIndex"].copy()}]) - - return resp - - -def check(tab, state): - for i in tab: - if i.state == state: - return False - return True - - -def BFS(istate): - fringe = [] - explored = [] - - x = Node.Node(istate) - fringe.append(x) - - while True: - if fringe == []: - return False - - elem = fringe.pop(0) - - if goalTest(elem.state["hydradeIndex"]): - x = elem - tab = [] - while x.parent != None: - tab.append(x.action) - x = x.parent - return tab - - explored.append(elem) - - for resp in succ(elem.state): - if check(fringe, resp[1]) and check(explored, resp[1]): - x = Node.Node(resp[1]) - x.parent = elem - x.action = resp[0] - fringe.append(x) - - - - - class Tractor: DIRECTION_NORTH = 'N' DIRECTION_SOUTH = 'S' @@ -198,7 +114,9 @@ class Tractor: def snake_move(self,pole,x,y): next_slot_coordinates=(x,y) if(self.do_move_if_valid(pole,next_slot_coordinates)): - if pole.get_slot_from_cord((x,y)).get_hydrate_stats() < 60: + if x == 0 and y == 0: + hydrateIndex = -1 + elif pole.get_slot_from_cord((x,y)).get_hydrate_stats() < 60: hydrateIndex = 0 else: hydrateIndex = 1 @@ -207,14 +125,15 @@ class Tractor: 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': + if move[1] == 'forward': self.move_forward(pole) - if move == 'right': + if move[1] == 'right': self.turn_right() - if move == 'left': + if move[1] == 'left': self.turn_left() for a in actions: a() diff --git a/displayControler.py b/displayControler.py index cad2f16..f5cb408 100644 --- a/displayControler.py +++ b/displayControler.py @@ -1,5 +1,5 @@ CUBE_SIZE = 64 -NUM_X = 5 +NUM_X = 6 NUM_Y = 3 #returns true if tractor can move to specified slot -- 2.20.1 From d38c4d95934f791849bf0952a1054c96cd772726 Mon Sep 17 00:00:00 2001 From: jakzar Date: Mon, 15 Apr 2024 10:02:09 +0200 Subject: [PATCH 13/15] -Added garage -Fixed bugs that were causing crashes realted to mouse position out of the window --- App.py | 13 ++++++++----- Image.py | 8 +++++++- Pole.py | 7 ++++++- Slot.py | 6 ++++++ Tractor.py | 5 ++++- images/garage.png | Bin 0 -> 11704 bytes 6 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 images/garage.png diff --git a/App.py b/App.py index 6a994a7..2a7bc1e 100644 --- a/App.py +++ b/App.py @@ -74,11 +74,14 @@ def demo_move(): traktor.random_move(pole) def get_info(old_info): - (x,y)=pygame.mouse.get_pos() - new_info=pole.check_collision(x,y) - if(old_info!=new_info): - print(new_info) - return new_info + try: + (x,y)=pygame.mouse.get_pos() + new_info=pole.check_collision(x,y) + if(old_info!=new_info): + print(new_info) + return new_info + except: + pass diff --git a/Image.py b/Image.py index 4bd8136..a924bd0 100644 --- a/Image.py +++ b/Image.py @@ -6,6 +6,7 @@ class Image: def __init__(self): self.plants_image_dict={} self.tractor_image=None + self.garage_image=None def load_images(self): files_plants={0:"borowka", 1:"kukurydza", @@ -19,6 +20,8 @@ class Image: self.plants_image_dict[files_plants[index]]=plant_image tractor_image=pygame.image.load("images/traktor.png") tractor_image=pygame.transform.scale(tractor_image,(dCon.CUBE_SIZE,dCon.CUBE_SIZE)) + garage=pygame.image.load("images/garage.png") + self.garage_image=pygame.transform.scale(garage,(dCon.CUBE_SIZE,dCon.CUBE_SIZE)) def return_random_plant(self): x=random.randint(0,5) keys=list(self.plants_image_dict.keys()) @@ -26,4 +29,7 @@ class Image: return (plant,self.plants_image_dict[plant]) def return_plant(self,plant_name): - return (plant_name,self.plants_image_dict[plant_name]) \ No newline at end of file + return (plant_name,self.plants_image_dict[plant_name]) + + def return_garage(self): + return self.garage_image \ No newline at end of file diff --git a/Pole.py b/Pole.py index 983dbf9..dc7d82e 100644 --- a/Pole.py +++ b/Pole.py @@ -33,13 +33,18 @@ class Pole: slot_dict=self.get_slot_dict() for coordinates in slot_dict: slot_dict[coordinates].draw() + garage=self.slot_dict[(0,0)] + garage.set_garage_image() def randomize_colors(self): pygame.display.update() time.sleep(3) self.ui.render_text("Randomizing Crops") for coordinates in self.slot_dict: - self.slot_dict[coordinates].set_random_plant() + if(coordinates==(0,0)): + continue + else: + self.slot_dict[coordinates].set_random_plant() def change_color_of_slot(self,coordinates,color): #Coordinates must be tuple (x,y) (left top slot has cord (0,0) ), color has to be from defined in Colors.py or custom in RGB value (R,G,B) self.get_slot_from_cord(coordinates).color_change(color) diff --git a/Slot.py b/Slot.py index 262ee12..15511dc 100644 --- a/Slot.py +++ b/Slot.py @@ -15,6 +15,7 @@ class Slot: self.screen=screen self.field=pygame.Rect(self.x_axis*dCon.CUBE_SIZE,self.y_axis*dCon.CUBE_SIZE,dCon.CUBE_SIZE,dCon.CUBE_SIZE) self.image_loader=image_loader + self.garage_image=None def draw(self): pygame.draw.rect(self.screen,Colors.BROWN,self.field,0) #Draw field @@ -39,6 +40,11 @@ class Slot: self.screen.blit(self.plant_image, (self.x_axis * dCon.CUBE_SIZE, self.y_axis * dCon.CUBE_SIZE)) pygame.draw.rect(self.screen, Colors.BLACK, self.field, BORDER_THICKNESS) + def set_garage_image(self): + self.plant_image=self.image_loader.return_garage() + self.screen.blit(self.plant_image, (self.x_axis * dCon.CUBE_SIZE, self.y_axis * dCon.CUBE_SIZE)) + pygame.draw.rect(self.screen, Colors.BLACK, self.field, BORDER_THICKNESS) + def random_plant(self): #Probably will not be used later only for demo purpouse return self.image_loader.return_random_plant() diff --git a/Tractor.py b/Tractor.py index 74c8645..2c0dfe3 100644 --- a/Tractor.py +++ b/Tractor.py @@ -155,5 +155,8 @@ class Tractor: else: print("Brak akcji przypisanych do tego sprzętu.") def irrigateSlot(self): - self.slot.irrigatePlant() + try: + self.slot.irrigatePlant() + except: + pass diff --git a/images/garage.png b/images/garage.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ca1c0e200a573db21fee68709828966450903c GIT binary patch literal 11704 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 HJIwzAPKkH3 literal 0 HcmV?d00001 -- 2.20.1 From e0397b95a7a9880a69748df32aa57d4b2e2a1706 Mon Sep 17 00:00:00 2001 From: jakzar Date: Mon, 15 Apr 2024 10:49:25 +0200 Subject: [PATCH 14/15] -Added support to precalculated BFS2 -Added way to set HydrateValue by HydrateIndex -Minor changes in Tractor.py -Added flags to make handling different BFS implements easier --- App.py | 32 +++++++++++++++++++------------- BFS.py | 8 ++++++++ Slot.py | 8 ++++++++ Tractor.py | 39 +++++++++++++++++++++++++++++++-------- displayControler.py | 4 ++-- 5 files changed, 68 insertions(+), 23 deletions(-) diff --git a/App.py b/App.py index 2a7bc1e..0fe7caa 100644 --- a/App.py +++ b/App.py @@ -21,8 +21,11 @@ pole=Pole.Pole(screen,image_loader) pole.draw_grid() #musi byc tutaj wywołane ponieważ inicjalizuje sloty do slownika ui=Ui.Ui(screen) #Tractor creation +bfs1_flag=False +bfs2_flag=True #Change this lines to show different bfs implementation +bfs3_flag=False traktor_slot = pole.get_slot_from_cord((0, 0)) -traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.opryskiwacz,clock) +traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.opryskiwacz,clock,bfs2_flag) def init_demo(): #Demo purpose @@ -38,20 +41,23 @@ 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) - - bfsRoot1 = BFS.BFS1({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict}) #displayControler: NUM_X: 6, NUM_Y: 3 (klasyczne) - #bfsRoot2 = [[{'x': 2, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'left'], [{'x': 1, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 0, 'y': 3, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 1, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 3, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 4, 'y': 2, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 1, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 3, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 1, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 0, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward']] #displayControler: NUM_X: 10, NUM_Y: 5 (klasyczne - duże) - #bfsRoot3 = BFS.BFS2({'x': 0, 'y': 0, 'direction': "E"}) #displayControler: NUM_X: 20, NUM_Y: 12 (skarb) - - bfsRoot1.reverse() - #bfsRoot2.reverse() - #bfsRoot3.reverse() + if(bfs1_flag): + bfsRoot1 = BFS.BFS1({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict}) + #displayControler: NUM_X: 6, NUM_Y: 3 (klasyczne) CHANGE THIS BY HAND + bfsRoot1.reverse() + traktor.move_by_root(bfsRoot1, pole, [traktor.irrigateSlot]) + if(bfs2_flag): + bfsRoot2 = [[{'x': 2, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'left'], [{'x': 1, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 0, 'y': 3, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 1, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 3, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 4, 'y': 2, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 1, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 3, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 1, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 0, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward']] + #displayControler: NUM_X: 10, NUM_Y: 5 (klasyczne - duże) CHANGE THIS IN DCON !!! + bfsRoot2.reverse() + traktor.move_by_root(bfsRoot2, pole, [traktor.irrigateSlot]) + if(bfs3_flag): + bfsRoot3 = BFS.BFS2({'x': 0, 'y': 0, 'direction': "E"}) + #displayControler: NUM_X: 20, NUM_Y: 12 (skarb) CHANGE THIS IN DCON BY HAND!!!!!!!! + bfsRoot3.reverse() + traktor.move_by_root(bfsRoot3, pole, [traktor.irrigateSlot]) # ui.render_text_to_console(string_to_print="traktor porusza się ścieżką bfs") - traktor.move_by_root(bfsRoot1, pole, [traktor.irrigateSlot]) - #traktor.move_by_root(bfsRoot2, pole, [traktor.irrigateSlot]) - #traktor.move_by_root(bfsRoot3, pole, [traktor.irrigateSlot]) - start_flag=False # demo_move() old_info=get_info(old_info) diff --git a/BFS.py b/BFS.py index 23cb7f3..366bcac 100644 --- a/BFS.py +++ b/BFS.py @@ -1,4 +1,6 @@ import random + +import pygame import Node from displayControler import NUM_X, NUM_Y @@ -84,6 +86,9 @@ def BFS1(istate): x.parent = elem x.action = resp[0] fringe.append(x) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() @@ -159,6 +164,9 @@ def BFS2(istate): x.parent = elem x.action = resp[0] fringe.append(x) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() diff --git a/Slot.py b/Slot.py index 15511dc..cd1e928 100644 --- a/Slot.py +++ b/Slot.py @@ -59,4 +59,12 @@ class Slot: return f"wspolrzedne: (X:{self.x_axis} Y:{self.y_axis}) "+self.plant.report_status() def irrigatePlant(self): self.plant.stan.nawodnienie = 100 + + def setHydrate(self,index): + if(index==0): + self.plant.stan.nawodnienie=random.randint(0,60) + elif(index==1): + self.plant.stan.nawodnienie=random.randint(61,100) + elif(index==-1): + pass \ No newline at end of file diff --git a/Tractor.py b/Tractor.py index 2c0dfe3..2780372 100644 --- a/Tractor.py +++ b/Tractor.py @@ -6,6 +6,11 @@ import Slot import Osprzet import Node +tab = [-1, 0, 0, 0, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, + 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] class Tractor: @@ -13,7 +18,7 @@ class Tractor: DIRECTION_SOUTH = 'S' DIRECTION_WEST = 'W' DIRECTION_EAST = 'E' - def __init__(self,slot,screen, osprzet,clock): + def __init__(self,slot,screen, osprzet,clock,bfs2_flag): self.tractor_images = { Tractor.DIRECTION_NORTH: pygame.transform.scale(pygame.image.load('images/traktorN.png'), (dCon.CUBE_SIZE, dCon.CUBE_SIZE)), @@ -31,6 +36,7 @@ class Tractor: self.osprzet = osprzet self.clock=clock self.slot_hydrate_dict={} + self.bfs2_flag=bfs2_flag def draw_tractor(self): @@ -102,13 +108,30 @@ class Tractor: self.do_move_if_valid(pole,(0,0)) def initial_move(self,pole): - for y in range (0,dCon.NUM_Y): - if(y%2==0): - for x in range(0,dCon.NUM_X): - self.snake_move(pole,x,y) - else: - for x in range(dCon.NUM_X,-1,-1): - self.snake_move(pole,x,y) + if (self.bfs2_flag==True): + index=0 + + for y in range (0,dCon.NUM_Y): + if(y%2==0): + for x in range(0,dCon.NUM_X): + if(pole.is_valid_move((x,y))): + pole.get_slot_from_cord((x,y)).setHydrate(tab[index]) + self.snake_move(pole,x,y) + index=index+1 + else: + for x in range(dCon.NUM_X,-1,-1): + if(pole.is_valid_move((x,y))): + pole.get_slot_from_cord((x,y)).setHydrate(tab[index]) + self.snake_move(pole,x,y) + index=index+1 + else: + for y in range (0,dCon.NUM_Y): + if(y%2==0): + for x in range(0,dCon.NUM_X): + self.snake_move(pole,x,y) + else: + for x in range(dCon.NUM_X,-1,-1): + self.snake_move(pole,x,y) def snake_move(self,pole,x,y): diff --git a/displayControler.py b/displayControler.py index f5cb408..1847af2 100644 --- a/displayControler.py +++ b/displayControler.py @@ -1,6 +1,6 @@ CUBE_SIZE = 64 -NUM_X = 6 -NUM_Y = 3 +NUM_X = 10 +NUM_Y = 5 #returns true if tractor can move to specified slot def isValidMove(x, y): -- 2.20.1 From a696da09de8fdbbd34f3cdd229d3d9a889bdac5a Mon Sep 17 00:00:00 2001 From: jakzar Date: Mon, 15 Apr 2024 11:20:47 +0200 Subject: [PATCH 15/15] -Added way to clear console -Support different dimmension of grid for console --- App.py | 23 +++++++++++++++++++---- Ui.py | 18 ++++++++++++++---- displayControler.py | 7 +++++-- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/App.py b/App.py index 0fe7caa..93c18ba 100644 --- a/App.py +++ b/App.py @@ -21,8 +21,8 @@ pole=Pole.Pole(screen,image_loader) pole.draw_grid() #musi byc tutaj wywołane ponieważ inicjalizuje sloty do slownika ui=Ui.Ui(screen) #Tractor creation -bfs1_flag=False -bfs2_flag=True #Change this lines to show different bfs implementation +bfs1_flag=True +bfs2_flag=False #Change this lines to show different bfs implementation bfs3_flag=False traktor_slot = pole.get_slot_from_cord((0, 0)) traktor = Tractor.Tractor(traktor_slot, screen, Osprzet.opryskiwacz,clock,bfs2_flag) @@ -41,22 +41,33 @@ 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) + clock.tick(20) + ui.clear_console() + clock.tick(20) + ui.render_text_to_console("Obliczanie sciezki przy uzyciu BFS") + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() if(bfs1_flag): bfsRoot1 = BFS.BFS1({"x": 0, "y": 0, "direction": "E", "hydradeIndex": traktor.slot_hydrate_dict}) #displayControler: NUM_X: 6, NUM_Y: 3 (klasyczne) CHANGE THIS BY HAND bfsRoot1.reverse() + print_to_console("Traktor porusza sie obliczona sciezka BFS") traktor.move_by_root(bfsRoot1, pole, [traktor.irrigateSlot]) if(bfs2_flag): bfsRoot2 = [[{'x': 2, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 1, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'left'], [{'x': 1, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 2, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 1, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 0, 'y': 3, 'direction': 'N', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 1, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 1, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 1, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 3, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 1, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'W', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 3, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 1, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 4, 'y': 2, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 1, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 1, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 1, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'S', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 4, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 1, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'right'], [{'x': 3, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 1, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 2, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 1, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 1, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 1, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward'], [{'x': 0, 'y': 0, 'direction': 'E', 'hydradeIndex': {(0, 0): -1, (1, 0): 0, (2, 0): 0, (3, 0): 0, (4, 0): 0, (5, 0): 1, (6, 0): 1, (7, 0): 1, (8, 0): 1, (9, 0): 1, (0, 1): 1, (1, 1): 1, (2, 1): 0, (3, 1): 1, (4, 1): 0, (5, 1): 1, (6, 1): 1, (7, 1): 1, (8, 1): 1, (9, 1): 1, (0, 2): 0, (1, 2): 1, (2, 2): 0, (3, 2): 1, (4, 2): 0, (5, 2): 1, (6, 2): 1, (7, 2): 1, (8, 2): 1, (9, 2): 1, (0, 3): 1, (1, 3): 0, (2, 3): 0, (3, 3): 0, (4, 3): 0, (5, 3): 1, (6, 3): 1, (7, 3): 1, (8, 3): 1, (9, 3): 1, (0, 4): 1, (1, 4): 1, (2, 4): 1, (3, 4): 1, (4, 4): 1, (5, 4): 1, (6, 4): 1, (7, 4): 1, (8, 4): 1, (9, 4): 1}}, 'forward']] #displayControler: NUM_X: 10, NUM_Y: 5 (klasyczne - duże) CHANGE THIS IN DCON !!! bfsRoot2.reverse() + print_to_console("Traktor porusza sie obliczona sciezka BFS") traktor.move_by_root(bfsRoot2, pole, [traktor.irrigateSlot]) if(bfs3_flag): bfsRoot3 = BFS.BFS2({'x': 0, 'y': 0, 'direction': "E"}) #displayControler: NUM_X: 20, NUM_Y: 12 (skarb) CHANGE THIS IN DCON BY HAND!!!!!!!! bfsRoot3.reverse() + print_to_console("Traktor porusza sie obliczona sciezka BFS") traktor.move_by_root(bfsRoot3, pole, [traktor.irrigateSlot]) - # ui.render_text_to_console(string_to_print="traktor porusza się ścieżką bfs") + + start_flag=False # demo_move() @@ -71,7 +82,11 @@ def init(demo): init_demo() #TODO: Implement - +def print_to_console(text): + clock.tick(5) + ui.clear_console() + clock.tick(5) + ui.render_text_to_console(text) def demo_move(): current_slot = traktor.slot diff --git a/Ui.py b/Ui.py index c9755cd..e6f5ab7 100644 --- a/Ui.py +++ b/Ui.py @@ -7,7 +7,15 @@ class Ui: def __init__(self,screen): self.screen=screen self.font='freesansbold.ttf' #Feel free to change it :D - self.font_size=int(16) + if(dCon.NUM_Y<7): + self.font_size=int(15) + self.line=20 + self.first_line=20 + if(dCon.NUM_Y>=7): + self.font_size=int(30) + self.line=30 + self.first_line=30 + def render_text(self,string_to_print): font=pygame.font.Font(self.font,self.font_size) text=font.render(string_to_print,True,Colors.BLACK,Colors.WHITE) @@ -18,14 +26,16 @@ class Ui: def render_text_to_console(self,string_to_print): font=pygame.font.Font(self.font,self.font_size) self.break_string_to_console(string_to_print) - line=10 for string in self.to_print: text=font.render(string,True,Colors.BLACK,Colors.WHITE) textRect=text.get_rect() - textRect.center=(dCon.getGameWidth()+350/2,line) + textRect.center=(dCon.getGameWidth()+350/2,self.line) textRect.scale_by(x=350,y=100) self.screen.blit(text,textRect) - line=line+18 + self.line=self.line+self.first_line + def clear_console(self): + self.line=self.first_line + pygame.draw.rect(self.screen,(0,0,0) , pygame.Rect(dCon.returnConsoleCoordinate(), 0, dCon.getConsoleWidth(), dCon.getScreenHeihgt()), 0) def break_string_to_console(self,string_to_print): self.to_print=string_to_print.split(" ") diff --git a/displayControler.py b/displayControler.py index 1847af2..3d774d8 100644 --- a/displayControler.py +++ b/displayControler.py @@ -1,6 +1,6 @@ CUBE_SIZE = 64 -NUM_X = 10 -NUM_Y = 5 +NUM_X = 6 +NUM_Y = 3 #returns true if tractor can move to specified slot def isValidMove(x, y): @@ -14,6 +14,9 @@ def isValidMove(x, y): def getGameWidth(): return NUM_X * CUBE_SIZE +def returnConsoleCoordinate(): + return NUM_X * CUBE_SIZE + -- 2.20.1