π
<-
Chat plein-écran
[^]

Snake, calcul mental, et interface lancement jeux Python

Snake, calcul mental, et interface lancement jeux Python

Message non lude Admin » 19 Avr 2020, 00:10

12385Cela t'a peut-être échappé, mais les capacités Python de ta NumWorks ont été fortement étendues dernièrement. :D

D'une part, le MicroPython de ta calculatrice utilise 3 types de mémoire avec les rôles suivants :
  • la mémoire de stockage qui accueille et conserve tes scripts Python
  • le stack (pile) qui, à l'exécution, accueille les références vers les objets Python créés
  • le heap (tas) qui, à l'exécution, accueille les valeurs de ces objets Python
En gros le stack / pile limite donc le nombre d'objets différents pouvant exister simultanément en mémoire, alors que le heap / tas limite la taille globale occupée par ces objets.
A moins d'avoir de gros besoins en terme de données ou de récursivité, le facteur limitant pour tes projets Python sur calculatrice est habituellement le heap / tas.
Or depuis la version 13.2.0, le heap / tas Python de ta NumWorks a doublé, passant de 16K à 32K. :bj:

D'autre part, la version 13.1.0 a introduit en Python un nouveau module ion permettant de tester les appuis de touches.
Cela devrait t'être fort utile pour coder tes jeux et interfaces de menus ! :bj:

Mais jeux et interfaces de menus, les deux choses sont liées.

C'est quoi un jeu ? Algorithmiquement, on peut le définir en tant que boucle qui répère 3 choses à l'infini :
  • lecture des entrées (clavier, souris, joystick, tactile, réseau...)
  • traitement avec mise à jour des variables codant l'état du jeu
  • mise à jour de l'affichage
Mais ça c'est en cours de partie. Avant le démarrage de la partie, un jeu c'est aussi justement un menu permettant de choisir nombre d'options (difficulté, niveau de démarrage, options d'affichage, ...).

cent20 et ses disciples Arthur_Jacquin et Golden Man se proposent justement ce soir de t'illustrer les formidables nouvelles capacités de la NumWorks, à la fois en terme de jeux et d'interfaces de menus, au pluriel note-le bien. ;)

Grand fan du Python, cent20 a poussé Arthur_Jacquin à nous commencer bien évidemment par un Snake, le jeu du serpent, dont voici ci-contre l'interface de lancement.
Grâce au nouveau module ion, les touches fléchées te permettent intuitivement de sélectionner et modifer les différentes options, et on apprécie également l'affichage d'une aide avec les touches à utiliser ainsi que du nom du jeu et de l'auteur. :)

12472Comme tu le vois maintenant en cours de partie et comme déjà montré, le nouveau tas / heap de 32K permet beaucoup plus de libertés et désormais le travail des graphismes au pixel près, sans avoir à craindre l'erreur de mémoire ! :D

Et voici maintenant comme promis un 2ème jeu, cette fois-ci du calcul mental par Golden Man, une fois de plus aux graphismes remarquablement soignés. :)

Mais voyons un petit peu l'interface de lancement de ce 2ème, car peut-être n'as-tu pas percuté plus haut. Elle est très similaire à celle du Snake, non ? Avec juste les noms et valeurs qui changent... ;)
Car en effet, c'est littéralement une bibliothèque très complète d'interface de lancement de jeu que cent20 et Arthur_Jacquin t'ont développée, et que tu peux réutiliser clé en main pour tes propres jeux ! :bj:
Il te suffit de lui fournir dans l'ordre :
  • titre du jeu
  • texte du bouton de lancement
  • des listes comportant un nom suivi de une ou plusieurs valeurs qui te permettent astucieusement de traiter par exemple :
    • aussi bien les choix disponibles pour une ou plusieurs options
    • que l'affichage des différentes touches de contrôle, défilable de la même façon qu'une option avec les touches fléchées
    • ou encore l'affichage des différents auteurs, là encore défilable de la même façon

Rien de compliqué, un simple appel de fonction et la bibliothèque se charge de tout ! :D
Par exemple, voici l'appel correspondant au jeu Snake :
Code: Tout sélectionner
mode, dif, bor = menu("SNAKE",
                      "Lancer la partie",
                      ["Mode", "Classique", "Dingue"],
                      ["Difficulté", "Moyen", "Difficile", " Extrême",
                        "Facile"],
                      ["Bordures", "Mortelles", "Téléportation"],
                      ["Commandes", " Nav: Flèches", "Menu: HOME",
                        "Rejouer: OK"],
                      ["Crédits","Arthur J.","Vincent R."])

Mais pas de défilement vertical par contre à ce jour si on spécifie plus de 5 listes nom+valeurs. Peut-être pour une prochaine fois ? ;)

Et voici celui correspondant au jeu de calcul mental :
Code: Tout sélectionner
mode, ope, dif, rep = menu("Automatismes en calcul mental",
                            "Calculer [OK]",
                            ["Mode", "Classique", "Rapide"],
                            ["Opération(s)", "+", "-", "x", "/", "+ -",
                              " x / ", "+ - x", "+ - x /"],
                            ["Difficulté", "  modéré", "difficile",
                              "expert", "facile"],
                            ["Répétition", 42, 50, 100, 120, 20],
                            ["Crédits", "Site web$nsi.xyz/calcul",
                              "Auteur$Kevin Fedyna",
                              "Contributeur$Vincent ROBERT"])

12473Enfantin, n'est-ce pas ? ;)

N'hésite pas à aller consulter ci-dessous les pages de ces 3 projets, débordantes de détails passionnants à dévorer.

Et en attendant ta prochaine création, jusqu'à combien arrives-tu à faire grandir ton serpent ? :troll:




Liens :

Téléchargements :
 
Ce compte ne reçoit pas de MP / This account does not receive PMs.
Avatar de l’utilisateur
AdminAdmin
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 1%
 
Messages: 459
Images: 28
Inscription: 30 Aoû 2011, 11:00
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude cent20 » 19 Avr 2020, 09:05

critor a écrit:Mais pas de défilement vertical par contre à ce jour si on spécifie plus de 5 listes nom+valeurs. Peut-être pour une prochaine fois ? ;)


En effet, on s'est limité à 4 ou 5 réglages parce qu'on a pensé que c'était suffisant, et car le code du menu était déjà fort lourd.
Le menu + le branchement c'est près de 3ko.

Deux autres jeux non précisés dans cette news ont été branchés sur ce menu, le démineur conçu pour le lancement de la version 13.0 d'Epsilon et pour lequel je me suis arraché le peu de cheveux (car le tas heap était à l'époque était de 16ko) :mmm: et celui d'Arthur. Les liens vers ces démineurs sont dans l'article qui traite du menu.

Golden Man qui a fait l'application de calcul mental est en train de regarder pour faire un Tetris, il étudie actuellement les tétriminos.

critor a écrit: c'est littéralement une bibliothèque très complète d'interface de lancement de jeu que cent20 t'a développée ;)


Moi j'ai juste impulsé, coordonné, animé les discussions sur l'ergonomie, le développeur c'est Arthur.

Je reviens, les 🍓 m'attendent.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude Bisam » 19 Avr 2020, 10:29

Très joli ! Bravo pour cette structure de menus.

Maintenant que l'on peut faire ce genre de choses, je trouve de plus en plus dommage que la limitation de taille en mémoire des programmes empêche d'utiliser une programmation plus structurée et moderne, plus proche de ce que j'imagine être les attentes d'une entreprise envers des développeurs.
Par exemple, dans le script des menus, il serait plus logique que les constantes numériques soient nommées au départ et qu'on utilise leur nom plutôt que des valeurs numériques dont on ne sait pas d'où elles sortent.
C'est une bonne habitude d'écriture de programmes qui a pour seul inconvénient de prendre légèrement plus de place en mémoire morte pour l'enregistrement du script. En revanche, cela rend la lecture du script bien plus simple.

Quant à la programmation elle-même, je suggérerais seulement d'utiliser un autre nom pour la variable appelée (maladroitement, puisque c'est un mot réservé de Python !) "set".
Il y a d'autres choses qui pourraient être simplifiées, selon moi... mais je me trouve un peu trop "moralisateur" quand j'arrive et que je suggère une modification pour que le contenu ressemble plus à ce que moi j'aurais fait. Je n'avais qu'à le faire ! Alors je vais m'abstenir.

Je réitère mes encouragements pour ce genre d'initiatives qui vont sûrement aider de nombreuses personnes à faire le premier pas dans la programmation de jolis jeux.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude cent20 » 19 Avr 2020, 11:17

Bisam a écrit:Quant à la programmation elle-même, je suggérerais seulement d'utiliser un autre nom pour la variable appelée (maladroitement, puisque c'est un mot réservé de Python !) "set".


Cette vilaine maladresse, dont je suis l'auteur (j'ai renommé une variable d'Arthur, qui est donc innocent sur ce coup là) vient d'être corrigé. set est devenu chx.
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude Arthur Jacquin » 19 Avr 2020, 11:18

Bisam a écrit:Il y a d'autres choses qui pourraient être simplifiées, selon moi...

Le code de la fonction menu() est en effet brouillon, en tout cas peut gagner en clarté. Je préparais une mise à jour pour faciliter sa lecture/modification, mais elle n'a pas été finalisée avant la publication des articles. Je pense m'y remettre dans quelques jours.
Avatar de l’utilisateur
Arthur Jacquin
Niveau 4: MC (Membre Confirmé)
Niveau 4: MC (Membre Confirmé)
Prochain niv.: 56%
 
Messages: 14
Inscription: 07 Mar 2020, 21:05
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: MP* Lazaristes
GitHub: arthur-jacquin

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude cent20 » 19 Avr 2020, 11:27

Bisam a écrit:Par exemple, dans le script des menus, il serait plus logique que les constantes numériques soient nommées au départ et qu'on utilise leur nom plutôt que des valeurs numériques dont on ne sait pas d'où elles sortent.


Je veux bien des précisions.
Code: Tout sélectionner
["Répétition", 42, 50, 100, 120, 20]
ne me choque pas et cela ne nécessite aucun traitement ultérieur.

Bisam a écrit:Il y a d'autres choses qui pourraient être simplifiées, selon moi...


On ne va pas se vexer, tu peux nous faire la liste, on va apprendre des trucs c'est certain. Après je sais pas si on pourra tout intégrer, car mes "disciples" sont déjà partis sur de nouveaux projets... :D
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude critor » 19 Avr 2020, 11:31

Et puis après sur NumWorks, à cause des 32K de tas (heap) il faut malheureusement savoir faire des compromis entre propreté du code et utilisation du tas.

(mais c'est toujours mieux que 18K de tas sur TI-83 Premium CE Edition Python; si on arrive à monter un concours de rentrée 2020 je sens que c'est sur ce modèle que je vais m'arracher les cheveux pour que le script tourne... :'( )

Ce n'est pas parce que le code est plus propre que ça économise le tas, pas toujours en tous cas.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.2%
 
Messages: 41493
Images: 14577
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude Bisam » 19 Avr 2020, 11:42

cent20 a écrit:Je veux bien des précisions.

Là, je vais manger, mais je ferai un petit topo plus tard.
Bon appétit à tous.
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude Bisam » 19 Avr 2020, 13:13

Me revoici.

Mon propos portait notamment sur les paramètres des différents appels à "draw_string".
Par exemple, dans :
Code: Tout sélectionner
    draw_string(titre, int(160 - 5 * len(titre)), 8, (42, 120, 224))
    draw_string(action, int(160 - 5 * len(action)), 36, f)
on ne sait pas à quoi correspondent les longueurs 160, 8 et 36.

Un peu plus loin dans :
Code: Tout sélectionner
            draw_string(" " * 32, 0, 64 + (i + 1) * 25)
            draw_string(str(txt2), int(150 + (150 - 10 * len(str(txt2))) / 2), 64 + (i + 1) * 25, col)
        draw_string(" " * 17, 140, 64 + (i) * 25)
        draw_string(str(txt), int(150 + (150 - 10 * len(str(txt))) / 2), 64 + i * 25, col)
        draw_string("<" * cursor, 140, 64 + i * 25, g)
        draw_string(">" * cursor, 300, 64 + i * 25, g)
ce sont les valeurs 150, 64, 25, 140 et 300 qui sont mystérieuses.

On comprend qu'elles correspondent à des données sur la hauteur et la largeur des lignes mais ce serait plus explicite avec des constantes comme :
Code: Tout sélectionner
HL = 25 #hauteur d'une ligne de caractères
MID = 150 #milieu d'une ligne de texte
TOP = 36 #ligne du haut
FL = 64 #1ère ligne du menu


Dans un tout autre registre, il y a une petite maladresse :
Code: Tout sélectionner
        if txt.find("$") != -1:
            txt2 = txt[txt.find("$") + 1:]
            txt = txt[:txt.find("$")]

peut être amélioré en :
Code: Tout sélectionner
        c = txt.find("$")
        if c != -1:
            txt, txt2 = txt[:c], txt[c + 1:]
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.6%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Snake, calcul mental, et interface lancement jeux Python

Message non lude cent20 » 19 Avr 2020, 15:51

Bisam a écrit:
Mon propos portait notamment sur les paramètres des différents appels à "draw_string".
Par exemple, dans :
Code: Tout sélectionner
    draw_string(titre, int(160 - 5 * len(titre)), 8, (42, 120, 224))
    draw_string(action, int(160 - 5 * len(action)), 36, f)
on ne sait pas à quoi correspondent les longueurs 160, 8 et 36.

Un peu plus loin dans :
Code: Tout sélectionner
            draw_string(" " * 32, 0, 64 + (i + 1) * 25)
            draw_string(str(txt2), int(150 + (150 - 10 * len(str(txt2))) / 2), 64 + (i + 1) * 25, col)
        draw_string(" " * 17, 140, 64 + (i) * 25)
        draw_string(str(txt), int(150 + (150 - 10 * len(str(txt))) / 2), 64 + i * 25, col)
        draw_string("<" * cursor, 140, 64 + i * 25, g)
        draw_string(">" * cursor, 300, 64 + i * 25, g)
ce sont les valeurs 150, 64, 25, 140 et 300 qui sont mystérieuses.

On comprend qu'elles correspondent à des données sur la hauteur et la largeur des lignes mais ce serait plus explicite avec des constantes comme :
Code: Tout sélectionner
HL = 25 #hauteur d'une ligne de caractères
MID = 150 #milieu d'une ligne de texte
TOP = 36 #ligne du haut
FL = 64 #1ère ligne du menu



Sur la version de dev (https://workshop.numworks.com/python/ar ... n/menu_dev) et sur la version d'Arthur (https://workshop.numworks.com/python/arthurjacquin/menu) il a laissé les paramètres, j'ai juste remplacé ces réglage par des valeurs que j'ai jugé efficace, contre son avis d'ailleurs ! :D

Du coup il va pouvoir jubiler.

Code: Tout sélectionner
# Positionnement
mh = 20 # Marge du haut
mg = 20 # Marge à gauche
ae = 15 # Aération
esp = 5 # Espacement
b = [150,300] # Bornes pour les options


Tout ça c'est la faute de Critor, qui a choisit de faire pointer ces liens vers mes scripts, copie simplifiée de l'original. ;)

Bisam a écrit:Dans un tout autre registre, il y a une petite maladresse :
Code: Tout sélectionner
        if txt.find("$") != -1:
            txt2 = txt[txt.find("$") + 1:]
            txt = txt[:txt.find("$")]

peut être amélioré en :
Code: Tout sélectionner
        c = txt.find("$")
        if c != -1:
            txt, txt2 = txt[:c], txt[c + 1:]



Kévin m'en en parlé il y a deux jours (en fait il s'est un peu moqué de moi mais on dira rien sinon il ne finira pas le Tétris) et là encore je plaide coupable c'est une portion que j'ai ajouté à la fin pour la gestion de la double ligne. Kévin voulait utiliser directement la méthode .split() et Arthur n'était pas convaincu par cette double ligne.

Par contre, mes versions sont en pep8 , même si bon c'est pycharm qui s'occupe de corriger mon code :)
Si je code pas en pep8, je me prend une soufflante alors je fais attention maintenant. :p
Image
Enseignant de mathématiques et d'informatique. Spécialité NSI : Des projets, des tutos, mais aussi de l'art
Calculatrice NumWorks : Des applications et des jeux, scripts, 📙 Découvrir la NumWorks
Avatar de l’utilisateur
cent20VIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 46.1%
 
Messages: 1013
Images: 64
Inscription: 17 Mai 2012, 09:49
Localisation: Avignon
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: nsi_xyz

Suivante

Retourner vers News NumWorks

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 40 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1641 utilisateurs:
>1588 invités
>49 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)