π
<-

[PRGM] Snake IA, une IA qui joue au Snake

Nouveautés, projets, mises à jour.

[PRGM] Snake IA, une IA qui joue au Snake

Unread postby Eliastik » 28 May 2017, 15:14

Bonjour,

Je voulais vous présenter un programme que j'ai réalisé sous peu et que j'ai posté dans les archives de TI-Planet : Snake IA. Je n'ai pas encore vu de programme de ce type ici. Il s'agit d'un programme intégrant une sorte d'intelligence artificielle (scriptée) qui joue automatiquement au Snake. Il est possible de la défier dans le mode J1 VS IA. Le programme est disponible dans l'archive suivante : https://tiplanet.org/forum/archives_voir.php?id=507491. Pour le moteur du jeu Snake, j'ai repris celui que j'ai amélioré (lui aussi présent dans l'archive, plus d'infos en lisant sa description). Ce programme a été testé sur une TI-82 Advanced et une TI-84 Plus, il nécessite une calculatrice monochrome récente pour obtenir une vitesse correcte.

Voici un petit screenshot de ce programme en action (pris à partir de l'émulateur Wabbitemu émulant une TI-84 Plus) :

Show/Hide spoilerAfficher/Masquer le spoiler
Image


Je vais vous expliquer son fonctionnement ici.

Le code :

Voici le code qui régit le fonctionnement de l'IA :

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
EffListe ⌊SNI7:4→dim(⌊SNI7
If ­I≠A+3 et B≠8:Then
pxl-Test(A+3,B-2→⌊SNI7(1
Else:If B=8
pxl-Test(A+3,86→⌊SNI7(1
End
If ­I≠A+3 et B≠83:Then
pxl-Test(A+3,B+5→⌊SNI7(3
Else:If B=83
pxl-Test(A+3,8→⌊SNI7(3
End
If ­I≠A-3 et A≠6:Then
pxl-Test(A-3,B→⌊SNI7(2
Else:If A=6
pxl-Test(54,B→⌊SNI7(2
End
If ­I≠A+8 et A≠51:Then
pxl-Test(A+8,B→⌊SNI7(4
Else:If A=51
pxl-Test(8,B→⌊SNI7(4
End
If B<J:Then
26→K
26(J-B<39)+24(J-B>39→K
End
If B>J:Then
24→K
24(B-J<39)+26(B-J>39→K
End
If B=J:Then
If A<­I:Then
34→K
34(­I-A<24)+25(­I-A>24→K
End
If A>­I:Then
25→K
25(A-­I<24)+34(A-­I>24→K
End
End
If H=24 ou K=24:Then
If ⌊SNI7(1
34→K
If ⌊SNI7(1) et W≠24 et W≠26
W→K
If ⌊SNI7(1) et W=24 ou ⌊SNI7(1) et W=26
34→K
If ⌊SNI7(1) et ⌊SNI7(2
34→K
If ⌊SNI7(1) et ⌊SNI7(4
25→K
End
If H=25 ou K=25:Then
If ⌊SNI7(2
26→K
If ⌊SNI7(2) et W≠25 et W≠34
W→K
If ⌊SNI7(2) et ⌊SNI7(1
26→K
If ⌊SNI7(2) et ⌊SNI7(3
24→K
End
If H=26 ou K=26:Then
If ⌊SNI7(3
34→K
If ⌊SNI7(3) et W≠24 et W≠26
W→K
If ⌊SNI7(3) et W=24 ou ⌊SNI7(3) et W=26
34→K
If ⌊SNI7(3) et ⌊SNI7(2
34→K
If ⌊SNI7(3) et ⌊SNI7(4
25→K
End
If H=34 ou K=34:Then
If ⌊SNI7(4
26→K
If ⌊SNI7(4) et W≠25 et W≠34
W→K
If ⌊SNI7(4) et ⌊SNI7(1
26→K
If ⌊SNI7(4) et ⌊SNI7(3
24→K
End
H→W
End


Le fonctionnement :

Ce que sait faire cette IA :

  • Trouver le moyen le plus rapide de se diriger vers la pomme ;
  • Éviter les obstacles en les contournant.

Ce que ne sait pas faire cette IA :

  • Se sortir d'un piège (cela nécessiterait de calculer tous les déplacements possibles, ce qui ralentirait considérablement le programme).

L'IA agit en "temps réel" (à chaque tour de boucle du jeu). L'IA fonctionne dans cet ordre là :

  • Lignes 1 à 21 : le programme effectue un test de collision des 4 directions autour de la tête du Snake, et enregistre les résultats dans la liste SNI7 (0 si case vide, sinon 1), dans l'ordre suivant : {gauche, haut, droite, bas} ;
  • Lignes 22 à 39 : le programme trouve la manière la plus rapide de se diriger vers la pomme (symbolisée par un X dans le jeu) : il voit où elle est située par rapport à la tête du Snake, et calcule la distance qui la sépare à celle de la pomme et décide de la direction vers laquelle se déplacer ;
  • Lignes 40 à 85 : le programme voit si des obstacles se trouvent dans la direction vers laquelle le Snake doit se déplacer (la direction qu'il a décidé de prendre) et la change si un obstacle s'y trouve : il contourne les obstacles.

Le programme ne fait que simuler le fait qu'il appuie sur les boutons gauche, haut, droite ou bas de la croix directionnelle, comme un joueur humain. Il ne peut rien faire d'autre.

La partie détection des obstacles comporte encore quelques bugs (au niveau de la logique) mais fonctionne de manière correcte.

J'avais entendu parler de l'algorithme a*, mais l'intégrer dans le jeu ferait qu'à chaque déplacement, un long temps d'attente serait nécessaire. J'ai donc programmé un autre algorithme, plus simple, légèrement inspiré du principe de fonctionnement de celui-ci.

Voilà pour mon explication !
User avatar
EliastikProgrammeur
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 12.5%
 
Posts: 12
Joined: 04 Dec 2015, 13:09
Gender: Male
Calculator(s):
MyCalcs profile

Re: [PRGM] Snake IA, une IA qui joue au Snake

Unread postby Epharius » 28 May 2017, 16:13

Nice, ça peut faire un bon écran de veille :D

C'est d'autant plus spectaculaire d'avoir fait ça en Basic sans que ça ne ralentisse trop le jeu. Bon courage si tu essaies de perfectionner l'algorithme de détection des collisions ;)
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav


Return to Actualités

Who is online

Users browsing this forum: ClaudeBot [spider] and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2155 utilisateurs:
>2139 invités
>9 membres
>7 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)