A programmer un Jeu du serpent

Les derniers trucs auxquels vous avez joué, les derniers ordinateurs que vous avez bidouillés.

Modérateur : Politburo

Répondre
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 845
Enregistré le : 06 oct. 2012 14:37

A programmer un Jeu du serpent

Message par tyann »

Bonjour

Ca faisait un petit moment que je voulais me frotter à ce jeu et à son algorithme
de déplacement. :oops:
C'est donc chose faite sur ma Hp Prime, le serpent se ballade librement avec les changements de direction
et le test de collision avec les bords est fait. :D
Il me reste à mettre des pommes pour le faire grandir et compter les points, les vies et tester qu'il ne se mange pas
la queue.
Alors ce petit jeu sera terminé et je pourrais en attaquer un autre. :mrgreen:
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: A programmer un Jeu du serpent

Message par Ben »

Je me souviens que je l'avais fait sur le C-128, le serpent était représenter par des boules. En basic, ce n'était pas hyper rapide.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: A programmer un Jeu du serpent

Message par gege »

Bonjour,
Ça me rappelle un truc dans "Blade Runner" ;-)

Bien, partagerais-tu le code qu'on joue aussi ?

Il faut ajouter les murs, des niveaux, des portes (haut/bas, droite/gauche), des bonus (lenteur, raccourcissement...), un high score, du multijoueurs...
A bientôt :-)
G.E.
Avatar du membre
pir2
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4642
Enregistré le : 31 oct. 2006 15:08
Localisation : 67310 Westhoffen
Contact :

Re: A programmer un Jeu du serpent

Message par pir2 »

Le jeu que je programmais sur toutes les babasses graphiques qui me passaient dans les mains à une époque.

Ma dernière version doit encore se trouver sur un de mes G850, voire mon E550 ... si les piles sont toujours là ;)
Image
Image
Tipoucet
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3787
Enregistré le : 10 janv. 2009 13:47

Re: A programmer un Jeu du serpent

Message par Tipoucet »

Notre ami blonkay ne serait pas un troll ? déterrage de sujet par message anodin puis insertion de lien après coup ... :o
Dominique
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5941
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: A programmer un Jeu du serpent

Message par Pocket »

Salut,

Il a échappé à ma vigilance, merci les gars :)

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
Avatar du membre
Dom
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1366
Enregistré le : 26 oct. 2018 18:45
Localisation : Ile-de-France

Re: A programmer un Jeu du serpent

Message par Dom »

Pocket a écrit : 29 déc. 2020 08:33 Salut,

Il a échappé à ma vigilance, merci les gars :)

A+
Faut dire que la méthode est vicieuse !
Moi, c'est les poquettes, et la Coll'à'Dom, c'est
destroyedlolo
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1799
Enregistré le : 03 mai 2003 02:24
Localisation : Nonglard (Annecy)
Contact :

Re: A programmer un Jeu du serpent

Message par destroyedlolo »

Haaaa, un de mes premiers programmes que j'avais programmé (totalement en Basic) sur mon PC-1350 :mrgreen:
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: A programmer un Jeu du serpent

Message par C.Ret »

Ma première version était aussi en BASIC sur Commodore VIC-20 avec un seul joueur et des centaines de PEEK/POKE pour animer tout cela.

La dernière que j'ai faite tourne en assembler sur l'écran 40 col d'un Commodore C128 et met en scène quatre vers qui se battent pour être le plus rapide ou le plus malin pour atteindre le premier l'unique source de nourriture.

Ah! La dure loi de la Nature, seuls les plus rapides ou les plus astucieux s'accroissent. Et la loi du plus long l'emporte sur les plus faibles (surtout que si l'on reste coincé plus de 10s son vers perd en taille). Ce qui permet de sortir des nœuds inextricables que la farouche compétition entre les joueurs ne manque pas d'occasionner, même sur les mappes les plus simples, la voracité et l'entêtement des joueurs ne manquant pas à chaque fois d'occasionner des méli-mélo hilarants qui profitent au vers le plus mobile:
CommodoreC128D - Worms.gif
CommodoreC128D - Worms.gif (17.74 Kio) Vu 9292 fois
Le jeu permet de 1 à 4 joueurs (si l'on a deux jeux de deux "Commodore paddles"). L'ordinateur joue les vers restant.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: A programmer un Jeu du serpent

Message par gege »

Bonjour,
Sympa, as-tu des explications générales sur l"algorithme de pilotage des vers par la machine ?
N.B. : en ce moment c'est plutôt l'époque des verres...
G.E.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: A programmer un Jeu du serpent

Message par C.Ret »

Oui, c'est assez simple en fait.

Chaque ver joue à tour de rôle et possède six directions:
0- vers à l'arrêt; les vers s'arrêtent lorsqu'il sont bloqués ou que le joueur donne une impulsion pour arrêter (inverse au sens de marche pour clavier/manette, bouton feu avec paddle en position neutre)
0- ver à l'ARRÊT: les vers s'arrêtent lorsqu'ils sont bloqués par les murs de la mappe ou les autres joueurs.
1- ver avançant vers la DROITE
2- ver avançant vers la GAUCHE
3- ver avançant vers le BAS
4- ver avançant vers le HAUT
6- ver inactif (non encore actif - le joueur n'a pas encore touché sa manette ou le clavier - ce vers n'est pas animé par le C128)

A chaque cycle les choses se déroulent de la même façon:
-1- Le signe '+' marquant l'emplacement de la nourriture est temporairement effacé (remplacé par un ESPACE)
-2- S'il s'agit d'un ver piloté par un joueur, l'état du port correspondant (clavier1, clavier2, joy1, joy2, pad1, pad2, pad3 ou pad4) est lu et le déplacement est effectué dans la direction indiquée ou en continuant dans la même direction si aucune nouvelle impulsion n'est détectée.
S'il s'agit d'un ver piloté par le C128, alors l'impulsion est donnée dans la direction disponible (un ESPACE donc) qui s'approche le plus du point à atteindre (la position du signe +). Les distances de Manhattan sont utilisées (pas à extraire de racine carrée) et pour éviter d'avoir à déterminer les et comparer les quatre distances autour de la tête du ver à chaque fois, c'est l'ordre de parcours des quatre positions testées qui est indexé (DROITE/GAUCHE/BAS/HAUT); Ainsi l'impulsion de direction est choisie dès que la position est libre (ESPACE).
Si aucune position n'est libre, le ver est mis à l'arrêt.
Lorsque le ver passe l'horizontal, la vertical ou l'une des diagonales de la position à atteindre, l'ordre des tests des quatre positions cardinales est mis à jour (re-indexé) afin de préparer le coup suivant. Cela est fait aussi lorsque la position de la nourriture vient de changer. En pratique, cette mise à jour est effectuée avant la détermination de l'impulsion de direction.
-3- La direction prise par le vers est mémorisée dans la mémoire vidéo (color map) à la position de la tête.
-4- En cas de ver à l'arrêt, le compteur de temporisation d'arrêt est décrémenté. Si l'arrêt dépasse le temps prévu (nombre de cycle), la taille du ver est diminuée par l'étape 6.
-5- Si le ver est sur la positon à atteindre (nourriture +), le score est mis à jour (incrémenté) et le dernier anneau n'est pas effacé (saute l'étape 6) ce qui accroit le ver. Une nouvelle position est déterminée aléatoirement et les indexations effacées.
-6- Effacement du dernier anneau de ver. Si le ver n'est pas réduit qu'à un seul élément (sa tête) et qu'il n'est pas sur la position de la nourriture, le dernier anneau est effacé (remplacé par un ESPACE) et la position du nouvel dernier anneau est obtenue en lisant la direction mémorisée dans la 'color map'.
Pour les vers en mouvement cela permet de les faire avancer en conservant leur taille. Pour les ver à l'arrêt depuis un certain temps, cela permet de les raccourcir et avec un peu de chance de leur permettre de reprendre leur déplacement.
-7- Le signe '+' est remis à l'écran et est animé en attendant le signal de fin de cycle obtenu par l'horloge interne (19*50 microcycle minium) et sur le balayage de l'écran (attente de la ligne vidéo 250 du VIC II) afin d'éviter les scintillements.


Manque encore à mon projet les sons, la page de garde et la gestion des menus permettant de paramétrer les parties (difficulté - scores à atteindre - nombre de joueur - attribution des manettes, calibration des zones DROITE/NEUTRE/GAUCHE des paddles - obstacles dans la zone de jeu en fonction des niveaux) etc...
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Répondre

Retourner vers « A quoi t'as joué hier ? »