Frage

Ich versuche, eine Hausaufgabe zu machen, um Simon Says in Python zu implementieren.Ich versuche es mit der Turtle-Bibliothek (eine Voraussetzung).

Ich bin jedoch auf einen Stolperstein gestoßen, da ich den Bildschirm zwar dazu bringen kann, Klickereignisse zu registrieren (derzeit werden nur die XY-Koordinaten gedruckt), aber nicht, dass er auf ein Klickereignis wartet.

Was ich insbesondere vorhabe, sind Bereiche auf dem Bildschirm, in denen es so aussieht, als hätten sie auf eine Schaltfläche geklickt, wenn sie innerhalb dieser Stelle klicken.Der Bildschirm wird gelöscht und das Spiel macht alles.

Bei Experimenten, bei denen versucht wird, eine funktionierende „Schaltfläche“ zu erhalten, wird sie jedoch lediglich so eingestellt, dass sie die XY-Koordinaten druckt, der Rest des Programms jedoch beendet wird.Es wurde nicht darauf gewartet, dass der Benutzer auf etwas klickt.Ich habe eine Blockierungsmethode ausprobiert von...

while clicked == False:
    pass

oder

while clicked == False:
    time.sleep(1)

Aber bei beiden Methoden bleibt das Programm hängen, bis ich es manuell unterbreche, und dann werden die Klicks gedruckt.

Übersehe ich irgendwo eine Option?

War es hilfreich?

Lösung 2

Nach umfangreicher Suche ist nicht unbedingt eine Möglichkeit, die Ausführung des Codes in Python in Python in Python anzuhalten, während die Turtle verwendet wird, um auf einige Klickereignisse zu warten.Vielleicht könnte ich das in TK tun, aber nicht in der Schildkröte.

Es gibt jedoch einen Weg, um das zu erreichen.Als Beispiel.Eine Methode richtet die Fake-Taste auf dem Bildschirm auf, setzt das Klickereignis und endet.Klicken Sie auf das Klicken auf Ereignis, wenn Sie auf klicken, die nächste für die Ausführung erforderliche Methode anruft.Wenn Sie also auf die Schaltfläche klicken, tut der tatsächliche Code nichts anderes, bleibt jedoch im Speicher zur Verwendung.

so genauer. 1. Erstellen Sie eine 'Button'. 2. Haben Sie Ihr Programm normal verhalten, bis er auf ein Klickereignis warten muss. 3. Richten Sie den Bildschirm auf dem Bildschirm auf (oder auf die Schildkröte) so, wenn auf den nächsten Teil des Codes auf den nächsten Teil des Code geklickt wird.

Sondernote.Der fragliche Kodex kann nicht darauf abhängen, dass ein Klickereignis später für den späteren Code wartet.Stattdessen verursacht der Klick den nächsten Teil der Ausführung Ihres Codes.

Andere Tipps

Schildkröten haben keine Schaltflächen, aber Rückrufe für Klicks.Darüber hinaus sollten Sie verwenden onclick für Screen um allgemeine Klicks zu erkennen und onclick für turtle um klickende Schildkröten zu erkennen.Sie können beispielsweise vier große Schildkröten in verschiedenen Farben erstellen, indem Sie eine dynamische Form verwenden.

Außerdem basiert Turtle auf Tk, daher müssen Sie sich über Dinge im Klaren sein wie mainloop()

Das folgende Programm gibt einige Hinweise für Python 2.7.5.

import turtle as t
from random import randint

class MyTurtle(t.Turtle) :

    def __init__(self,**args) :
        t.Turtle.__init__(self,**args)

    def mygoto(self,x,y) :
        t1.goto(x,y)
        print x,y

    def randonics(self,x,y) :
        self.left(randint(90,270))

def minegoto(x,y) :
    print x,y
    t1.goto(x,y)

wt=t.Screen()
t1=MyTurtle()
wt.register_shape("big",((0,0),(30,0),(30,30),(0,30)))
t1.shape("big")
wt.onclick(t1.mygoto,btn=1)
wt.onclick(minegoto,btn=2)
t1.onclick(t1.randonics,btn=3)
t1.goto(100,100)

t.mainloop()

Sie können die mit ONClick () registrierte Funktionen mit der Position X, Y registrieren.Wenn es in einiger Region ist, tun Sie alles, was Sie müssen.

Ich sehe den Unterschied nicht zwischen dem, was Sie tun möchten, und was dieser Code tut, ist der Modifikation der Schildkrötenposition nur ein Beispiel, Sie können alles tun, wenn ein Klick von OnClick () aufgenommen wird, sogar einen Thread beginnenWenn Sie es wirklich brauchen (mit Threads in Python erstellen)

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top