TikTakToe

Fragen zu Tkinter.
Antworten
andy885
User
Beiträge: 9
Registriert: Samstag 6. März 2010, 19:35

Hi

Was haltet ihr von diesem Code?
Das ist ein kleines TikTakToe. Und ich möchte wissen was ihr von diesem Code haltet und ob alles richtig ist.

mfg Andi

Code: Alles auswählen

import Tkinter
import tkMessageBox

def main():
    global anzahl
    anzahl = -1
    liste = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    def callback():
        a=1

    def who(gewonnen):
        if gewonnen == "x":
            tkMessageBox.showinfo(
                title = "Ende", message = "Spieler1 (x) hat gewonnen.")
            root.destroy()
        elif gewonnen == "o":
            tkMessageBox.showinfo(
                title = "Ende", message = "Spieler2 (o) hat gewonnen.")
            root.destroy()
        else:
            callback()

    def hatgewonnen():
        for x in range(0, 9, 3):
            if liste[x] == liste[x+1]:
                if liste[x+1] == liste[x+2]:
                    gewonnen = liste[x]
                    who(gewonnen)
                    break

        for x in range(0, 3, 1):
            if liste[x] == liste[x+3]:
                if liste[x+3] == liste[x+6]:
                    gewonnen = liste[x]
                    who(gewonnen)
                    break

        if liste[0] == liste[4]:
            if liste[4] == liste[8]:
                gewonnen = liste[0]
                who(gewonnen)

        if liste[2] == liste[4]:
            if liste[4] == liste[6]:
                gewonnen = liste[2]
                who(gewonnen)
            
    def bPressed(x,y,z):
        global anzahl
        anzahl = anzahl + 1
        player = anzahl % 2
        if player == 0:
            liste[z] = "x"
            player = 1
        else:
            player = 0
            liste[z] = "o"
        b = Tkinter.Button(root, text = liste[z], command = callback)
        b.grid(row=x, column=y, ipadx = 10, ipady = 5, padx = 2, pady = 2)
        if anzahl >= 4:
            hatgewonnen()
            
    root = Tkinter.Tk()
    root.title("Tik Tak Toe")
    root.geometry("200x120")

    b1 = Tkinter.Button(root, text = " ", command = lambda:bPressed(0,0,0))
    b1.grid(row=0, column=0, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b2 = Tkinter.Button(root, text = " ", command = lambda:bPressed(0,1,1))
    b2.grid(row=0, column=1, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b3 = Tkinter.Button(root, text = " ", command = lambda:bPressed(0,2,2))
    b3.grid(row=0, column=2, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b4 = Tkinter.Button(root, text = " ", command = lambda:bPressed(1,0,3))
    b4.grid(row=1, column=0, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b5 = Tkinter.Button(root, text = " ", command = lambda:bPressed(1,1,4))
    b5.grid(row=1, column=1, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b6 = Tkinter.Button(root, text = " ", command = lambda:bPressed(1,2,5))
    b6.grid(row=1, column=2, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b7 = Tkinter.Button(root, text = " ", command = lambda:bPressed(2,0,6))
    b7.grid(row=2, column=0, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b8 = Tkinter.Button(root, text = " ", command = lambda:bPressed(2,1,7))
    b8.grid(row=2, column=1, ipadx = 10, ipady = 5, padx = 2, pady = 2)
    b9 = Tkinter.Button(root, text = " ", command = lambda:bPressed(2,2,8))
    b9.grid(row=2, column=2, ipadx = 10, ipady = 5, padx = 2, pady = 2)

    root.mainloop()

if __name__ == "__main__":
    main()
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Das schlimmste ist der Teil mit den Buttons.

Code: Alles auswählen

for i in range(3):
    for e in range(3):
        button = tk.Button(win, text='##', font=('Arial', 15, 'bold'))
        button.grid(row=i, column=e, sticky='s')
        
Die Buttons kannst in du in einer Liste speichern. und auf diese dann zugreifen.

Englisch oder Deutsch. Entscheide dich ;)

anzahl = anzahl + 1
ist das gleiche wie: anzahl += 1

liste = [1, 2, 3, 4, 5, 6, 7, 8, 9]
liste ist ein "aussageloser" Name.
range(1, 10) ist das gleiche wie [1, 2, 3, 4, 5, 6, 7, 8, 9]


Nutze kein global.

Probiere das ganze mal mit OOP.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

Und gleich noch etwas:

Die Verschachtelung mit den ganze if´s:

Code: Alles auswählen

if liste[2] == liste[4]:
            if liste[4] == liste[6]:
du kannst dies auch zusammenführen:

Code: Alles auswählen

if liste[2] == liste[4] and  liste[4] == liste[6]:
und daraus kannst du dann auch gleich das machen:

Code: Alles auswählen

if liste[2] == liste[4] == liste[6]:
Antworten