# -*- coding: cp1252 -*- from xturtle import * import time # Spielstand ist Liste von Codezahlen (Typ): # 1 = bewegt sich nach rechts, 0 = Leerfeld, -1 = bewegt sich nach links class FrogPlay: def __init__(self,n=2,doplay=True): self.size = 2*n+1 self.start = n*[1]+[0]+n*[-1] # start [1,1,..,1,0,-1,-1,...,-1] self.ziel = self.start[:] self.ziel.reverse() # ziel ist umgedrehter Start self.FERTIG = False self.solve(self.start[:],[]) # löse das Puzzle # Animierte Lösung abspielen if doplay: self.animate(self.start[:],self.solution) # return possible move or None def can_move(self,state,pos): value = state[pos] if value ==0 : return # Verschiebung möglich? pos1 = pos+value if pos1>=0 and pos1=0 and pos2=self.num*2+1: self.frogs[n].blocked() return if self.frogs[n1].typ==0: self.frogs[n].walk() self.frogs[n1].shift(-mytyp) self.frogs[n],self.frogs[n1] = self.frogs[n1],self.frogs[n] else: n2 = n+2*f.typ if n2<0 or n2>=self.num*2+1: self.frogs[n].blocked() return if (self.frogs[n2].typ==0) and self.frogs[n1].typ==-mytyp: self.frogs[n].hop() self.frogs[n2].shift(-2*mytyp) self.frogs[n],self.frogs[n2] = self.frogs[n2],self.frogs[n] else: self.frogs[n].blocked() def animate(self): fplay = FrogPlay(self.num,False) solution = fplay.solution time.sleep(1) self.frogs = self.frogsave[:] for f in self.frogs: f.home() for s in solution: self.move(s) class Frog(Pen): # typ 0,1,-1, step=Feldgröße, pos=ort, id=Nummer def __init__(self,typ,step,pos): Pen.__init__(self) self.typ = typ self.D = step self.pos = -pos*typ self.speed(0) self.tracer(False) self.pu() self.setpos(-typ*step*pos,0) self.homepos = -typ*step*pos # Quadrat zeichnen self.bk(step/2); self.lt(90); self.bk(step/2);self.pd() for i in range(4): self.fd(step) self.rt(90) self.pu();self.fd(step/2); self.rt(90); self.fd(step/2) # Shape setzen if typ==0: self.shape("blank") else: self.resizemode("user") self.turtlesize(2,2) #self.width(2) if typ==-1: self.color("red") self.rt(180) else: self.color("green") self.shape("turtle") self.tracer(True) def home(self): self.speed(0) self.setpos(self.homepos,0) def shift(self,direction): self.speed(0) self.ht() self.fd(self.D*direction) self.st() def walk(self): self.speed(1) self.fd(self.D/3) time.sleep(0.1) self.fd(self.D/3) time.sleep(0.1) self.fd(self.D/3) def hop(self): self.speed(1) self.lt(90*self.typ) self.circle(-self.D*self.typ,180) self.lt(90*self.typ) def blocked(self): self.speed(1) self.fd(self.D/4) time.sleep(0.25) self.bk(self.D/4) f1 = FrogPlay(3) f2 = Frogs_GUI(3) if __name__ == '__main__': f2.animate() time.sleep(2)