Seite 1 von 1

Ein paar fragen

Verfasst: Montag 25. Oktober 2010, 16:44
von CodeMaster
Guten tag, ich haätte dal mal ein paar fragen und zwar
will ich mich mit python auseinandersetzen und jetzt versuchen ein kleines Minispiel zu machen, das nicht all zu schwer sein sollte.
Und zwar möchte ich ein Tic Tac Toe machen.
1. Wie kann man das am besten darstellen? Weil der gedanke es mit strings zu machen, wäre sehr kompliziert, meines wissens jedenfals

da das bisher meine entscheidenste frage ist, stelle ich die anderen fragen erst danach :)

MfG

Re: Ein paar fragen

Verfasst: Montag 25. Oktober 2010, 17:17
von sma
Starte mit dem Tutorial. Das gibt es auch auf deutsch. Überlege dir dann, wie Tic Tac Toe funktioniert. Schreib es dir auf oder sag es dir laut vor. Das hat erst mal gar nichts mit Python zu tun. Implementiere zunächst die Spiellogik. Erst danach würde ich mir über die Darstellung Gedanken machen. 9 Felder können jeweils X, O oder nix enthalten. Eine Liste ist eine prima Repräsentation für das Spielfeld. Wie kann man hier Werte lesen und setzen? Überlege dann, wie man prüfen kann, ob ein Spieler gewonnen hat. 8 verschiedene Kombinationen sind zu prüfen. Dann brauchst du nur noch eine Schleife, in der du pro Spieler nach einem Feld fragst, wo er ein X oder O setzen will und wo du prüfst, ob der Spieler gewonnen hat.

Anbei eine quick'n'dirty Umsetzung, von der ich nicht erwarten würde, dass sie einem Anfänger verständlich ist, da ich absichtlich ein paar der eher fortgeschrittenen Features eingebaut habe, nur so als Ansporn :)

Code: Alles auswählen

class TicTacToe:
    def __init__(self):
        self.fields = [0] * 9
    
    def __getitem__(self, index):
        return self.fields[index[0] + index[1] * 3]
    
    def __setitem__(self, index, value):
        self.fields[index[0] + index[1] * 3] = value
    
    def __str__(self):
        return "\n  1 2 3\n1 %s|%s|%s\n  -+-+-\n2 %s|%s|%s\n  -+-+-\n3 %s|%s|%s\n" % \
            tuple(" XO"[i] for i in self.fields)
    
    def has_won(self, p):
        return any(all(self.fields[i] == p for i in indexes) for indexes in 
            ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6)))

def ask(prompt):
    while True:
        try: n = int(input(prompt)) - 1
        except ValueError: continue
        if 0 <= n < 3: return n

t = TicTacToe()
p = 1
for _ in range(9):
    print(t)
    print("Your turn, player", p)
    t[ask("x?"), ask("y?")] = p
    if t.has_won(p):
        print("You have won!")
        break
    p = 3 - p
else:
    print("Draw!")
Stefan

Re: Ein paar fragen

Verfasst: Montag 25. Oktober 2010, 17:21
von Hyperion
CodeMaster hat geschrieben:Guten tag, ich haätte dal mal ein paar fragen und zwar
will ich mich mit python auseinandersetzen und jetzt versuchen ein kleines Minispiel zu machen, das nicht all zu schwer sein sollte.
Und zwar möchte ich ein Tic Tac Toe machen.
Prinzipiell eine sehr gute Idee!
CodeMaster hat geschrieben: 1. Wie kann man das am besten darstellen? Weil der gedanke es mit strings zu machen, wäre sehr kompliziert, meines wissens jedenfals
"Strings" sind eine Datenstruktur und haben zunächst einmal nichts mit der Darstellung zu tun! Du musst Dir zuerst einmal eine gute Datenstruktur einfallen lassen, in der Du Dir die 9 Felder merkst zusammen mit deren Zustand (frei, belegt von Spieler 1 oder 2).

Das ganze kannst Du dann entsprechend darstellen; zu Beginn am besten in Textform in einer Shell - später kannst Du dann ggf. noch eine "echte" GUI drum herum bauen. War das Deine eigentliche Frage?

Als erstes solltest Du jedoch ein Tutorial durcharbeiten, um die Grundlagen zu lernen. Dazu empfiehlt es sich, dass offizielle zu nehmen (direkt in der Doku) oder zusätzlich noch andere Einsteigerlehrfäden, wie etwa "A Byte of Python" oder "Dive into Python". Mehr dazu findest Du auch im wiki: http://wiki.python-forum.de/FAQ#WieFang ... nsteigerAn

Edit: Mist, sma war schneller ;-)

@sma: Interessant ist auch der Ansatz, die Felder mit "1" und "4" zu belegen. Damit kann man mittels sum() auf eine erfolgreiche Reihe testen - Deine Lösung sieht aber auch gut aus :-)

Re: Ein paar fragen

Verfasst: Montag 25. Oktober 2010, 17:39
von numerix
Falls jemand gerade nicht weiß, was er mit seiner Zeit anfangen soll:
https://www.spoj.pl/problems/TOE1
https://www.spoj.pl/problems/TOE2