Exemplo n.º 1
0
    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
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 def __init__(self, spielFeld):
     self.feldMatt = Matt(spielFeld)
     self.zaehler = 0
     self.aktFeld = []
     self.aktFeld1zug = []
     self.aktFiguren = []
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 def mattFeld(self, deinkoenigmatt):
     mattObjekt = Matt(self.spielListe)
     mattFeld = mattObjekt.matt(deinkoenigmatt)
     return mattFeld