def inverseMovePlayer(self, pgs, pgd, pp, d): np=(pp[0]+self.mx[d], pp[1]+self.my[d]) # Koordinaten Player-Zielfeld if pgs[np[1]][np[0]]!="#": # kein Wall auf dem Player-Zielfeld if hlp.ppackt(np) not in pgd: # und keine Box auf dem Player-Zielfeld bp=hlp.ppack(pp[0]+self.ix[d], pp[1]+self.iy[d]) # Koordinaten Box-Startfeld if bp in pgd: # ziehbare Box am Player-Startfeld pgd.remove(bp) pgd.append(hlp.ppackt(pp)) return((2, np)) else: return((1, np)) return((0, pp))
def isSolved(self, pgs, pgdp, zfl): if len(zfl)>len(pgdp): # es gibt mehr Goal squares als Boxen for i in pgdp: if hlp.punpack(i) not in zfl: return(False) else: # es gibt mehr Boxen als Goal squares oder gleich viele for i in zfl: if hlp.ppackt(i) not in pgdp: return(False) return(True)
def movePlayer(self, pgs, dof, pgdp, pp, d, deadCheck=True): np=(pp[0]+self.mx[d], pp[1]+self.my[d]) # Koordinaten Player-Zielfeld if pgs[np[1]][np[0]]!="#": # kein Wall auf dem Player-Zielfeld if hlp.ppackt(np) not in pgdp: # keine Box auf dem Player-Zielfeld return(1, self.ss[d].lower(), np, (), False) else: # Box auf dem Player-Zielfeld bp=(pp[0]+self.bx[d], pp[1]+self.by[d]) # Koordinaten Box-Zielfeld if pgs[bp[1]][bp[0]]!="#": # kein Wall auf dem Box-Zielfeld if hlp.ppackt(bp) not in pgdp: # keine Box auf dem Box-Zielfeld pgdp.remove(hlp.ppackt(np)) pgdp.append(hlp.ppackt(bp)) # self.areas.findAreas(pgs, pgdp) # self.deadTest.updateDegreeOfFreedom(dof, pgdp) # self.__finalizeDegreeOfFreedom(pgs, dof, pgdp, pp) if deadCheck==True: isdead=self.__isDead(pgs, pgdp, pp, bp, (pp[0]+self.hx[d], pp[1]+self.hy[d])) else: isdead=False # print hlp.unpackMovList(self.findPossiblePushes(pgs, pgdp, np)) return(2, self.ss[d].upper(), np, bp, isdead) return(0, "", pp, (), False)