From 560e945d5a65107d15e8d284290eb5e3f57d91f9 Mon Sep 17 00:00:00 2001 From: barmal4 Date: Mon, 26 Apr 2021 20:24:52 +0200 Subject: [PATCH] adding states --- Constants.py | 4 ++ Engine/BfsPathFinder.py | 43 +++++++++++++----- Engine/Game.py | 3 +- Engine/PathFinder.py | 2 +- Engine/State.py | 14 ++++++ .../__pycache__/BfsPathFinder.cpython-39.pyc | Bin 1426 -> 2044 bytes Engine/__pycache__/Game.cpython-39.pyc | Bin 3407 -> 3446 bytes Engine/__pycache__/PathFinder.cpython-39.pyc | Bin 2351 -> 2351 bytes Engine/__pycache__/State.cpython-39.pyc | Bin 0 -> 800 bytes __pycache__/Constants.cpython-39.pyc | Bin 545 -> 581 bytes 10 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 Engine/State.py create mode 100644 Engine/__pycache__/State.cpython-39.pyc diff --git a/Constants.py b/Constants.py index 6eb9e177..e79a06d5 100644 --- a/Constants.py +++ b/Constants.py @@ -10,9 +10,13 @@ UP = 'UP' DOWN = 'DOWN' LEFT = 'LEFT' RIGHT = 'RIGHT' +DEFUSE = 'DEFUSE' +REST = 'REST' DECOY = 'Decoy' ATOMIC_BOMB = 'Atomic Bomb' CLAYMORE = 'Claymore' CHEMICAL_BOMB = 'Chemical Bomb' LAND_MINE = 'Land Mine' + + diff --git a/Engine/BfsPathFinder.py b/Engine/BfsPathFinder.py index 2b603506..9741def2 100644 --- a/Engine/BfsPathFinder.py +++ b/Engine/BfsPathFinder.py @@ -1,23 +1,24 @@ from queue import Queue -from Engine.PathFinder import PathFinder -class BfsPathFinder(PathFinder): +from Engine.Point import Point +from Engine.State import State +from Constants import RIGHT, LEFT, DOWN, UP, DEFUSE, REST +class BfsPathFinder: def __init__(self, board): - super().__init__(board) self.board = board self.goal = None - def findBomb(self,start): + def findBomb(self,startState): frontier = Queue() - frontier.put(start) + frontier.put(startState) cameFrom = dict() - cameFrom[start] = None + cameFrom[startState] = None while not frontier.empty(): current = frontier.get() if self.checkGoal(current): - return self.constructPath(cameFrom,start) + return self.constructPath(cameFrom,startState) for next in self.getNeighbour(current): if next not in cameFrom: @@ -25,19 +26,39 @@ class BfsPathFinder(PathFinder): cameFrom[next] = current return [] - def constructPath(self,cameFrom,start): + def constructPath(self,cameFrom,startState): current = cameFrom[self.goal] path = [] path.append(self.goal) - while current != start: + while current.getAction != startState: path.append(current) current = cameFrom[current] - path.append(start) + path.append(startState) path.reverse() return path + def getNeighbour(self, current): + neighbourlist = [] + state1 = State(LEFT,Point(current.getX() + 1, current.getY())) + state2 = State(RIGHT,Point(current.getX(), current.getY() + 1)) + state3 = State(UP,Point(current.getX(), current.getY() - 1)) + state4 = State(DOWN,Point(current.getX() - 1, current.getY())) + if self.checkField(current.getPoint(),state1.getPoint()): + neighbourlist.append(state1.getPoint()) + if self.checkField(current.getPoint(), state2.getPoint()): + neighbourlist.append(state2.getPoint()) + if self.checkField(current.getPoint(),state3.getPoint()): + neighbourlist.append(state3) + if self.checkField(current.getPoint(),state4.getPoint()): + neighbourlist.append(state4) + return neighbourlist + def checkGoal(self, current): - if current in self.board.bombMap: + if current.getPoint() in self.board.bombMap: self.goal = current return True return False + + + + diff --git a/Engine/Game.py b/Engine/Game.py index bc893f45..ffa63432 100644 --- a/Engine/Game.py +++ b/Engine/Game.py @@ -10,6 +10,7 @@ from Engine.Point import Point from Engine.Stone import Stone from Engine.PathFinder import PathFinder from Engine.BfsPathFinder import BfsPathFinder +from Engine.State import State class Game: @@ -95,7 +96,7 @@ class Game: return BombFactory.create(LAND_MINE) def findBomb(self): - return BfsPathFinder(self.board).findBomb(self.agent.getPoint()) + return BfsPathFinder(self.board).findBomb(State('REST')) def finalState(self): if len(self.board.bombMap) == 0: diff --git a/Engine/PathFinder.py b/Engine/PathFinder.py index 06d65bc8..bc0b618e 100644 --- a/Engine/PathFinder.py +++ b/Engine/PathFinder.py @@ -50,7 +50,7 @@ class PathFinder: point2 = Point(current.getX(), current.getY() + 1) point3 = Point(current.getX(), current.getY() - 1) point4 = Point(current.getX() - 1, current.getY()) - if self.checkField(current,point1): + if self.checkField(current,current): neighbourlist.append(point1) if self.checkField(current, point2): neighbourlist.append(point2) diff --git a/Engine/State.py b/Engine/State.py new file mode 100644 index 00000000..a6998aac --- /dev/null +++ b/Engine/State.py @@ -0,0 +1,14 @@ +from Constants import RIGHT, LEFT, DEFUSE, REST +class State: + + def __init__(self, action, point): + self.action = action + self.point = point + + def getPoint(self): + return self.point + + def getAction(self): + return self.action + + diff --git a/Engine/__pycache__/BfsPathFinder.cpython-39.pyc b/Engine/__pycache__/BfsPathFinder.cpython-39.pyc index 5c5a53e3f102b9e0eb45df82bac04c75135ffd0c..d3abaed54e2631221b6a4cb45fa38d7a7dc6c5e1 100644 GIT binary patch literal 2044 zcmZuyOK&4Z5bo}IdTfU*Ad<~4ffHg5tOTqOLJ`{CBn~SrCae=4Bcow5-Eo|F#!gQ= zBGKfOmG}pogwvQ>PLO`bvbD^0|MV2``4e9PspD* znExyoJc3qy2Z9q$2PC5rrKqz3%dE&Ux;3yfCvuE#58TX)yv&dMtQOU>APTa2RL>ew zgOVM>9qzs$+`VE^lY1Q!`mbPb5>oAaI~HSs%I>hAD^xlvQ6hA;^Ze<~S9{uiw%r1` z_09Kf&GvV-yS3fg?`&)P`F3Y7#ck$427^b?iiaQsi6|!#3b^Ykc@*{&QOi&Pa|qnxPt z@zakUkJT_s)OmW5pT|Wq60*CU_xic$E?o1$=v@18+|T`4+CE+H0eG?j2Zz2ygtavqD{b?Bs=?0kFqTf3@7>;G=$~SPApiqfahEkD#D2KV~ z3#t7y$wW&IGwr2gDMbz^<>D7*l2eI0xY|Di3OpHR2l!%&H4uckGyqV2=0gi;gDp`X zW*Yy4dA2mg_cZ$)P;hKueg+Ei=a}3DXnP2w4RFKQfMb>H#FC$xIm^t@(n8PEH8aO5 z2(Q_MAe1xsEV%^xYBw2;M9#G*#ToESgpL73-UFk=NaTHVvqu2kt+3@PSl)$Jya|Fp zbT-6?QR2_17xxwkwUCAdRv{0OSti`SL4hEdB8nY5b6O9)x}6@~c2y2Mu|5fq6;fEppx4@UkdksT6BGLZ> zeKFwL2RBn8<$GWXy(*a|h0T0M`a!=?kqeAh;^S%m$+Z7;+CRLV>$|YshtLY#i$JFD zPk(RIC0exr`hZ@nEoOcGwJjulp+>I5rT{(x@X0YfW@kV?Q!_12JMe!3&{*xgR%pu) zz|+)7?H$02`#KpJB8TiI)Z2GofhC_qD-bh6m*HL7^kQZ4p8wU0cIab;%;D+Bu@2%m z8}ji0^+p_@j*~%Ukw|)p_crf9B0v&PnmZk9xWoz}>mV>~1y%?s3YPztU-y^Id^=py z&ME%CRTZsK)$IpW9x?mTY|0cULk(Tq#HyC$s;Ky2sDgZ`m{CIw4>L!+?oQg@s3Q9k O8E3F*!24~`_vydB=+S@x delta 745 zcmZ8f&ubGw6n?WiyV*2ZCA9dnh=R~A6)%bhQ7ita7aJ<6mnAT6GLtrSo5Yz-p%Cby z!Jg|LMbLwXT>Mk~1ID8#FP^+uJow(GXz9RwJ2UUS?|bv@{5kusvXq434B*)P_4d_Q z4)C2eCkLLvL!9Qu;nL+>&p^78k3n+f?z=IUUIQZk2NgujdM}1*sBkf}mSmeN-JVps zeOQ}YrntF{pde-vV&?!lOfu<=gV>!i5|{MH5PPyD1N{02z#%Rne>uO#uI{;5PSeaI zWUvn(*@%5&3`T4O!jXXJN@&1@)gx{_GaM*w10lM-ZYG5FTKz;z%QyN-8ab95m3DN1 zToY!?LbTJw7$GKbwEp;R^QBSRG+*l^8#dQ=+nb5b-?QbKE@8e$P521Fs`*d$g?af0 z=Xr%}MAapD*$!`F$43OSmIDwqT3xVC}IrtO3$NBi;J?3X0OD zZK;L5tR{n^g~*vIlFn&`Sv*_7X{d~@{LR0TANdP=%$eykM diff --git a/Engine/__pycache__/Game.cpython-39.pyc b/Engine/__pycache__/Game.cpython-39.pyc index 0ffd955accf814b3cd92fdfa390192ff8a665b38..1ba1685aed3e9a959c8a0dad42a2e34669f6c244 100644 GIT binary patch delta 902 zcmZ`%F>KRN5cRiB;@GiNP@puVi325VT9g74f)EO#YP*z*ln$P7`+q~KBrX@HFt8P= zVnK@j03!$qsbZshHzYc-dqhYGAyy^^?i_@`6kB?Jx_fv2|J{Aae$U#TZJP={H}##n zmA*a7_WM(>9IkM)m2Vf^0#oJ`Zt?VEg{QYw*Ws+LlxvtGdlkkoDAz!Y%`cc&t68@_XO(9%Ey2EiuU)`81Ks#8jtHH6!;E2SewO zeNhQC1elV~l9hsk)YZZ3@Ob<4m|2mZl5;B=WP$QX*vwR0TDHLv9u(8zLYr$k%4~Ry6kH;H(B^{AMR`6N4=nYycHRW<@4kp}y6B z4*}yC>&Z21Vd)HIX|tl$02(jQsDMm`%LG>mt`W=-Q0*U=ie?e*=P)LQ? xLdu++NPoWLre`~iW=B*a_aPc3sSaxt8r8PXdo598sOXZ`Pz_d9)9kNT`w8iMv(f+n delta 884 zcmZvazi-n}5Xb$TU#^`%g-RePXy74G$GS7;vZ|Jk_kNuZzOXCINMU$i16xSlVbkJn=qxpd zTVRhcPu6ur@_qPS?iw0-OPa2?*X?+Z{N^q!;Fe>#z+YAmx*WU?q{QcNZsisUX9+h5 z8AP8!mTY?jm7QFffgb5Hwjhq8g(3w>R+EvoUuy+2>hIRQ=YeD(S$$lb#@IFSEqXq^ zgw{`;5JEsfe2Oh+DU}lj-g3uC<*CeaGC*IJz&vlAV^p_A~bc8Z+>Rc{2Y zQbHttLmouq_OV>6*?p=Qiwf*D(oIEx%go40%>8HFdFdKrl0EiQX*T^sZ^z&Ej)I!_KDAk-8nE+}Gyh*l z_PEaI@I$Y{gBLBaZI%~F1!cmd6UV4-j6Dzov-4PWDW=W}_fg_Rhx0L<4T@DAQ}sWf zlqG^af@)R{mx1V7Ta}ySppjEU19Zbcw*}NsSS36ptP$1;q`i>Orlm?sS9@7pif0pK p<+E^yT(e>|{$m|zYm!PDrKaz88(x`VL}vzJ=msn4adzPi{R8&Qv7!I~ diff --git a/Engine/__pycache__/PathFinder.cpython-39.pyc b/Engine/__pycache__/PathFinder.cpython-39.pyc index 565e51eea9649ddd7e8814850f1a69147ea7cd26..a2cc8d9d865bc19876d0679fa0afba4ad6de49c3 100644 GIT binary patch delta 29 jcmZ24v|flek(ZZ?0SNN`wI%%6$Q#Vc$hbL?^&B$*cP$8E delta 29 jcmZ24v|flek(ZZ?0SGF;v?YAs$Q#Vc$hJr5ncEd8il9y}h5=2mye@4lXOePAkz0%Y zOMgk%o%Rbm3?pqM2!>rofKQ}Jk$jZpaJUaB`uEe9V+QbpoLvdgIYG5=5ELjjhlUlb z35uWzi?HDZXK)58P~jt}@F6H7#dAobpO_CR_tDk)+2^U}7uo65$Dgv(>pb)PD$A!8 zW$a3T&Izi0jZj0u6cmACDtLq#z)jnFZGwssQb6d~9nglPH0m3tw7kK=-7{4#CZEb9MXQW$} zlU4Oinr33!+q!bL?2J1nM(1xwOV>8it*U#y5>_s1Q)c>Rrt7ks^4((P6Cq}L=7iu_ z+Y$ha+5KUkunAW96k8#iwBr+_v4&e@VfN5WSwAZ?^o-rWJshCxlbhO2h#ir#v=i92 z+Jye6Rkxc%tnzoG0ahDz>!g)!Ivw?-wz11JCjMGBwGe(^h^AG`IoSt7d|%3WA2CDf za6~|_x6_M?8)9Z?4aCQikpu}(!tNWj7>rwOoz%`6N-^|57}~Un2