def maus_gedrueckt(self, pyg_event): maus_position = pyg_event.pos if self.mensch: for feld in self.rechteckListe : if feld.punkt_in_rechteck(maus_position)and self.anfang: self.an_feld = feld self.anfang = False elif feld.punkt_in_rechteck(maus_position) and not self.anfang: self.ziel_feld = feld if self.ziel_feld and self.an_feld: moeglich = self.feldObjekt.zug_mit_xy(self.an_feld.x // 50,\ self.brett_spiegeln(self.an_feld.y // 50), \ self.ziel_feld.x // 50,\ self.brett_spiegeln(self.ziel_feld.y // 50), self.weiss) self.feldObjekt.ausgabe() mattObjekt = Matt(deepcopy(self.feldObjekt.spielListe)) if self.weiss: deinKoenig = 32 else: deinKoenig = 31 if mattObjekt.matt(deinKoenig): print("Matt") if moeglich: self.figuren_erstellen_2(self.feldObjekt.feld) self.mensch = False self.weiss = False self.an_feld = None self.ziel_feld = None self.anfang = True
def istMatt(self, figuren, weiss): mattObjekt = Matt(deepcopy(figuren)) if weiss: deinkoenig = 32 else: deinkoenig = 31 if mattObjekt.matt(deinkoenig): return 500 else: return 0
def __init__(self, spielFeld): self.feldMatt = Matt(spielFeld) self.zaehler = 0 self.aktFeld = [] self.aktFeld1zug = [] self.aktFiguren = []
class Computer(object): def __init__(self, spielFeld): self.feldMatt = Matt(spielFeld) self.zaehler = 0 self.aktFeld = [] self.aktFeld1zug = [] self.aktFiguren = [] def zuggenerator(self, feld, figuren, weiss): self.aktFiguren = deepcopy(figuren) self.aktFeld = feld bewListe = [] for figur in figuren: figuren = deepcopy(self.aktFiguren) if figur.zeichen.islower() and not weiss or figur.zeichen.isupper() and weiss: if figuren != self.aktFiguren: figuren = deepcopy(self.aktFiguren) if not figur.geschlagen: for linie in range(8): for reihe in range(8): nummer = figur.nummer feldSicher = self.feldErstellenWert(self.aktFiguren) self.feldVerteilenWert(self.aktFiguren, feldSicher) for figurRichtig in self.aktFiguren: if figurRichtig.nummer == nummer: erg = figurRichtig.zug(linie, reihe) if erg: figur.posXan = linie figur.posYan = reihe figurenKopie = deepcopy(figuren) for figur3 in figurenKopie: if figur3.nummer == nummer: figur3.posXan = linie figur3.posYan = reihe feldKopie = self.feldErstellenWert(figurenKopie) bewertungen = self.bewerten(figurenKopie, weiss,nummer, linie, reihe) bewListe.append(bewertungen) elif erg is None: for figur2 in figuren: if figur2.posXan == linie and figur2.posYan == reihe and figur2.nummer != nummer: figur2.geschlagen = True figur.posXan = linie figur.posYan = reihe feldKopie2 = deepcopy(feld) figurenKopie2 = deepcopy(figuren) feldKopie2 = self.feldErstellenWert(figurenKopie2) figurenKopie2 = self.feldVerteilenWert(figurenKopie2, feldKopie2) bewertungen = self.bewerten(figurenKopie2, weiss, nummer, linie, reihe) bewListe.append(bewertungen) else: pass xBest, yBest, figBest =self.besterZug(bewListe) return xBest, yBest, figBest def tiefe_1(self, figuren, zuege, weiss, bew_tiefe_0): ges_liste=[] a = 0 bew_t1 = deepcopy(bew_tiefe_0) for zug in zuege: figuren_zug, nummer = self.ziehenC(zug[0], zug[1], zug[2], zug[3], deepcopy(figuren)) zug_t1 = self.rechnen(figuren_zug, not weiss) liste_t1 = self.bewerten_2(figuren_zug, zug_t1, not weiss) maximal = 0 for bewertung in liste_t1: if bewertung[0] > maximal: maximal = bewertung[0] bew_t1[a][0] -= maximal a += 1 return bew_t1 def plus(self, x, y): return x + y def istMatt(self, figuren, weiss): mattObjekt = Matt(deepcopy(figuren)) if weiss: deinkoenig = 32 else: deinkoenig = 31 if mattObjekt.matt(deinkoenig): return 500 else: return 0 def feldVerteilenWert(self, figuren, feld): for figur in figuren: figur.spielFeld = feld return figuren def feldErstellenWert(self, figuren): einzel = [] spielFeld = [] for reihe in range(8): einzel = ["O", "O", "O", "O", "O", "O", "O", "O"] spielFeld.append(einzel) for figur in figuren: if not figur.geschlagen: spielFeld[figur.posXan][figur.posYan] = figur.zeichen return spielFeld def besterZug(self, bewertungen): aktmax = -100000 aktindex = 0 print("bewertungen bester zug") print(bewertungen) try: for i,max in enumerate(bewertungen): if max[0] > aktmax: aktmax = max[0] aktindex = i xBest = bewertungen[aktindex][2] yBest = bewertungen[aktindex][3] figBest = bewertungen[aktindex][1] except: pass print("ruegkgabe bester zug") print(xBest,yBest,figBest) return xBest,yBest,figBest def bewerten(self, figuren, weiss, nummer, linie, reihe): bewertungen = [] feld = self.feldErstellenWert(figuren) for figurVerteilen in figuren: figurVerteilen.spielFeld = feld bewertung = 0 if weiss: koenig = 31 deinkoenig = 32 else: koenig = 32 deinkoenig = 31 for figurS in figuren: if figurS.nummer == nummer: figur = figurS schach, varia = self.feldMatt.schlagenWert(figuren, koenig) if schach: bewertung = -1000 bew = [bewertung, nummer, linie, reihe] bewertungen.append(bew) return bew wertVorher = self.stellungWert(self.aktFiguren, weiss) wertDanach = self.stellungWert(figuren, weiss) bewertung += (wertDanach - wertVorher) bewertung += self.gedeckt(figuren, weiss) bewertung += self.zentral(figuren, weiss) matt = self.istMatt(figuren, weiss) bewertung += matt bew = [bewertung, nummer, linie, reihe] bewertungen.append(bew) return bew def zentral(self, figuren, weiss): bewertung = 0 zentrum = [3, 4] erwZentrum = [2, 5] for figur in figuren: if figur.posXan in zentrum and figur.posYan in zentrum: if weiss and figur.zeichen.isupper(): bewertung += 0.3 elif not weiss and figur.zeichen.islower(): bewertung += 0.3 elif figur.posXan in zentrum or figur.posYan in zentrum: if weiss and figur.zeichen.isupper(): bewertung += 0 elif not weiss and figur.zeichen.islower(): bewertung += 0 if figur.posXan in erwZentrum and figur.posYan in erwZentrum and figur.zeichen != "b" and figur.zeichen != "B": if weiss and figur.zeichen.isupper(): bewertung += 0.3 elif not weiss and figur.zeichen.islower(): bewertung += 0.3 return bewertung def ziehenC(self, Xan, Yan, Xzi, Yzi, figuren): for figur in figuren: if figur.posXan == Xan and figur.posYan == Yan: erg = figur.zug(Xzi, Yzi) if erg: figur.posXan = Xzi figur.posYan = Yzi feld = self.feldErstellenWert(figuren) figuren = self.feldVerteilenWert(figuren, feld) return figuren, figur.nummer elif erg is None: for gesch in figuren: if gesch.posXan == Xzi and gesch.posYan == Yzi and not gesch.geschlagen: gesch.geschlagen = True figur.posXan = Xzi figur.posYan= Yzi feld = self.feldErstellenWert(figuren) figuren = self.feldVerteilenWert(figuren, feld) return figuren, figur.nummer return False, False def gedeckt(self, figuren, weiss): #nicht orginalfiguren übergeben #figurenKopie = deepcopy(figuren) if weiss: figDu = figuren[15:30] figIch = figuren[0:15] else: figDu = figuren[0:15] figIch = figuren[15:30] bew = 0 zugliste = [] for figur in figIch: if not figur.geschlagen: xy = [figur.posXan, figur.posYan, figur.zeichen] zugliste.append(xy) for figur in figDu: if not figur.geschlagen: for zug in zugliste: erg = figur.zug(zug[0], zug[1]) if erg is None: bew -= self.zeichenInWert(zug[2]) return bew def bewerten_2(self, figuren, zuege, weiss): bewListe = [] for zug in zuege: figurenKopie = deepcopy(figuren) figurenKopie, nummer = self.ziehenC(zug[0], zug[1], zug[2], zug[3], figurenKopie) bewertung = self.bewerten(figurenKopie, weiss, nummer, zug[2], zug[3]) bewListe.append(bewertung) return bewListe def aufrufFeld(self, figuren, weiss): self.aktFeld = self.feldErstellenWert(figuren) self.aktFiguren = deepcopy(figuren) zuege = self.rechnen(figuren, weiss) bewListe = self.bewerten_2(figuren, zuege, weiss) bewListe_1 = self.tiefe_1(figuren, zuege, weiss, bewListe) xBest, yBest, figBest =self.besterZug(bewListe_1) print(bewListe_1) return xBest, yBest, figBest def rechnen(self,figuren, weiss): zuege = [] for posX in range(8): for posY in range(8): figKopie = deepcopy(figuren) for figur in figuren: if figur.zeichen.isupper() and weiss or figur.zeichen.islower() and not weiss and not figur.geschlagen: erg = figur.zug(posX, posY) if erg: einZug = [figur.posXan, figur.posYan, posX, posY, False] zuege.append(einZug) elif erg is None: einZug = [figur.posXan, figur.posYan, posX, posY, True] zuege.append(einZug) return zuege def stellungWert(self, figuren, weiss): wert = 0 for figur in figuren: if not figur.geschlagen: if weiss: if figur.zeichen.isupper(): wert += self.zeichenInWert(figur.zeichen) else: wert -= self.zeichenInWert(figur.zeichen) else: if figur.zeichen.islower(): wert += self.zeichenInWert(figur.zeichen) else: wert -= self.zeichenInWert(figur.zeichen) return wert def zeichenInWert(self, zeichen): if zeichen == "d" or "D": return 9 elif zeichen == "t" or "T": return 5 elif zeichen == "S" or "s" or "l" or "L": return 3 elif zeichen == "b" or "B": return 1 else: return 0
def mattFeld(self, deinkoenigmatt): mattObjekt = Matt(self.spielListe) mattFeld = mattObjekt.matt(deinkoenigmatt) return mattFeld