Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Actualités


Index du Forum » Actualités » Concours de rentrée 2022 : Maîtrisez Pykaster3D !
Lephenixnoir Hors ligne Administrateur Points: 22610 Défis: 149 Message

Concours de rentrée 2022 : Maîtrisez Pykaster3D !

Posté le 22/09/2022 00:56

Mettez-vous à l'aise et branchez vos neurones, c'est de nouveau cette époque de l'année. Le concours de rentrée de TI-Planet et Planète Casio est de retour pour la 6ème année consécutive, avec un nouveau défi calculo-ludique et de nouveaux prix à décrocher !

Le concours de rentrée est ouvert jusqu'au Dimanche 13 Novembre 23h59.


Les captures d'écran ne mentent pas : Critor nous a bel et bien programmé un moteur 3D mi-Wolfenstein mi-DOOM en Python, dans lequel vous explorerez une grande arène fortifiée. Comme tu vas le voir, il tourne d'ailleurs sur la Graph 90+E et Graph 35+E II ! ... lentement, mais il tourne. :P

Article associé sur TI-Planet : Concours Python 2022 - Pykaster3D «attrape-les toutes» !

Principe et règles du jeu

L'unique défi de cette année nous ramène dans le royaume d'Alrys que vous avez libéré l'an dernier. À l'époque, le donjon du Cirque des Monts Pleureurs avait déjà fait parler de lui. Les nouvelles sont arrivées il y a quelques jours d'une infestation inquiétante dans le donjon de la presqu'île de Farfalie. Il semblerait que des souris électriques d'une espèce complètement inconnue se sont emparées des lieux.

Le donjon est composé de trois sections concentriques. D'abord, les catacombes, qui cachent une entrée secrète et furent le principal obstacle à franchir durant la reconquête d'Alrys :


Une fois le hall passé, se trouve un labyrinthe réparti sur 3 niveaux :


Et enfin une passerelle suspendue mène au coeur du donjon, où se sont installées les locataires indûs.


Le but du jeu est de traquer les souris et de les attraper toutes... au bon moment. D'après les rapports du terrain, le qualificatif «électrique» n'est vraiment pas là pour décorer, et certaines souris décochent de sacrées décharges.

Comme les années précédentes, le jeu peut se jouer de deux façons différentes : au clavier (pour tester), et en préprogrammant une série d'actions dans le script (pour la soumission finale). Les contrôles au clavier sont les suivants :

  • Avancer (#0, touche [↑]) et reculer (#2, touche [↓])
  • Tourner à gauche (#5, touche [←]) ou à droite (#6, touche [→])
  • Se décaler sur la droite (#1, touche [6]) ou sur la gauche (#3, touche [4])
  • Ne rien faire (#4, touche [5])
  • Sauter (#7, touche Entrée)

Le numéro correspondant à chaque peut être utilisé pour effectuer cette action dans le script. Note que dans le script les actions prennent des paramètres, ce qui les rend beaucoup plus polyvalentes que le clavier. Par exemple, le script préchargé dans pyka3d.py effectue les actions suivantes :

liste_actions = [
  # Attendre 5 tours
  4, 5,
  # Tourner 5 fois à droite de π/8 radians (22.5°)
  6, 0.39269908169872414,
  6, 0.39269908169872414,
  6, 0.39269908169872414,
  6, 0.39269908169872414,
  6, 0.39269908169872414,
  # Tourner 6 fois à gauche de π/8 radians (22.5°)
  5, 0.39269908169872414,
  5, 0.39269908169872414,
  5, 0.39269908169872414,
  5, 0.39269908169872414,
  5, 0.39269908169872414,
  5, 0.39269908169872414,
  # Avancer 77 fois de 1 pas
  0, 77,
  # Tourner à gauche de π/8 radians (22.5°)
  5, 0.39269908169872414,
  # Avancer 121 fois de 1 pas
  0, 121,
]

C'est une transcription directe d'une saisie au clavier, mais en ajustant les angles quand on tourne et les pas quand on se déplace il serait possible d'atteindre la même position beaucoup plus efficacement.

De façon générale, pyka3d.py fonctionne de la façon suivante :

  1. Il exécute toutes les actions données dans liste_actions.
  2. Ensuite il te donne la main pour continuer à jouer sur le clavier.
  3. Une fois la partie finie, il affiche une liste correspondant aux actions jouées au clavier, qui peut donc être copiée/collée et ajoutée à la fin de liste_actions.

Tout ceci se produit par l'appel jouer_selon(liste_actions,1). Pour éviter que l'affichage 3D (qui prend la majorité du temps) ne soit trop répétitif, tu peux appeler jouer_selon(liste_actions,0) à la place, qui ne démarre l'affichage que quand le contrôle est donné au clavier (après l'exécution de liste_actions).

Précisons les contrôles disponibles dans le script :

  • Les actions pour avancer, reculer, et se décaler acceptent comme paramètre des distances entre -1 et 1, valeurs décimales comprises (au lieu de juste 1 au clavier) ;
  • Les actions pour tourner acceptent n'importe quelle angle, y compris des tours complets (au lieu de juste 22.5° au clavier) ;
  • L'action de saut accepte une hauteur de saut entre 0 et 1 (au lieu de juste 1 au clavier).

Le but du jeu est donc d'utiliser ces contrôles pour attraper les souris. Le joueur comme les souris ont un niveau, qui décide des interactions :

  • Les souris de niveau inférieur à celui du joueur sont affichées petites et jaunes ; il suffit de les toucher pour les attraper, ce qui augmente un peu le score et augmente le niveau du joueur.
  • Les souris de niveau supérieur à celui du joueur sont affichées grandes et rouges ; touchez-les à vos risques et périls. Les décharges réduisent le score !
  • Le niveau du joueur influence également sa vitesse de déplacement et ses prouesses physiques... et donc sa capacité à atteindre différentes zones du donjon.




Les souris ont tendance à fusionner quand elles se recontrent... ou quand le joueur active une des 5 dalles cachées dans le donjon ; étant difficiles à trouver ces dalles n'ont pas été désamorcées durant le raid de l'an dernier.

Réfléchissons donc à la stratégie. Il te faut attraper un maximum de souris, vite de préférence, mais il faut aussi les attraper quand elles sont d'un niveau élevé (cela augmente plus le score) sans pour autant perdre le contrôle de la population, sous peine d'être choqué·e par le résultat.

Dors bien en pensant à ce problème... :3

Prenons un instant pour apprécier l'exploit technique des scripts, qui avec environ 80-100 ko de stockage et 100 ko de mémoire de travail parviennent à simuler un environnement riche en couleurs et parfois même en textures, sur une map grande de 64x29 cases avec des effets graphiques à faire rougir la compétition.

Aperçu des lots de l'année

Les lots de cette année sont bénévolement offerts par Calcuso, Casio, TI, cent20, avec des goodies de Parisse, TI-Planet et Planète Casio. Les prix sont très fournis surtout côté goodies ; je vous fais un résumé ici, pour les détails voyez l'annonce sur TI-Planet.

6 lots Graph 90+E : Calculatrice Graph 90+E + packs de goodies Casio, Xcas, et TIP/PC
4 lots Casio : Clé USB d'émulation Casio + 1 coque collector Casio + packs de goodies Casio, Xcas, et TIP/PC
2 lots N0120EX : Calculatrice Numworks N0120EX + packs de goodies Numworks, Xcas et TIP/PC
7 lots Numworks : Coque collector Numworks + Autocollant Numworks + packs de goodies Numworks, Xcas et TIP/PC
6 lots CX2CAS : Calculatrice TI-Nspire CX II-T CAS avec licence logicielle + packs de goodies TI, Xcas, et TIP/PC
2 lots Calculso : Calculatrice TI-83 Premium CE Édition Python garantie 6 ans avec gravure de texte laser + émulateur TI-SmartView CE + chargeur mural + housse et film de protection Wyngs + livret de prise en main et cahier d'activités + packs de goodies TI et TIP/PC
2 lots 83PCE : Calculatrice TI-83 Premier CE Édition Python + émulateur TI-SmartView CE + film de protection Wyngs + livret de prise en main et cahier d'activités + 2 cahiers d'activités TI + packs de goodies TI et TIP/PC

Soit un total de 29 lots pour récompenser les meilleurs scores à la chasse aux souris. Avec ça n'allez pas dire que vous n'aspirez pas à être le meilleur dress- euh, chasseur. Chasseur.

Comme les années précédentes, les lots seront choisis par les participants par ordre décroissant de score. Un lot est également réservé au meilleur groupe (voir ci-dessous pour les règles des groupes) ; ce lot sera sélectionné par le premier membre du groupe à choisir.

Comment jouer à Pykaster3D

Grâce à la dernière version de la bibliothèque polycal5.py, Pykaster3D fonctionne sur 12 environnements Python :

  • Graph 35+E II, fx-9750G III, fx-9860G III
  • Graph 90+E, 90+E avec KhiCAS, fx-CG 50, fx-CG 50 avec KhiCAS
  • HP Prime
  • Numworks avec Khi et KhiCAS
  • TI-Nspire CX II, CS II avec Ndless et KhiCAS, et CX avec Ndless et KhiCAS

Je liste ici les instructions pour les plateformes couramment utilisées par la communauté Planète Casio ; pour la liste complète, vois l'article de TIP.

Ordinateur avec SDL2

Extrais l'archive zip dans un dossier de ton choix puis lance pyka3d.py. Il te faudra la bibliothèque SDL2, que tu peux installer avec la commande "pip install PySDL2" sur toutes les plateformes.


Graph 90+E avec l'application Python

Transfère les programmes sur la calculatrice et lance pyka3d.py dans l'application PYTHON pour jouer. Il n'y a pas de saisie clavier sur la Graph 90+E, donc en mode manuel les 8 actions défilent en bas de l'écran et il te faut appuyer sur AC/ON pour sélectionner celle que tu veux quand elle passe.

L'exécution est lente ; il est important de mettre le deuxième paramètre de jouer_selon() à 0 pour éviter les affichages inutiles. Je conseille également d'utiliser l'émulateur ou d'overclock pour gagner du temps.


Graph 90+E avec KhiCAS

Transfère les scripts dans le dossier racine de la mémoire de stockage. Lance KhiCAS en mode MicroPython (à sélectionner via le menu F6 puis ouvrir, et exécuter pyka3d.py. Le mode manuel utilise les touches normalement ; EXIT pour quitter. Les mêmes remarques que la Graph 90+E s'appliquent pour les performances.


Graph 35+E II

Transfère les programmes sur la calculatrice et lance pyka3d.py dans l'application PYTHON pour jouer. Il n'y a pas de saisie clavier sur la Graph 35+E II, donc en mode manuel les 8 actions défilent en bas de l'écran et il faut appuyer sur AC/ON pour sélectionner celle qu'on veut quand elle passe.

L'exécution est lente ; il est important de mettre le deuxième paramètre de jouer_selon() à 0 pour éviter les affichages inutiles. Je conseille également d'utiliser l'émulateur ou d'overclock pour gagner du temps.


Règles de soumission et gestion des groupes

Envoie ton script pyka3d.py modifié par mail à info@tiplanet.org avant le 13 Novembre 23h59, avec :

  • En objet, Pykaster3D ;
  • Un moyen de contact que tu surveilles fréquemment (email, SMS, Discord, etc) ;
  • En option, ton pseudonyme Planète Casio et/ou TI-Planet ;
  • Pour recevoir les lots, ton adresse postale complète avec nom/prénom et un numéro de téléphone (pour suivre les envois). Ces informations peuvent être envoyées plus tard, mais on gagne du temps à les communiquer tout de suite.

Les informations personnelles ne seront partagées à aucun tiers et détruites sur demande.

En soumettant tu peux également demander une clé USB d'émulation Casio, que nous fournirons dans la limite de nos stocks (18 clés). Le but est de permettre de tester sur des machines réactives si jamais tu n'en as pas sous la main.

Pour créer un groupe, indique ton pseudonyme Planète Casio ou TI-Planet et joins un logo (carré) pour le groupe. Une signature Python te sera fournie, et toute personne accompagnant sa soumission de ta signature sera considérée comme un membre du groupe. (Chaque participant ne peut faire partie que d'un groupe.)

Le score de chaque groupe sera calculé à partir des scores des membres par une moyenne pondérée. Le meilleur groupe remportera un lot dédié à se partager.

Conclusion

Cette année, un seul sujet mais quel sujet ! Bon courage pour optimiser celui-là. Ce n'est même pas la peine de prononcer le mot «combinatoire» tant les options sont vastes (plus quelques pièges comme le fait que modifier une action dans le passé impacte toute la suite du script). Je pense que les chances sont bien plus côté exploration que bruteforce.

Bon courage pour ce défi, faites honneur à la communauté Planète Casio !
Et n'hésitez pas si besoin à aller consulter le topic d'entraide.


1, 2, 3 Suivante
Critor Hors ligne Administrateur Points: 2280 Défis: 18 Message

Citer : Posté le 22/09/2022 01:34 | #


Merci pour cette présentation fort romancée, tout en talent et finesse comme à l'habitude.

Une 1ère participation vient d'être reçue, et est donc pour le moment gagnante.

Le score à battre est de 787,8 points :
Critor Hors ligne Administrateur Points: 2280 Défis: 18 Message

Citer : Posté le 22/09/2022 11:09 | #


Nouvelle participation qui prend la tête en les attrapant toutes pour 1292 points !
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 16:34 | #


J'arrive pas à jouer sur PC ...
Je n'arrive pas à le faire fonctionner avec la sdl.
Lephenixnoir Hors ligne Administrateur Points: 22610 Défis: 149 Message

Citer : Posté le 22/09/2022 16:56 | #


Tu n'y arrives pas de quelle façon ? Comme toujours, on ne vas pas inventer la solution en devinant tes messages d'erreur.
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 17:07 | #


Quand je lance le fichier il génère juste une image ...
Et quand je remplace le import polycal5 par polycalc_sdl2 il manque une fonction.
Calamari Hors ligne Membre Points: 146 Défis: 0 Message

Citer : Posté le 22/09/2022 18:42 | #


Mb88 a écrit :
Quand je lance le fichier il génère juste une image ...
Et quand je remplace le import polycal5 par polycalc_sdl2 il manque une fonction.


All I did (on Debian 11) was extract the archive, run these commands, and the game worked right away:
sudo apt install python3-sdl2
python3 pyka3d.py

The game window was small, so I modified the end of the first line of pyka3dlb.py, replacing 160, 120, 1) with 160, 120, 8). That made it much easier to see.

Press [Esc] to exit the game.
Critor Hors ligne Administrateur Points: 2280 Défis: 18 Message

Citer : Posté le 22/09/2022 19:03 | #


Nouveau participant, avec 1246 points :


Et re-nouveau participant qui les explose tous, avec 1409,1 points !

(et encore une belle marge de progression, vu qu'ils reste encore 27 petites souris à attraper )

Nouveau participant, avec 1306,2 points !
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 19:48 | #


Where do you found the archive ?
Calamari Hors ligne Membre Points: 146 Défis: 0 Message

Citer : Posté le 22/09/2022 19:53 | #


Mb88 a écrit :
Where do you found the archive ?

https://tiplanet.org/modules/archives/downloads2/1663775326/Pyka3D.zip
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 19:58 | #


It does not work : it generates an image.
Critor Hors ligne Administrateur Points: 2280 Défis: 18 Message

Citer : Posté le 22/09/2022 19:59 | #


Mb88 a écrit :
It does not work : it generates an image.

Could you show us the image which is bothering you ?
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 20:01 | # | Fichier joint


See the attached file.

Ps : @Critor, I'm french : you don't need to write in english.
Critor Hors ligne Administrateur Points: 2280 Défis: 18 Message

Citer : Posté le 22/09/2022 20:10 | #


Merci.

Donc oui, le jeu tourne, aucun problème.

Tu utilises quelle plateforme ? Et combien de temps nécessite cet affichage ?
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 22/09/2022 21:02 | #


Linux, et le jeu est assez lent.
Specs :
I3 10th gen (je ne peux pas t'n dire plus pour le cpu)
Intel UHD graphics
8go ram
Calamari Hors ligne Membre Points: 146 Défis: 0 Message

Citer : Posté le 23/09/2022 01:34 | # | Fichier joint


I've modified Pykaster3D so that it will fall back to xterm output if SDL is unavailable :



It works in xterm and should also work fine in most standard Linux GUI terminals. When running in xterm mode the key mappings will be slightly different than standard, to accommodate the way I'm reading keystrokes. You can move with WASD, or with the numeric keypad arrows (in Num Lock mode). Press either Q/E, 7/9, or 1/3 to strafe. Use ENTER or SPACE to jump, and 5 to do nothing. Press ESC, X, or CTRL-X to exit. If you accidentally press the regular arrow keys, that will also exit . If it's running too slowly and you're having trouble exiting: Press Ctrl+C then ESC.

A zip containing a patch and files is attached. To apply the patch, run the following command in the Pyka3D directory:
patch -p1 < xterm.patch

Or, if you're fine with overwriting files, copy polycal5.py and polycalc_xterm.py to the Pyka3D directory.

This will work in an 80x24 terminal (awesome job by Critor in allowing the game to run at such a low resolution), but the Pikachu count will overlap most of the screen. I recommend 80x43 or larger. Decreasing the font size will increase the pixel count and make it look better, although it will also run more slowly so don't go overboard.

Note: While this will run in the Linux framebuffer console (Ctrl-Alt-F1, etc), it relies on xterm RGB colors and the console doesn't support them. As a result the screen will mostly be black and you won't be able to properly see the maze. Also, at least for me, Num Lock didn't work so I couldn't use the numeric keypad. If there is a big demand for the console ( who am I kidding?) I could make a version that applies color dithering, but I suspect it'll look pretty bad.
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 23/09/2022 09:43 | #


Wow, it looks great ! I'll try it out !
Lephenixnoir Hors ligne Administrateur Points: 22610 Défis: 149 Message

Citer : Posté le 23/09/2022 09:43 | #


Mb88 a écrit :
It does not work : it generates an image.

Et tu le contrôles au clavier ensuite ?
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 23/09/2022 09:44 | #


Avec les chiffres.
Mb88 Hors ligne Membre Points: 295 Défis: 0 Message

Citer : Posté le 23/09/2022 09:50 | #


@Calamari, it does not starts in xterm mode : It generates an image like before. Please send the entire source code, I can't get it working.
Tituya Hors ligne Rédacteur Points: 1989 Défis: 16 Message

Citer : Posté le 23/09/2022 10:20 | #


Comme chaque année il va y avoir un classement en ligne, avez vous une idée de quand il sera disponible ?

Je pense essayer de participer, c'est un travail titanesque et la gourde casio me fait de l'oeil
Vraiment bravo Critor (et lephe ? Je ne sais pas si tu as participé à la conception) pour cette prouesse !
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)
Projet en cours : Adoranda

Mes programmes
Hésite pas à faire un test !


1, 2, 3 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 31 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd