A programmer un Jeu du serpent
Modérateur : Politburo
A programmer un Jeu du serpent
Bonjour
Ca faisait un petit moment que je voulais me frotter à ce jeu et à son algorithme
de déplacement.
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.
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.
Ca faisait un petit moment que je voulais me frotter à ce jeu et à son algorithme
de déplacement.
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.
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.
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
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
Re: A programmer un Jeu du serpent
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.
- gege
- Fonctionne à 14400 bauds
- Messages : 7148
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: A programmer un Jeu du serpent
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.
Ç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.
- pir2
- Fonctionne à 9600 bauds
- Messages : 4647
- Enregistré le : 31 oct. 2006 15:08
- Localisation : 67310 Westhoffen
- Contact :
Re: A programmer un Jeu du serpent
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à
Ma dernière version doit encore se trouver sur un de mes G850, voire mon E550 ... si les piles sont toujours là
Re: A programmer un Jeu du serpent
Notre ami blonkay ne serait pas un troll ? déterrage de sujet par message anodin puis insertion de lien après coup ...
Dominique
- Administrateur
- Messages : 5957
- Enregistré le : 24 mai 2002 16:55
- Localisation : Toulouse
- Contact :
Re: A programmer un Jeu du serpent
Salut,
Il a échappé à ma vigilance, merci les gars
A+
Il a échappé à ma vigilance, merci les gars
A+
- Dom
- Fonctionne à 2400 bauds
- Messages : 1387
- Enregistré le : 26 oct. 2018 18:45
- Localisation : Ile-de-France
Re: A programmer un Jeu du serpent
Faut dire que la méthode est vicieuse !
Moi, c'est les poquettes, et la Coll'à'Dom, c'est là
-
- Fonctionne à 2400 bauds
- Messages : 1806
- Enregistré le : 03 mai 2003 02:24
- Localisation : Nonglard (Annecy)
- Contact :
Re: A programmer un Jeu du serpent
Haaaa, un de mes premiers programmes que j'avais programmé (totalement en Basic) sur mon PC-1350
Amiga, UNIX
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
Sharp, NetBSD http://destroyedlolo.info/
Apache, PHP 100 % dictionnary free
Vacances, Voyages 1 mispelling by word
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: A programmer un Jeu du serpent
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:
Le jeu permet de 1 à 4 joueurs (si l'on a deux jeux de deux "Commodore paddles"). L'ordinateur joue les vers restant.
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:
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.
- gege
- Fonctionne à 14400 bauds
- Messages : 7148
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: A programmer un Jeu du serpent
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.
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.
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3422
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: A programmer un Jeu du serpent
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...
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.