2017-05-13 3 views
0

Ich bin Makin Tic Tac Toe Spiel und ich habe bereits Suche nach, wie man 2 Positionen mit onclick() von Python Turtle erhalten. Die Sache, die ich bekam, ist nur auf diesen Link: Python 3.0 using turtle.onclick. I 2 Positionen zu bekommen, aber ich habe ein Problem mit "turtle.mainloop()" Meine Lösung ist:Holen Sie sich 2 Positionen von onclick() von Python Turtle

def getPosX(x_X, y_X): 

    print("(", x_X, ",", y_X,")") 

def getPosO(x_O, y_O): 

    print("(", x_O, ",", y_O,")" 

def choiceX(): 

     Xplay = turtle.getscreen() 

     Xplay.onclick(getPosX) 

     turtle.mainloop() 

     return Xplay 


def choiceO(): 

     Oplay = turtle.getscreen() 

     Oplay.onclick(getPosO) 

     turtle.mainloop() 

     return Oplay 

Was ich mag es einfach bekam dauert nur die Postion von Xplay.onclick().

Und ich versuche auch die "turtle.mainloop()" jedes def löscht die for-Schleife in einem anderen def zu verwenden:

def play(): 
     for i in range(3): 
      choiceX() 
      choiceO() 
     return i 

und es funktioniert nicht. Ich glaube, ich brauche das bessere Maß Dank

Antwort

0

Ich gehe davon aus, dass Sie möchten, dass Ihre Schildkröte zwischen X und O wechseln klickt, ist, dass zwischen getPosX() und getPosO(). Ich glaube, diese Umlagerung des Codes sollte das tun, was Sie wollen:

import turtle 

def getPosX(x, y): 

    print("X: (", x, ",", y, ")") 

    choiceO() 

def getPosO(x, y): 

    print("O: (", x, ",", y, ")") 

    choiceX() 

def choiceX(): 

    screen.onclick(getPosX) 

def choiceO(): 

    screen.onclick(getPosO) 

screen = turtle.Screen() 

choiceX() # X goes first 

turtle.mainloop() 

Ein Klick auf dem Bildschirm, die ich erhalten:

> python3 test.py 
X: (-206.0 , 178.0) 
O: (224.0 , 31.0) 
X: (-14.0 , -122.0) 
O: (-41.0 , 159.0) 
X: (146.0 , 196.0) 
O: (105.0 , -70.0) 
X: (-100.0 , -114.0) 
O: (-179.0 , 184.0) 
X: (23.0 , 137.0) 

Wenn ich mehr als ein mainloop() Anruf sehen (oder jede mainloop() Anruf nicht an die oberste Ebene noch die letzte Sache im Programm), zeigt es normalerweise ein Missverständnis an, was mainloop() tut.

Sie richten Ihre Event-Handler so ein, dass sie tun, was Sie wollen, und dann die vollständige Kontrolle über mainloop() für den Rest des Programms übernehmen. Es wird dafür sorgen, dass Ihre Event-Handler aufgerufen werden, wenn die Ereignisse von Interesse auftreten.

Verwandte Themen