60

tu peux faire un tableau qui represente la map (mais ca revient au meme qu'une liste de coordonnées)

moi j'avais fait un curseur qui se déplacait dans le tableau de coordonnées(c'est la methode classique, non?

ou enregistrer que les directions, avec la position a l'instant t et la longueur ca doit suffire....

61

j'en avait fait en BASIC, si tu veux les sources, demande smile

62

> euh mais comment tu sais ou est la queue si t'a pas sauvegarder les positions?... dit moi quand meme si j'ai mal compri le probleme...

nouvelle_position_queue=position_queue+table_déplacement[sprite[position_queue]];

avec table_déplacement[SPRITE_GAUCHE]=-1,table_déplacement[SPRITE_BAS]=sizeof(LINE) ...
sinon, ton snake (celui a pollux), c'est bien qu'il soit arrondi mais tu modifie pas l'image a chaque fois que le serpent avance d'un pixel mais plutot de 4 ou 6 pixel... c'est assez moche... par contre les menus sont bien joli et j'ai la flemme d'en faire des aussi bo, (et j'sais pas si je le peux)..

Tu trouves ça moche? Ca apporte quand même bcp plus de maniabilité (sinon dès que le serpent avance de 1 pixel par rapport à sa case on est obligé de compter la case comme occupée => l'utilisateur a un demi frame de retard par rapport à la calc...)
Et en plus c ce que fait Nokia smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

63

ah ouais effectivement c'est pas stupide... ceci dit la vitesse d'execution d'un snake c'est pas le principal ca va toujours trop vite...
Tu trouves ça moche? Ca apporte quand même bcp plus de maniabilité (sinon dès que le serpent avance de 1 pixel par rapport à sa case on est obligé de compter la case comme occupée => l'utilisateur a un demi frame de retard par rapport à la calc...) Et en plus c ce que fait Nokia


oui c'est moche , en plus tu peux tester les touches appuyés a chaque avancée d'un pixel sans modifier la direrction, et puis t'es pas obligé de visualiser ta map en case (regarde mon snake j'ai utilisé des pixeltest) et la maniabilité n'est pas forcement altéré (ca c'est un avis perso)

64

sinon, ton snake (celui a pollux), c'est bien qu'il soit arrondi mais tu modifie pas l'image a chaque fois que le serpent avance d'un pixel mais plutot de 4 ou 6 pixel... c'est assez moche... par contre les menus sont bien joli et j'ai la flemme d'en faire des aussi bo, (et j'sais pas si je le peux)..
Le serpent n'avance pas toujours d'un seul pixel. En fait j'en ai jamais vu qui faisaient ça, mais c'est vrai que ça doit être joli... et consommer pas mal de puissance! Ceci dit en C... J'ai tellement été impressionné la première fois! Par rapport à mon snake basic qui tournait vraiment pas très vite... Mais j'ai vu des snakes BASIC qui tournaient très bien. Et je serais curieux de connaître une méthode plus intelligente qui ne rame pas si le snake est trop gros. Ce que je fais:
liste[longueur_snake]=mouvement_snake;
memmove(liste,liste+1,longueur_snake-1);
mouvement_effaceur=liste[0];
Vous l'aurez compris... c'est très lent. Je faisais shift en BASIC avec une chaîne de caractères. En fait je me rappelle plus. Peut-être que c'était:
mid(chaine,2)->chaine
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

65

Je me suis tapé un super-bug particulièrement vicieux dans mon snake en C!
char liste[1000]; //Serpent fera max. 1000 de longueur...
...
memmove(liste,liste+1,longueur_snake);
Et là chaque fois je déplaçais un octet qui se trouvait après la liste (non-initialisée) ce qui faisait qu'au bout de 1000 mouvements, le snake buggait comme un damné! (Le pire aurait été si j'avais stocké les coordonnées du snake grin)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

66

Hmm, dans vos snake, vous stockez les obstacles dans une map ou pas ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

67

Oui. Tu peux tester les pixels si tes obstacles sont carrés, mais c'est plus "propre" d'utiliser une matrice contenant l'écran (par conséquent les obstacles) pour les détecter...
Sur TI, tu peux facilement tester les pixels, mais si tu commences à faire ça sur PC, tu es vite cuit grin
Cependant, en BASIC, ça m'étonnerait beaucoup que tu puisse faire ça avec une matrice (trop lent) donc là il faut tester les pixels triso.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

68

Ça aurait été jouable avec une matrice si la lecture des élements "loins" n'était pas si lente sad
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

69

En fait je posais cette question parce que je me suis rendu compte qu'avec la méthode de yAro, si c'est bien celle que je pense, on pouyvait économiser pas mal de mémoire et permettre au snake une longueur quasi infinie donc. Je vais essayer ça dans mon snake et voir ce que ça donne
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

70

Oui ma methode rame pas presk a l'infini ..... en theorie ... g pas encore testé (feignasse grin)
avatar
Webmaster et développeur du site. Pour tout probleme ou question envoyez un mini message ou mail.

Suivez l'actualité de tous vos site préférés sur yAronews : http://ns.yaronet.com =)

71

La méthode avec les memmove est très mauvaise. Et je ne vois pas pourquoi la méthode classique (qui doit être expliquée dans ce topic je crois) ramerait quand le serpent s'allonge ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

72

classique == tableau des coordonnées ?

73

de tout les points du serpent ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

74

de tout les points du serpent ?
Tu peux stocker toutes les coordonnées, c'est tout à fait faisable, mais ça prendrait plus de place... En fait déjà si tu stockes les coords x et y, tu vas *en tous cas* prendre deux octets. Tandis qu'en utilisant une solution stockant juste les mouvements du snake (il a été à gauche, puis en haut, puis en haut, etc.) on n'utilise qu'un seul octet (et encore 2 bits pour stocker 4 possibilités wink)
La méthode avec les memmove est très mauvaise
Pourquoi? Franchement j'ai beau chercher je ne trouve pas d'autre solution...
Parce que c'est quoi la méthode de yAro?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

75

Ben selon moi, tu as ta map en mémoire. Là où est le serpent, tu marque donc "serpent", et tu marques "bonus" là où il y a un bonus, "mur" là où il y à un mur. Mais au lien de mettre simplement "serpent", tu mets "serpent_haut", "serpent_bas", etc... Et si tu utilise des 'char' pour faire ça tu peux faire un masque de bits qui dirait par exemple:
bit 0: mur
bit 1: serpent
bit 2: bonus
bit 3: super bonus
bit 4-5: direction (seulement pour le serpent)
...
Donc tu stocke:
-ta map (chargée en RAM pour pouvoir la modifier)
-la position de début du serpent
-la direction du serpent
-la longueur du serpent
-la position de fin
Et pour avancer, tu effaces le bloc de fin de l'écran, puis tu lis le bloc de la position de fin puis tu l'effaces (...), là tu mets à jour la position de fin à l'aide des bonnes infos comme tu le ferais pour la position de début.
Ensuite, tu fais avancer la tête (où dans l'ordre inverse si tu veux)

Je me suis pas trompé ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

76

Heu...
Tu dois aussi stocker tous les mouvements que le snake a fait entre temps non? Là tu l'as pas compté dans les éléments à stocker.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

77

Non, c'est ça l'astuce. Si tu regarde ce que j'ai écrit: la direction est stockée dans la map pour chaque bloc qui appartient au serpent...
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

78

Tu les stockes au fur et à mesure.

79

Non, c'est ça l'astuce. Si tu regarde ce que j'ai écrit: la direction est stockée dans la map pour chaque bloc qui appartient au serpent...
Très bien. C'est vrai que c'est simple... et efficace smile
Je me demande d'ailleurs si Nokia utilisent cette méthode hum2
Ca évite en tous cas d'allouer 1 million pour la longueur du snake ou bien de mettre un message:
ERREUR!
Le snake est trop long. Veuillez arrêter de jouer. Merci de votre compréhension.
Cependant ce serait peut-être un peu lent à faire en BASIC non?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

80

En BASIC ce serait lent parce que les matrices du BASIC sont des listes chainées et non pas des tableaux comme en C, mais au moins en BASIC, la vitesse serait la même tout le temps, elle ne diminuerait pas en fonction de la longueur du serpent, comme ça le ferait si tu utilisais une simple liste.

81

jackiechan
: En BASIC ce serait lent parce que les matrices du BASIC sont des listes chainées et non pas des tableaux comme en C, mais au moins en BASIC, la vitesse serait la même tout le temps, elle ne diminuerait pas en fonction de la longueur du serpent, comme ça le ferait si tu utilisais une simple liste.
Justement. Et bon, mon collègue utilisait l'excuse que "c'est normal que quand le snake est plus grand ça va moins vite, c'est pour vous laisser une chance de gagner sinon ça va trop vite..." smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

82

Les matrices du BASIC ne sont ni des tableaux, ni des listes chaînées. Ce sont des tableaux à éléments de taille variable, donc ils ont les désavantages des 2. grin

Non, sérieusement, le grand avantage est que c'est une forme de stockage plus compacte quand les éléments peuvent avoir des tailles arbitraires. Mais ça se paye en vitesse, et aussi en la taille du code de traîtement (next_expression_index est énorme, heureusement que c'est dans AMS).

Et je précise aussi les désavantages auxquels je faisais allusion:
* Il faut un memmove pour insérer ou supprimer, comme pour les tableaux.
* Il faut tout parcourir pour trouver un élément, comme pour les listes chaînées.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

83

C'est vraiment mauvais. D'ailleurs lorsque tu parcours une liste du début à la fin pour faire un traitement (les listes étant écrites à l'envers triso) tu remarques bien qu'au début ça va méga-lentement et qu'à la fin la vitesse de traitement de chaque élément peut doubler voire tripler.
next_expression_index est énorme, heureusement que c'est dans AMS
Effectivement. D'ailleurs, je me demandais un truc...
Est-ce qu'il y a un moyen d'obtenir un élément (entier ou float) depuis l'estack, ceci quel que soit son format? Je veux dire, si tu fais appel:
prog(53/3)
Tu puisse recevôir 14.333 ou bien à la limite 14? Tout comme si tu faisais prog(14.1)... Flib fait ça je crois mais c'est plus que lent... j'appellerais cette fonction que si je ne connais vraiment pas le type du prochain argument pour éviter de tout ralentir.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

84

Comment se fait-il que next_expression_index soit énorme ?
Comment fonctionne précisément ce ROM_CALL ?

85

Si c'est un entier, une fraction ou un flottant, tu peux utiliser estack_number_to_Float. Si ça peut aussi être un truc du style pi/4 ou e^3, il faudra utiliser NG_approxESI, puis GetFloatArg ou estack_number_to_Float.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

86

jackiechan :
Comment se fait-il que next_expression_index soit énorme ? Comment fonctionne précisément ce ROM_CALL ?

Il parcourt toute l'expression formelle (en parsant le format tokénisé) pour trouver la prochaîne.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

87

Ben c'est normal, vu le nombre de types de données disponibles sur TI... Il doit tous les connaître pour savoir comment les passer.... Ils ne finissent pas tous par un END_TAG smile
Ce rom call ne demande aucun argument et fait juste pointer top_estack sur la prochaine expression.
Mais je laisserai à Kevin le soin de répondre à ta question, il en sait sûrement plus.
[Edit]Ah ben Kevin a posté pdt que j'écrivais grin
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

88

En gros NG_approxESI puis GetFloatArg fonctionnera à tous les coups (mais sera lent) ?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

89

Oui.
Mais si l'expression est courte (un flottant seul par exemple), ça ne sera pas si lent que ça.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

90

Puis ce n'est pas si lent que ca ... c'est un parcours d'arbre je pense (enfin, je verrais stocké ça comme ca moi)