-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautomat.py
88 lines (83 loc) · 4.39 KB
/
automat.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from stellung import muehle, setzen, ziehen
from connected import connected
class automat():
def __init__(self, depth, farbe):
self.farbe=farbe
self.depth=depth
def zug(self, muehle):
muehlen=[]
if muehle.phase==1:
for feld in range(1,25):
if muehle.steine[feld]==0:
if muehle.zuege>0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==self.farbe*(-1):
neu = setzen(muehle,feld,nehmen)
if neu != False :
muehlen.append([self.calc(neu,self.depth-1,self.farbe*(-1)),feld,nehmen])
for objekt in muehlen:
if not objekt[0]:
muehlen.remove(objekt)
muehlen = sorted(muehlen, key=lambda muehle: muehle[0].wert )
if self.farbe==1:
return setzen(muehle,muehlen[len(muehlen)-1][1],muehlen[len(muehlen)-1][2], True)
elif self.farbe==-1:
return setzen(muehle,muehlen[0][1],muehlen[0][2],True)
elif muehle.phase==2:
for con in connected:
if muehle.steine[con[0]]==self.farbe and muehle.steine[con[1]]==0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==self.farbe*(-1):
neu = ziehen(muehle,con[0],con[1],nehmen)
if neu!=False:
muehlen.append([self.calc(neu,self.depth-1,self.farbe*(-1)),con[0],con[1],nehmen])
if muehle.steine[con[1]]==self.farbe and muehle.steine[con[0]]==0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==self.farbe*(-1):
neu = ziehen(muehle,con[1],con[0],nehmen)
if neu!= False:
muehlen.append([self.calc(neu,self.depth-1,self.farbe*(-1)),con[1],con[0],nehmen])
for objekt in muehlen:
if not objekt[0]:
muehlen.remove(objekt)
muehlen = sorted(muehlen, key=lambda muehle: muehle[0].wert )
if self.farbe==1:
return ziehen(muehle,muehlen[len(muehlen)-1][1],muehlen[len(muehlen)-1][2],muehlen[len(muehlen)-1][3], True)
elif self.farbe==-1:
return ziehen(muehle,muehlen[0][1],muehlen[0][2],muehlen[0][3], True)
def calc(self, muehle, i, farbe):
if i== 0:
return muehle
elif i>0:
muehlen=[]
if muehle !=False:
if muehle.phase==1:
for feld in range(1,25):
if muehle.steine[feld]==0:
if muehle.zuege>0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==farbe*(-1):
neu = setzen(muehle,feld,nehmen)
if neu !=False:
muehlen.append(self.calc(neu,i-1,farbe*(-1)))
elif muehle.phase==2:
for con in connected:
if muehle.steine[con[0]]==farbe and muehle.steine[con[1]]==0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==farbe*(-1):
neu = ziehen(muehle,con[0],con[1],nehmen)
if neu != False:
muehlen.append(self.calc(neu,i-1,farbe*(-1)))
if muehle.steine[con[1]]==farbe and muehle.steine[con[0]]==0:
for nehmen in range(1,25):
if muehle.steine[nehmen]==farbe*(-1):
neu = ziehen(muehle,con[1],con[0],nehmen)
if neu!= False:
muehlen.append(self.calc(neu,i-1,farbe*(-1)))
muehlen = filter(None, muehlen) #returns filter object
muehlen = sorted(muehlen, key=lambda muehle: muehle.wert ) # returns list
if muehlen:
if farbe==1:
return muehlen[len(muehlen)-1]
elif farbe==-1:
return muehlen[0]