محاولات للبدء في تدريس البرمجة الفرعية باستخدام إصدار جيب Minecraft


في الفناء ، يظل الخريف والابن أكثر فأكثر في المنزل ، بعد أن دفنوا في الهاتف أو الجهاز اللوحي ، وكان رد فعلهم ضعيفًا على المواد المهيجة الخارجية. هذا يحزنني. لقد بدأت أنا نفسي في البرنامج ، كما يبدو لي ، من حقيقة أن الألعاب ذهبت إلى جهاز الكمبيوتر الأول BK 0010-01 على الكاسيت ، لكن مسجل الشريط لم يذهب. أثناء تعدين مسجل الشريط بإخراج خطي مناسب ، تمكنت من تجربة Basic ، بفضل والدي على الدروس الأولى. لذلك ، عندما تمكنت من تحميل أول لعبة رسومية مع صرير ، لم أكن أنظر إليها على أنها ما كنت سألعبه في النهاية ، ولكني فكرت بفتور في كيفية جعلني أسوأ. ابنه ، البالغ من العمر 8 سنوات ، التهم منذ فترة طويلة عالم ألعاب الفيديو ويوتيوب ، لذلك يبدو أنه لن يخلق انطباعًا عن بدء البرمجة بتدريج على الديناميات المدمجة.


لقد صادفت مقالات حول البرمجة مع Minecraft في Python لفترة طويلة وبعد ذلك أدركت أن الوقت قد حان. Minecraft هي إحدى ألعابه المفضلة واعتقدت أنه من الأفضل أن تبدأ هذه الأرض المتطورة.


ومع ذلك ، بعد تشغيل المعلومات المتوفرة في المجال العام ، أدركت أن كل شيء صعب للغاية. الكتب التي تم العثور عليها " برمجة مع Minecraft. ابتكر عالمك مع Python " في عام 2017 و " Minecraft. برنامج عالمك في Python " في عام 2018 ، ابدأ بتثبيت خوادم Spigot و Bukkit ، على التوالي. اتضح أن عملاء الأجهزة المحمولة التي تعمل بنظام أندرويد / آي فون ، هم أيضًا إصدار جيب ، وهم أيضًا إصدار أساسي ، لا يعملون مع هذه الخوادم. تحتاج إلى شراء عميل لنظام التشغيل Windows / Mac ، والذي يفسد المشروع بالكامل. أولاً ، لن تكون البيئة "الأصلية" مألوفة لدى الابن. ثانياً ، النقل من أجل البرمجة إلى بيئة أخرى سيظهر ضعفًا ، ربما ، من حيث الأسلوب ، يقولون إن الألعاب منفصلة ، البرامج منفصلة. ثالثًا ، ربما يرغب الابن في إظهار تجاربه للأصدقاء ، وهي إصدارات للهواتف المحمولة شائعة لدى الأصدقاء. قررت أنه من المستحيل ، نظرًا لأن ألعاب الهاتف المحمول هذه يمكنها الاتصال بالخوادم ، فلا يتم فقد كل شيء. وبدأت في البحث.


في اليوم الأول ، كان كرومي ممتلئًا بالعلامات ، وسادت الفوضى في رأسي.
أولها كان خادم Nukkit مفتوح المصدر ، والذي تم توصيل اللعبة بهاتف Android الخاص بي بنجاح كبير. النقطة الوحيدة هنا هي أننا نحتاج إلى الإصدار الحالي من اللعبة (1.12 لهذا اليوم) ، لذلك كنت بحاجة إلى تحديثه أولاً. يحتوي الخادم على العديد من المكونات الإضافية ، ولكن لم يتم العثور على مكون إضافي مناسب للبرمجة ، كما هو موضح في الكتب.


صحيح ، تم العثور على PyPlugins ، والذي يبدو أنه يطلق Jython ، نسخة من python في java. ولكن ، كما أفهمها ، استقر jython على إصدار لغة python 2.7. ضع هذا الخيار جانباً على أنه غير رياضي.


دعنا نذهب من ناحية أخرى ، ولكن كيف يعني مؤلفو الكتب ربط الثعبان بالخوادم؟ بعد أن درست بعناية مواد إضافية للكتب ، نظرًا لأنها متوفرة مجانًا ، وجدت المكون الإضافي RaspberryJuice ، مخفيًا بعناية في دليل الإضافات (وليس كلمة حوله في الكتاب) ، ثم يفتح مأخذ توصيل شبكة تحسبا للأوامر. وترسل مكتبة بايثون مكبي الأوامر . شكرا للمؤلفين ، كلها مفتوحة المصدر. لقد أزعجني قليلاً أن الالتزام الأخير كان منذ 2-4 سنوات.


ولكن كيف يتم توصيل RaspberryJuice بـ Nukkit؟ وهنا يتم البحث فيه ، لا تضحك ، Pokkit هو مكون إضافي من Nukkit لتشغيل المكونات الإضافية لـ Bukkit. لا أعلم سبب وجود الأسماء ، لكنها أضافت لي ساعة إضافية من البحث ، لأنني في البداية أربكتهم. يبدو أن جميع أجزاء اللغز في مكانها java.lang.NoSuchFieldError: GOLD_SWORD ، لكن عملية الإطلاق تكشف عن خطأ: java.lang.NoSuchFieldError: GOLD_SWORD . إنه لأمر مخز ، لأنه في وصف Pokkit لوحظ أن RaspberryJuice مدرج في قائمة المدعومة. أصدر خطأ . والمثير للدهشة أن الإجابة جاءت بسرعة - المكون الإضافي قديم. "كل شيء صدئ هنا" ، جاءت عبارة من فيلمي المفضل إلى الذهن. بعد التوضيح ، أوضح المؤلف بلطف أين يمكن الحصول على واجهة برمجة التطبيقات الحديثة لـ bukkit ، ثم "نحن بطريقة ما بطريقة ما". المكوّن الإضافي القديم المتشعب ، استبدل بسرعة جميع الأساليب التي اختفت في الإصدار الحالي من واجهة برمجة التطبيقات ، وإيجاد بديل لها. اتضح تغيير شيء مثل world.getBlockTypeIdAt(loc) إلى world.getBlockAt(loc).getType().getId() . ومع ذلك ، لا تزال هناك نقطة مهمة: في وقت سابق كان من الممكن إنشاء قوس قزح من نفس الكتل (كما في المثال ، block.WOOL ) ، مطلية بألوان مختلفة. الآن أصبح من المستحيل إعادة رسم الكتل ، يجب أن تأخذ الكتل متعددة الألوان في البداية ( Material.RED_WOOL ، Material.BLUE_CARPET ). أصدر طلب سحب ووجد أنه يوجد طلبان آخران للسحب ، كلاهما جديد. في المرة القادمة يستحق التحقق من ذلك أولاً ...


لذلك ، تعليمات حول كيفية إطلاق هذا الهرم بسرعة من Nukkit-Pokkit-RaspberryJuice-mcpi:


  1. نحن نأخذ خادمًا مناسبًا يمكن الوصول إليه من Minecraft على هاتفك المحمول. على سبيل المثال ، كمبيوتر المنزل مع منفذ مفتوح من 19132 (الافتراضي). الأمر أسهل بالنسبة لي على نظام التشغيل Linux ، ولكن أي نظام تشغيل مزود ببيئة تشغيل java مناسب.
  2. خادم نوكيت قم بتنزيل JAR الموصى به من رابط "التنزيلات" أو قم ببناء ملفك الخاص من المصدر ( mvn clean package ). نضع في دليل منفصل وتشغيل java -jar nukkit-1.0-SNAPSHOT.jar .
  3. Pokkit المساعد. قم بتنزيل JAR الموصى به من رابط "التنزيل والاستخدام" أو قم ببناء ملفك الخاص من المصدر ( mvn clean package ). نضع في دليل plugins ، التي تشكلت بعد الخطوة 2. إيقاف وإعادة تشغيل الخادم ، كما في الخطوة 2.
  4. RaspberryJuice المساعد مع بلدي التصحيح . قم بتنزيل JAR الموصى به من الرابط أو قم بتجميع معلوماتك الخاصة من المصدر (فرع pocket-edition ، mvn clean package ). نضع في plugins/Pokkit/bukkitPlugins/ ، التي تم تشكيلها بعد الخطوة 3. نتوقف عن إعادة تشغيل الخادم.
  5. نقوم بتوصيل ماين كرافت المحمول بالخادم: تشغيل - خوادم - خوادم أخرى - إضافة واحدة جديدة أو تحرير واحد موجود: "اسم الخادم" - حسب ذوقك ، "عنوان الخادم" - عنوان IP للخادم من الخطوة 1 ، "المنفذ" 19132 ، إذا لم يتم تغييره في التهيئة . حفظ والاتصال.
  6. قم بتثبيت python 3 ومكتبة pip3 install --user py3minepi : pip3 install --user py3minepi . بعد ذلك ، يمكنك تشغيل الأمثلة من الكتب 1 و 2 بمجرد إدخال python3 Adventure3/dice.py

محدث: في الخطوة 6 ، تحتاج إلى تثبيت مكتبة mcpi مثل هذا: git clone https://github.com/py3minepi/py3minepi.git && cd py3minepi && pip3 install --user . (في النهاية هناك حاجة إلى نقطة). هذا يرجع إلى حقيقة أن مؤلف البرنامج المساعد لديه أحدث إصدار من بيثون 3.4.


يمكنك تجربة دون python (الخطوة 6) عن طريق الاتصال بالمكون الإضافي باستخدام netcat المعتاد: nc localhost 19132 وإدخال الأوامر يدويًا:


  • player.getTile() - سيتم إرجاع إحداثيات اللاعب بالتنسيق x و y و z ، حيث يتم توجيه المحور ص إلى السماء وتكون الطائرة xz موازية للأرض. حصلت على 75,-5,-5 ،
  • world.setBlock(75,-6,-5,3) - قم بتعيين كتلة الأوساخ أسفل المشغل ،
  • world.spawnEntity(75,-4,-5,93) - تفرخ الدجاج على لاعب.

يمكن رؤية تجاربي في الصورة الأولية لهذا المنشور.


إذا هطل المطر أو الليل ، وكان من الصعب رؤيته ، فقم بإدخال time set 0 للأوامر time set 0 weather clear في وحدة تحكم الخادم.


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


لقد عثرت أيضًا على هذا الفيديو الرائع حول تقديم حاويات خادم docker في عالم Minecraft:



من غير المرجح أن تثير اهتمام حاويات الابن ، ولكن أن تكون المصابيح الوامضة رداً على تبديل مفاتيح الرسوم المتحركة أمرًا مهمًا. سأكون سعيدًا بتقديم النصح حول أي شيء آخر سيأتي بمثل هذا الإجراء غير العادي لتدريس البرمجة.

Source: https://habr.com/ru/post/ar472614/


All Articles