Projekt bei Tigerjython Idee mit Code?

1 Antwort

from gamegrid import *
from random import *

class Spielverwaltung(object):
    spielstand = [0,0,0,0,0,0,0,0,0]
    aktiver_spieler = 1

    def naechsterSpieler(self):
        if self.aktiver_spieler == 1:
            self.aktiver_spieler = 2
        else:
            self.aktiver_spieler = 1

    def zellePruefen(self,x,y):
        listenpos = y*3+x
        return self.spielstand[listenpos]

    def setzen (self,x,y,spielernr):
        symbol = Actor("sprites/mark_"+str(spielernr-1)+".gif")
        feld.addActor(symbol,Location(x,y))
        listenpos = y*3+x
        self.spielstand[listenpos] = spielernr

    def gewonnen (self,sn):
        liste = self.spielstand
        g = False
        # waagerecht
        if (liste[0:3] == [sn,sn,sn]) or (liste[3:6] == [sn,sn,sn]) or (liste[6:9] == [sn,sn,sn]):
            g = True
        # senkrecht
        for x in range(0,3):
            if (liste[x]==sn) and (liste[x+3] == sn) and (liste[x+6] == sn):
                g = True
        # diagonal
        if (liste[0]==sn) and (liste[4] == sn) and (liste[8] == sn):
            g = True
        if (liste[2]==sn) and (liste[4] == sn) and (liste[6] == sn):
            g = True
        return g

    def brettVoll(self):
        return not (0 in self.spielstand)

    def zufallsZug(self):
        leer = []
        for x in range(0,9):
            if self.spielstand[x] == 0:
                leer.append(x)
        anzahl = len(leer)
        zufall = randint(0,anzahl-1)
        zelleNr = leer[zufall]
        return zelleNr

    def nrSetzen(self,pos,spielerNr):
        y = pos // 3
        x = pos % 3
        self.setzen(x,y,spielerNr)

    def computerZug(self):
        leer = []
        for x in range(0,9):
            if self.spielstand[x] == 0:
                leer.append(x)
        anzahl = len(leer)
        backup = self.spielstand[:]

        # Gewinnmöglichkeit checken
        for x in range(0,anzahl):
            self.spielstand = backup[:]
            self.spielstand[leer[x]] = 2
            if self.gewonnen(2):
                self.spielstand = backup[:]
                return leer[x]
        # Verliermöglichkeit verhindern
        for x in range(0,anzahl):
            self.spielstand = backup[:]
            self.spielstand[leer[x]] = 1
            if self.gewonnen(1):
                self.spielstand = backup[:]
                return leer[x]
        # Sonst: Zufallszug
        self.spielstand = backup[:]
        return self.zufallsZug()


def mausKlick(ereignis):
    # geklickte Zelle ermitteln:
    zellenPos = feld.toLocationInGrid(ereignis.getX(),ereignis.getY())
    zx = zellenPos.getX()
    zy = zellenPos.getY()
    # Wenn Zelle leer, dann weiter:
    if spiel.zellePruefen(zx,zy) == 0:
        spiel.setzen(zx,zy,spiel.aktiver_spieler)
        if spiel.gewonnen(spiel.aktiver_spieler):
            msgDlg("Der Spieler hat gegen den Computer gewonnen!")
        elif (spiel.brettVoll()):
            msgDlg("Das Spiel ist beendet: Unentschieden!")
        else:
            spiel.aktiver_spieler = 2
            delay(1000)
            spiel.nrSetzen(spiel.computerZug(),2)
            if spiel.gewonnen(spiel.aktiver_spieler):
                msgDlg("Der Computer hat gegen den Spieler gewonnen!")
            elif (spiel.brettVoll()):
                msgDlg("Das Spiel ist beendet: Unentschieden!")
            else:
                spiel.aktiver_spieler = 1


feld = GameGrid(3,3,100,Color.BLACK,False,mouseReleased=mausKlick)
feld.setBgColor(Color.WHITE)
feld.setTitle("Tic Tac Toe")
feld.show()
spiel = Spielverwaltung()

Versuchs mal mit diesem Tic Tac Toe. Ich habe das Programm so programmiert, das der Computer "schlau" ist.

Woher ich das weiß:Hobby