Page 1 sur 2

Jeu Saute Mouton avec images Python IM8C pour 83 Premium CE

Message non luPosté: 09 Juil 2020, 13:27
de critor
12617Le nouveau cahier d'activités Projets Python pour l'enseignement SNT en 2nde par Jean-Baptiste Civet et Boris Hanuš est désormais disponible. Nous ne manquerons pas de t'en reparler plus en détails, mais attardons-nous en attendant sur un point précis.

Dans les ressources numériques téléchargeables associées au livre, on trouve enfin une première image, GIRL_150, au nouveau format IM8C géré directement en Python depuis la mise à jour 5.5.1.

Découvrons donc sans plus attendre ce que cela ouvre comme possibilités pour la création de jeux en Python. ;)

Prenons le jeu Saute Mouton sorti en juillet 1983 par J. Michels pour ordinateurs Thomson MO5/TO7 en 320×200 pixels, en s'inspirant de la version sortie par Jean-François Sehan dès 1982 pour ordinateur Sinclair ZX81 dans son livre Etudes pour ZX 81 (tome 1) aux éditions PSI.

Plantons d'abord le décor !
A gauche 3 moutons maigres dans leur bergerie.
A droite 3 moutons gras dans le pâturage.
Il faut rentrer les moutons gras dans la bergerie et faire arriver les moutons maigres au pâturage.
Comment faire ?
Les moutons ne peuvent sauter qu'un seul mouton à la fois and ne peuvent reculer.
Amuse-toi bien !!!


Nous avons donc là de quoi bien optimiser la chose pour le module ti_graphics de la TI-83 Premium CE Edition Python, avec un espace similaire de 320×210 pixels.

Nombre de tracés correspondant en effet à des primitives pouvant être reproduites d'un seul appel :
  • drawPolyLine() pour les lignes brisées
  • fillRect() pour les rectangles pleins
  • fillPolygon() pour les autres formes pleines
  • ...
Et justement, maintenant que nous avons donc un exemple d'image IM8C et pensons en avoir compris le format, nous allons utiliser des images IM8C pour les moutons, avec une couleur transparente à la différence.

12630Et bingo, ça marche, visiblement nous maîtrisons bien le format IM8C, voici ci-contre notre version avec des graphismes en passant nettement améliorés qui transcendent les années 1980. ;)

1er jeu Python graphique pour la TI-83 Premium CE Edition Python, si ce n'est à ce jour le jeu Python aux graphismes les plus travaillés sur calculatrice ! :D

Comme quoi, avec la richesse de son module Python ti_graphics, la mise à jour 5.5.1 permet de réaliser facilement des choses bien plus belles que sur la concurrence à ce jour. ;)

Que dire des performances ? Elles sont tout bonnement extraordinaires : :bj:
  • moins de 9 secondes pour planter le décor initial
  • puis une simple fraction de seconde pour rafraîchir l'affichage à chaque action
Sur la concurrence à ce jour de milieu de gamme où tu serais contraint de faire des boucles de setPixel() faute de mieux, nous te mettons au défi d'obtenir de telles performances. N'est-ce pas, cent20 ? :bat:

Par contre, petit bémol, ce mini-jeu avec son script de 5,77K en mémoire de stockage suffit à quasiment remplir le tas / heap Python de 17K de la TI-83 Premium CE Edition Python 5.5.1. Ajoute quelques print() à notre script et c'est foutu, erreur de mémoire à l'importation.

En complexité, Saute Mouton est donc hélas représentatif des jeux les plus aboutis réalisables à ce jour sur TI-83 Premium CE Edition Python 5.5.1, et nous voyons mal comment une mise à jour logicielle pourrait changer cela alors qu'il s'agit d'une limitation matérielle : le cœur Python de la calculatrice ne dispose que de 32 Kio.

La suppression de la gestion des programmes assembleur dès la version 5.5.1 tout en prétendant qu'il suffisait maintenant d'utiliser le Python pour continuer à créer était hautement prématurée.

Ce n'est pas demain la veille que Oiram CE nous reviendra dans une édition Python pour TI-83 Premium CE Edition Python. :'(

Bref, Saute Bisam... euh pardon Saute Mouton, se lance en appelant sm() pour 2 troupeaux de 3 moutons. Tente donc de trouver comment résoudre le problème en un minimum de coups possible. ;)

C'est intuitif, touches
pour sélectionner ton mouton rose, puis
entrer
pour lui demander d'avancer ou sauter.

Tu pourras ensuite retenter avec sm(n) pour 2 troupeaux de n moutons avec n=4, n=5, etc., pour voir si tu as bien trouvé une stratégie qui marche dans tous les cas.

Enfin, question bonus pour les plus matheux, quelle est la formule du nombre minimal de coups en fonction de n ? ;)

Téléchargements :

Compléments :

Crédits images : Livre Etudes pour ZX 81 - site défunt "ksinfos" de Carl HERVIER

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 14:17
de cent20
critor a écrit:1er jeu Python graphique pour la TI-83 Premium CE Edition Python, si ce n'est à ce jour le jeu Python aux graphismes les plus travaillés sur calculatrice ! :D

Comme quoi, avec la richesse de son module Python ti_graphics, la mise à jour 5.5.1 permet de réaliser facilement des choses bien plus belles que sur la concurrence à ce jour. ;)

Que dire des performances ? Elles sont tout bonnement extraordinaires : :bj:
  • moins de 9 secondes pour planter le décor initial
  • puis une simple fraction de seconde pour rafraîchir l'affichage à chaque action
Sur la concurrence à ce jour de milieu de gamme où tu serais contraint de faire des boucles de setPixel() faute de mieux, nous te mettons au défi d'obtenir de telles performances. N'est-ce pas, cent20 ? :bat:[/success]
[warning]Par contre, petit bémol, ce mini-jeu avec son script de 5,77K en mémoire de stockage suffit à quasiment remplir le tas / heap Python de 17K de la TI-83 Premium CE Edition Python 5.5.1. Ajoute quelques print() à notre script et c'est foutu, erreur de mémoire à l'importation.


9 secondes pour planter le décor initiale, ça me rappelle ma CASIO 9960GT de 1996, je ne trouve pas ça non plus extraordinaire en rapidité et pourtant je ne doute pas un seul instant que ton code est parfaitement optimisé.

Pour porter ça sur NumWorks, il "suffit" de trouver comment réaliser un mouton en pixel-art et la rapidité d’exécution graphique de la machine devrait faire le reste. Il n'y a plus qu'à !

La preuve : https://workshop.numworks.com/python/ju ... nch_screen
2000 rectangles/s d'après ce Benchmark.

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 18:04
de jean-baptiste boric
cent20 a écrit:Pour porter ça sur NumWorks, il "suffit" de trouver comment réaliser un mouton en pixel-art et la rapidité d’exécution graphique de la machine devrait faire le reste. Il n'y a plus qu'à !

Rajouter un mécanisme pour blitter des images dans la NumWorks serait très facile, le problème c'est le stockage des images. Actuellement on dispose de 32 KiB en RAM alors que la N0110 dispose de plus de 7 MiB de Flash actuellement inutilisés. Il y a une issue dans epsilon à ce propos, mais rétrofitter le stockage en Flash demanderait un effort non négligeable de développement...

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 19:46
de critor
cent20 a écrit:
critor a écrit:Que dire des performances ? Elles sont tout bonnement extraordinaires : :bj:
  • moins de 9 secondes pour planter le décor initial
  • puis une simple fraction de seconde pour rafraîchir l'affichage à chaque action
Sur la concurrence à ce jour de milieu de gamme où tu serais contraint de faire des boucles de setPixel() faute de mieux, nous te mettons au défi d'obtenir de telles performances. N'est-ce pas, cent20 ? :bat:[/success]
[warning]Par contre, petit bémol, ce mini-jeu avec son script de 5,77K en mémoire de stockage suffit à quasiment remplir le tas / heap Python de 17K de la TI-83 Premium CE Edition Python 5.5.1. Ajoute quelques print() à notre script et c'est foutu, erreur de mémoire à l'importation.


9 secondes pour planter le décor initiale, ça me rappelle ma CASIO 9960GT de 1996, je ne trouve pas ça non plus extraordinaire en rapidité et pourtant je ne doute pas un seul instant que ton code est parfaitement optimisé.


Tu compares une machine avec un écran 128x64 pixels sur 2-bits de profondeur (22=4 couleurs), avec une machine avec un écran 320x240 pixels sur 16-bits de profondeur (216=65536 couleurs). Le setPixel() n'a pas du tout la même complexité, sans compter qu'il y a 9,375 fois plus de pixels à traiter pour remplir l'écran.

Donc non, 9 secondes ne me semblent pas ridicule.

Mais ton défi est justement d'afficher sur NumWorks les mêmes graphismes ou mieux, avec des performances similaires ou supérieures. Donc fais-le, et après nous en reparlerons des 9 secondes. :troll:

Sachant de plus que l'affichage de 320x210 pixels utilise ici 554 couleurs différentes, et passe une bonne moitié du temps sur les dégradés du sol et du ciel, dégradés que tu ne peux pas réaliser sur fx-9960GT.
Mais on supprime les dégradés si tu veux, et ton nouveau défi sera donc de réaliser ça sur NumWorks en moins de 5 secondes.

N'hésite pas à mettre autant d'esclaves que tu veux sur ce projet. ;)


cent20 a écrit:Pour porter ça sur NumWorks, il "suffit" de trouver comment réaliser un mouton en pixel-art et la rapidité d’exécution graphique de la machine devrait faire le reste. Il n'y a plus qu'à !

Ton défi (et ce n'est a priori pas une mission impossible, j'ai plusieurs pistes), est justement d'afficher les moutons. Je ne pense pas que tu aies des problèmes de tas/heap pour 2 pauvres sprites de moutons monochromatiques.
Mais connaissant les performances du setPixel() NumWorks (pas de double-buffering comme chez Casio), ça va être ça le cœur du problème.

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 21:18
de critor
Voilà donc sans les dégradés sur le ciel et le sol, mais ça fait plus années 1980 que années 1990 alors :
Image

Cette fois-ci le décor est planté en moins de 3 secondes, bon courage pour battre ça... :troll:
Image

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 22:00
de Arthur Jacquin
Sans décor, un test de dessin de mouton :

https://workshop.numworks.com/python/ar ... quin/sheep

Sur N0110 cela donne 0,01043 moutons par seconde (les moutons font 16 pixels par 14). Etant donné que c'est du pixel art, toute image aura une vitesse d'affichage similaire (relativement à la taille de l'image évidemment).

Pour diminuer la taille des informations de l'image, j'ai utilisé un codage fortement inspiré de celui pour le sokoban.

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 22:01
de critor
Joli ! :)
Image

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 22:04
de Arthur Jacquin
En imaginant un rafraîchissement pour le jeu (annulation du focus pour un mouton et activation pour un autre), ça fait 2 centièmes. Presque immédiat donc, mais la zone rafraîchit n'est pas immense.

Le support des images ou de commandes plus complexes (par exemple fillPolygon()) ne serait pas de trop, d'autant que cela clarifierait les instructions.

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 22:06
de cent20
Arthur Jacquin a écrit:Le support des images ou de commandes plus complexes (par exemple fillPolygon()) ne serait pas de trop, d'autant que cela clarifierait les instructions.


Je crois que c'est en effet une partie du message de critor.
De toute façon, j'ai trouvé la fonction qui affiche un triangle codé par Léa elle même.

Re: Jeu Saute Mouton avec images Python IM8C pour 83 Premium

Message non luPosté: 09 Juil 2020, 22:13
de Arthur Jacquin
Si même l'équipe NumWorks fait ses propres routines graphiques dans son coin pour pallier la faiblesse de kandinsky on va sûrement aller dans le bon sens !