Téléchargement
illégal
Posez votre question Signaler

Jeux simple en assembleur [Résolu]

bene54800 26Messages postés 17 octobre 2008Date d'inscription - Dernière réponse le 21 janv. 2010 à 23:19
Bonjour, je suis étudiant et je dois réaliser un jeu simple (un personnage qui se dirige) en assembleur sous radasm.
J'ai affiché un personnage (pacman que mon collègue à fait)
nous avons a peut près réussis a faire un labyrinthe pour qu'il évolue.
Mais j'ai un problème, je ne parvient pas a faire bouger l'image correctement, je m'explique:
j'ai procédé de la manière suivante:
1- afficher l'image a partir d'un point de départ
2- suprimmer l'image
3- bouger le point de départ
4- construire l'image (tjs la même) a partir du nouvel origine
Mais lorsque je bouge l'image (15*15 pixel) elle se reconstruit jamais droite c'est à dire que si j'ajoute 15 à dx par exemple (dx: coordonné de Hauteur Y)
et bien le l'image ne monte/descend pas parfaitement, elle est décalé a droite ou a gauche. j'essaye de bidouiller mais je n'y arrive pas
De plus, Je souhaiterait avoir une idée pour le faire s'arrêter lorsque qu'il rencontre un mur... car je n'est aucune idée de comment l'empêcher de traverser les mur.
J'espere avoir été clair, merci d'avoir pris le temps de lire.
Lire la suite 

Jeux simple en assembleur »

17 réponses
Réponse
+0
moins plus
Bonjour,


vérifie que tu spécifies bien le type de tes variables de position.

Du genre, précise mov ax, dword:[variableposX] si tu as défini la variable comme un dword (dd)

Une fois j'avais un problème à cause de ça.

Sinon, pour les collisions c'est très simple, a chaque fois qu'une action est lancée, aller d'un pixel à gauche par exemple, avant de repeindre le pixel tu vérifies que tes positions mur et positionX - 1 ne sont pas égales.
Ajouter un commentaire
Réponse
+0
moins plus
Salut, dsl de pa répondre vite mais je travaille beaucoup sur le jeux...

Donc j'ai réussis a faire bouger mon perso dans son labyrinthe (j'ai jouer sur la couleur du pixel d'après)

J'ai un nouveau problème je voudrais faire évoluer 2 personnage est donc stocker les coordonné de chacun en temps réel. Je m'explique:

1) bouger le 1er perso
2) sauvegarder sa nouvel position
3) bouger le 2eme perso
4) sauvegarder sa nouvel position

Le principe est assez simple me direz vous et la solution aussi je pense mais je ne trouve pas. Il me suffit de stocker les valeur de dx et cx ( cx et dx sont des coordonnées)
J'ai donc essayé : mov dx, variable1
mov cx, variable2

variable1 db 0 dup(0FFH)
variable2 db 0 dup(0FFH)

Mais sa ne marche pas.

Pour simplifié mon problème : Je ne sais pas comment stocker dx et cx dans des variable !
Ajouter un commentaire
Réponse
+0
moins plus
essaye mov dx, byte[variable1]
et mov cx, byte[variable2]

C'est ce que te disais plus tot. Le compilateur n'a aucun moyen de connaitre la taille de tes variables. Or tu dois quand même lui indiquer, grace a la taille suivie de crochets.

Pour sauvegarder :

mov byte[sauvegarde1], byte[variable1]
mov byte[sauvegarde2], byte[variable2]


Si c'est ce que tu veux... Mais je n'en vois pas l'interet.

Apres, pourquoi mets-tu un DUP() apres ta déclaration de variable ?
DUP est pour un tableau, or il n'y en a pas besoin la je crois...
Ajouter un commentaire
Réponse
+0
moins plus
Je vien d'arrivé chez moi, je vais manger un petit truc pi je mis met, je te tiens au courant.

eu juste, je les déclare : variable1 db ??
Ajouter un commentaire
Réponse
+0
moins plus
variable db ?


puisqu'au départ tu ne sais pas quelle valeur mettre dedans.
Sur mon site, peu complet d'ailleurs, va dans la section sources, et télécharge le projet "graph" tu auras la source, comme ça ca te donne certaines info, comment je l'ai fait etc...

C'est de l'asm 16 bits sous x86.
Ajouter un commentaire
Réponse
+0
moins plus
Re, alors j'ai essayé : mov byte[variable1] ( déclaration: variable1 db)
mov byte[variable1] ( déclaration: variable1 dw)
mov variable1 ( déclaration: variable1 db)
mov variable1 ( déclaration: variable1 dw)

et j'ai a chaque une erreur : pgp.asm(3868) : error A2006: undefined symbol : variable1

Je suis a bout..
Ajouter un commentaire
Réponse
+0
moins plus
la déclaration est fausse je pense. je ne sais pas comment on déclare une valeur numérique
Ajouter un commentaire
Réponse
+0
moins plus
je vien de dl ton programme ozox, c'est pas mal jolie !!! lol

je vais voir un peu comment tu as fait pi je vais essayer de continuer, fait moi signe quand tu est la
Ajouter un commentaire
Réponse
+0
moins plus
Alors grâce a ton programme j'ai vu que je n'avais pas de segment data... je débute en assembleur et honnêtement je ne savais pas qu'il fallait en mettre un.

mon ancien:
assume cs:cseg,ds:cseg,ss:cseg
cseg segment

TOUT MON PROGRAMME

cseg ends


Nouveau assume
cs:cseg,ds:data,ss:cseg
cseg segment

TOUT MON PROGRAMME

cseg ends
data segment
variable1 dw ?
variable2 dw ?


Mais ces instructions ne marche toujours pas:
mov dx[variable1] pgp.asm(3871) : error A2008: syntax error : in instruction
mov dx, byte[variable1] pgp.asm(3871) : error A2009: syntax error in expression

Celle-ci marche:
mov dx, variable1

est-ce-que la valeur de dx se retrouve dans variable1 ?
Ajouter un commentaire
Réponse
+0
moins plus
Bizarre...

En tout cas, ss:cseg est faux. Dans tout programme il faut une pile.

Attention aussi, le langage asm dépend du processeur, mais aussi du compilateur. Cette synthaxe que je t'expliquet correspond au compilateur TASM.
Ajouter un commentaire
Réponse
+0
moins plus
je suis sur le 8086, avec radasm, MASM

alors j'ai réussis a stocker en faisant: mov variable1, dx
mais je ne sais pas si on peut récrire sur variable1 paske j'ai fait quelque test non concluant...

Je dois mettre quoi a la place de ss:cseg ?
Ajouter un commentaire
Réponse
+0
moins plus
La variable se sotck bien ça marche niquel, mais j'ai l'impression que quand la valeur est modifié et que je la restock et bin elle ne se stock pas
Ajouter un commentaire
Réponse
+0
moins plus
ss:pile


Et plus bas tout a la fin mais avant end begin tu mets ça :

pile segment stack

Var 256 db DUP(?)

pile ends

end begin ( begin est en fait le nom de ton premier label ok ?)
Ajouter un commentaire
Réponse
+0
moins plus
Salut, désolé de répondre aussi tard mais j'ai terminer le jeux !!! =)

Pour la pile j'ai fait ce que tu ma dit OZOX. Enfin Je me suis aussi servis du programme sur ton sité, c'est surtout ça qui ma aidé, c'est pour ça que je veux te dir un gros merci paske j'ai eu 20/20 a mon jeux !!!! =)

Si tu veu laisse moi ton e-mail je te l'envoi.

merci pour tout a bientot peu etre
Ajouter un commentaire
Réponse
+0
moins plus
Ok, et bien c'est cool alors =)
Ajouter un commentaire
Réponse
+0
moins plus
tu peut me donner ton adresse e-mail pour que je te l'envoi si tu veux...
Ajouter un commentaire
Réponse
+0
moins plus
Désolé, mais je suis passé sous linux =)
Ajouter un commentaire
Ce document intitulé « jeux simple en assembleur » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?