المشنقة

المشنقة

صعب

التعليمات

نفّذ منطق لعبة Hangman باستخدام البرمجة التفاعلية الوظيفية.

‏Hangman لعبة بسيطة لتخمين الكلمات.

البرمجة التفاعلية الوظيفية طريقة لكتابة البرامج التفاعلية. وهي تختلف عن المنظور المعتاد: فبدلًا من أن تقول «عند الضغط على الزر، زد العدّاد»، تكتب «قيمة العدّاد هي مجموع عدد مرات الضغط على الزر».

نفّذ المنطق الأساسي الكامن وراء لعبة Hangman باستخدام البرمجة التفاعلية الوظيفية. ستحتاج إلى تثبيت مكتبة FRP للقيام بذلك، وسيُشرح هذا في ملفات هذا التمرين الخاصة باللغة والمسار.

أسلوب جديد للتمرين

يرجى تجاهل الجزء المتعلق بمكتبة FRP؛ فالمكتبة الخارجية غير مطلوبة لهذا التمرين. يركّز هذا التمرين على البرمجة القائمة على الأحداث باستخدام الاستدعاءات الراجعة وحلقة الأحداث في Tcl.

يُطلب منك بناء خادم TCP وبروتوكول خاص بالمجال. يُشغَّل هذا الخادم بالكلمة المطلوب تخمينها. وينفّذ نص الاختبار العميل الذي يرسل الأوامر إلى الخادم.

بروتوكول خاص بالمجال

أوامر البروتوكول المطلوب تنفيذها هي:

  • STATUS لإرجاع الحالة الراهنة للعبة. ستكون الاستجابة مصفوفة من ثلاثة عناصر:
    1. عدد التخمينات الخاطئة المتبقية،
    2. الكلمة مقنّعة بشرطات سفلية مكان الحروف غير المخمّنة، و
    3. حقل الحالة (واحد من "ongoing" أو "win" أو "lose")
  • GUESS x حيث x حرف مطلوب تخمينه. سيستجيب الخادم بمصفوفة الحالة بعد كل تخمين.
  • SHUTDOWN لإيقاف الخادم عن بُعد. وإلا فسيُنهي الخادم عمله بعد الفوز أو الخسارة.

ينبغي أن يكون الخادم قادرًا على التعامل مع هذه الأوامر دون التمييز بين الحروف الكبيرة والصغيرة.

أي منفذ يستخدمه الخادم؟

شغّل خادمك باستخدام رقم المنفذ 0: سيعثر Tcl على منفذ غير مستخدم، فلا داعي لتضمين رقم منفذ مباشرةً في نص الاختبار. جميع المفسّرات التي تعمل داخل عملية واحدة (بما فيها الخيوط) تتشارك البيئة نفسها، لذا يمكن للخادم أن يمرّر رقم المنفذ الخاص به إلى نص الاختبار عبر المصفوفة العامة env. ويوجد مثال في ملف hangman.tcl الأوّلي.

تلميحات

ستحتاج إلى أوامر Tcl التالية: socket، fileevent، vwait.

يمكن أن يساعدك برنامج socket النموذجي على البدء.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Tcl Exercism

مستعد لبدء المشنقة؟

سجّل في Exercism لتتعلّم وتتقن Tcl عبر 135 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.