Tente de commencer à enseigner à un enfant la programmation avec l'édition de poche Minecraft


Dans la cour, l'automne et le fils restent de plus en plus souvent à la maison, après s'être enfouis dans le téléphone ou la tablette, réagissant faiblement aux irritants externes. Cela m'attriste. J'ai moi-même commencé à programmer, il me semble, à partir du fait que les jeux sont allés sur mon premier ordinateur BK 0010-01 sur les cassettes, mais le magnétophone n'a pas fonctionné. Lors de l'extraction d'un magnétophone avec une sortie linéaire appropriée, j'ai réussi à essayer Basic, grâce à mon père pour les premières leçons. Alors, quand j'ai pu charger le premier jeu graphique avec un grincement, je ne l'ai plus regardé comme ce que je jouerais finalement, mais j'ai pensé avec fascination comment aggraver mon état. Son fils, âgé de 8 ans, a longtemps dévoré le monde des jeux vidéo et YouTube, il semble donc qu'il ne fera pas impression de commencer la programmation avec un trille sur la dynamique intégrée.


Je suis tombé sur des articles sur la programmation avec Minecraft en Python depuis longtemps, puis j'ai réalisé qu'il était temps. Minecraft est l'un de ses jeux préférés et j'ai pensé qu'il serait préférable de commencer avec ce territoire bien développé.


Cependant, après avoir parcouru les informations disponibles dans le domaine public, j'ai réalisé que tout était très difficile. Les livres trouvés " Programmation avec Minecraft. Créez votre monde avec Python " en 2017 et " Minecraft. Programmez votre monde en Python " en 2018 commencent respectivement par l'installation des serveurs Spigot et Bukkit. Il s'est avéré que les clients mobiles qui sont sur android / iphone, ils sont également en édition de poche, ils sont également en édition bedrock, ne fonctionnent pas avec ces serveurs. Vous devez acheter un client pour Windows / Mac, ce qui gâche toute l'entreprise. Premièrement, ce ne sera plus l'environnement «natif» familier au fils. Deuxièmement, le transfert à des fins de programmation dans un autre environnement démontrera peut-être la faiblesse de l'approche, disent-ils, les jeux sont séparés, les programmes sont séparés. Troisièmement, le fils voudra probablement montrer ses expériences à des amis, et ce sont les versions mobiles qui sont populaires auprès des amis. C’est impossible, j’ai décidé, car ces jouets mobiles peuvent se connecter aux serveurs, tout n’est pas perdu. Et j'ai commencé à chercher.


Le premier jour, mon chrome était plein d'onglets et le chaos régnait dans ma tête.
Le premier était le serveur Nukkit open-source, auquel le jeu sur mon Android s'est connecté avec succès. Le seul point ici est que nous avons besoin de la version actuelle du jeu (1.12 pour aujourd'hui), j'ai donc dû la mettre à jour en premier. Le serveur possède de nombreux plugins, mais un plugin adapté à la programmation, tel que décrit dans les livres, n'a pas été trouvé.


Certes, PyPlugins a été trouvé , qui semble lancer Jython, une version de python en java. Mais, si je comprends bien, jython s'est installé sur la version du langage python 2.7. Mettez cette option de côté comme antisportive.


Allons d'un autre côté, mais comment les auteurs des livres ont-ils voulu dire connecter python aux serveurs? Après avoir soigneusement étudié les matériaux supplémentaires pour les livres, car ils sont disponibles gratuitement, j'ai trouvé le plugin RaspberryJuice , soigneusement caché dans le répertoire des plugins (pas un mot à ce sujet dans le livre), il ouvre ensuite une prise réseau en prévision des commandes. Et la bibliothèque python mcpi envoie des commandes . Merci aux auteurs, tous sont open source. Cela m'a un peu dérangé que le dernier commit remonte à 2-4 ans.


Mais comment connecter RaspberryJuice à Nukkit? Et ici, il est recherché, ne riez pas, Pokkit est un plugin Nukkit pour exécuter des plugins pour Bukkit. Je ne sais pas pourquoi les noms sont ainsi, mais cela m'a ajouté une heure supplémentaire de recherche, car au début je les ai confondus. Il semble maintenant que toutes les parties du puzzle soient en place, mais le lancement révèle une erreur: java.lang.NoSuchFieldError: GOLD_SWORD . C'est dommage, car dans la description de Pokkit, il a été noté que RaspberryJuice figure sur la liste des versions prises en charge. Emission d'un bug . Étonnamment, la réponse est venue rapidement - le plugin est obsolète. «Tout est rouillé ici», me vient à l'esprit la phrase de mon film préféré. Après clarification, l'auteur a aimablement expliqué où trouver l' API moderne pour bukkit , puis "nous en quelque sorte en quelque sorte". Plugin obsolète fourchu, a rapidement remplacé toutes les méthodes qui ont disparu dans la version actuelle de l'API, trouvant un remplacement pour elles. Il s'est avéré que quelque chose comme world.getBlockTypeIdAt(loc) changé en world.getBlockAt(loc).getType().getId() . Cependant, un point est toujours significatif: auparavant, il était possible de créer un arc -en- ciel à partir des mêmes blocs (comme dans l'exemple, block.WOOL ), peints de différentes couleurs. Maintenant, il est impossible de repeindre les blocs, vous devez prendre les blocs initialement multicolores ( Material.RED_WOOL , Material.BLUE_CARPET ). A émis une demande d'extraction et a constaté qu'il existe deux autres demandes d'extraction de ce type, toutes deux fraîches. La prochaine fois, cela vaut la peine de le vérifier d'abord ...


Ainsi, les instructions sur la façon de lancer rapidement cette pyramide à partir de Nukkit-Pokkit-RaspberryJuice-mcpi:


  1. Nous prenons un serveur approprié, auquel vous avez accès depuis votre mobile Minecraft s. Par exemple, un ordinateur personnel avec un port ouvert de 19132 (par défaut). C'est plus facile pour moi sur Linux, mais tout système d'exploitation avec environnement d'exécution Java convient.
  2. Serveur Nukkit Téléchargez le fichier JAR recommandé à partir du lien "Téléchargements" ou mvn clean package vôtre à partir de la source ( mvn clean package ). Nous mettons dans un répertoire séparé et java -jar nukkit-1.0-SNAPSHOT.jar simplement java -jar nukkit-1.0-SNAPSHOT.jar .
  3. Plugin Pokkit . Téléchargez le fichier JAR recommandé à partir du lien "Téléchargement et utilisation" ou mvn clean package vôtre à partir de la source ( mvn clean package ). Nous avons mis dans le répertoire des plugins , qui a été formé après l'étape 2. Arrêtez et redémarrez le serveur, comme à l'étape 2.
  4. Plugin RaspberryJuice avec mon patch . Téléchargez le fichier JAR recommandé à partir du lien ou récupérez le vôtre à partir de la source ( pocket-edition , mvn clean package ). Nous avons mis dans le plugins/Pokkit/bukkitPlugins/ , qui a été formé après l'étape 3. Nous arrêtons et redémarrons le serveur.
  5. Nous connectons minecraft mobile au serveur: Lecture - Serveurs - Autres serveurs - ajoutez-en un nouveau ou modifiez celui existant: "nom du serveur" - à votre goût, "adresse du serveur" - adresse IP du serveur à partir de l'étape 1, "port" 19132, si elle n'est pas modifiée dans la configuration . Enregistrez et connectez.
  6. Installez python 3 et la bibliothèque pip3 install --user py3minepi : pip3 install --user py3minepi . Après cela, vous pouvez exécuter les exemples des livres 1 et 2 en entrant simplement python3 Adventure3/dice.py

UPD: à l'étape 6, vous devez installer la bibliothèque mcpi comme ceci: git clone https://github.com/py3minepi/py3minepi.git && cd py3minepi && pip3 install --user . (à la fin le point est nécessaire). Cela est dû au fait que l'auteur du plugin possède la dernière version de python 3.4.


Vous pouvez également essayer sans python (étape 6) en vous connectant au plugin avec l'habituel netcat: nc localhost 19132 et en entrant les commandes manuellement:


  • player.getTile() - les coordonnées du joueur seront retournées au format x, y, z, où l'axe y est dirigé vers le ciel et le plan xz est parallèle à la terre. J'ai 75,-5,-5 ,
  • world.setBlock(75,-6,-5,3) - placez le bloc de terre sous le joueur,
  • world.spawnEntity(75,-4,-5,93) - faire apparaître un poulet sur un joueur.

Mes expériences peuvent être vues dans l'image initiale de ce post.


S'il pleut ou que la nuit tombe et qu'il est difficile à voir, entrez les commandes time set 0 et weather clear dans la console du serveur.


C’est tout. C'est génial qu'il y ait de l'open source et maintenant c'est si simple, en cherchant dans le domaine public, en quelques soirées de construire une telle pyramide de programmes de travail. Je veux surtout noter la convivialité et les réponses presque instantanées dans les chats de nombreux projets.


J'ai également trouvé cette merveilleuse vidéo sur le rendu des conteneurs de serveur docker dans le monde Minecraft:



Il est peu probable que les conteneurs du fils intéressent, mais clignoter avec des LED en réponse à la commutation des commutateurs de dessin animé est la chose. Je me ferai un plaisir de vous conseiller sur quoi d'autre pourrait arriver avec un programme aussi inhabituel pour l'enseignement de la programmation.

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


All Articles