سؤال

أحاول القيام بواجب منزلي لتطبيق Simon Says في لغة بايثون.أحاول القيام بذلك باستخدام مكتبة السلاحف (مطلب).

ومع ذلك، فقد واجهت حجر عثرة لأنه بينما يمكنني الحصول على الشاشة لتسجيل أحداث النقر (حاليًا فقط طباعة إحداثيات x وy) لا يمكنني انتظار حدث النقر.

ما أخطط لفعله على وجه التحديد هو وجود مناطق على الشاشة يتم اعتبارها كما لو أنهم نقروا على زر عند النقر داخل هذا الموقع.يتم مسح الشاشة واللعبة تفعل أي شيء.

ومع ذلك، في التجارب التي جرت لمحاولة الحصول على "زر" فعال، كل ما يفعله هو ضبطه بحيث يطبع إحداثيات x وy لكن بقية البرنامج ينتهي.لم تنتظر حتى ينقر المستخدم على أي شيء.لقد قمت بتجربة طريقة الحظر ...

while clicked == False:
    pass

أو

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

لكن كلتا الطريقتين تعلقان البرنامج حتى أقاطعه يدويًا ثم يقوم بطباعة النقرات.

هل أفتقد خيارًا في مكان ما؟

هل كانت مفيدة؟

المحلول 2

لذلك بعد بحث واسع النطاق، لا توجد بالضرورة طريقة إيقاف تنفيذ التعليمات البرمجية في Python أثناء استخدام السلحفاة لانتظار بعض الحدث انقر.ربما في TK يمكنني أن أفعل ذلك ولكن ليس في سلحفاة.

ومع ذلك، هناك طريقة للتجول في ذلك.كمثال.تقوم طريقة بإعداد الزر المزيف على الشاشة، ويعين الحدث Click، وتينهي.حدث Click عند النقر فوق المكالمات الطريقة التالية اللازمة للتنفيذ.لذلك حتى يتم النقر فوق الزر، لا يقوم الكود الفعلي بأي شيء ولكنه يبقى في الذاكرة للاستخدام.

أكثر تحديدا. 1. إنشاء زر ". 2. هل يتصرف برنامجك بشكل طبيعي حتى يحتاج إلى انتظار الحدث Click. 3. قم بإعداد شاشة على الشاشة (أو على السلحفاة) بحيث يتم النقر فوق "الزر" النقر فوق الجزء التالي من الرمز يتم تشغيله.

ملاحظة خاصة.لا يمكن الاعتماد على التعليمات البرمجية المعنية في انتظار حدث نقرة لاحقا في التعليمات البرمجية.بدلا من ذلك، يؤدي النقر إلى الجزء التالي من تنفيذ التعليمات البرمجية الخاصة بك.

نصائح أخرى

السلاحف ليس لديها أزرار، ولكن لديها ردود اتصال للنقرات.علاوة على ذلك، يجب عليك استخدام onclick ل Screen لاكتشاف النقرات العامة و onclick ل turtle للكشف عن النقر في السلاحف.يمكنك، على سبيل المثال، صنع 4 سلاحف كبيرة بألوان مختلفة باستخدام شكل ديناميكي.

أيضًا، تعتمد السلحفاة على Tk، لذلك يجب أن تكون على دراية بأشياء مثل mainloop()

يقدم البرنامج التالي بعض التلميحات لـ 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()

يمكنك إجراء الوظيفة المسجلة لدى OnClick () اختبار X، Y موضع.إذا كان داخل بعض المنطقة، فأنت تفعل ما يجب عليك.

لا أرى الفرق بين ما تريد القيام به وما يفعله هذا الرمز، هو تعديل موضع السلاحف هو مجرد مثال فقط، يمكنك القيام بأي شيء عند التقاط النقر عند onclick ()، حتى بدء موضوعإذا كنت في حاجة فعلا (باستخدام إنشاء مؤشرات الترابط في Python )

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top