Jeux simple en assembleur

Résolu/Fermé
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010 - 11 janv. 2010 à 21:28
 Utilisateur anonyme - 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.
A voir également:

17 réponses

Utilisateur anonyme
12 janv. 2010 à 11:25
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.
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 16:40
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 !
0
Utilisateur anonyme
12 janv. 2010 à 16:50
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...
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 18:06
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 ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
12 janv. 2010 à 18:25
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.
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 19:53
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..
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 19:55
la déclaration est fausse je pense. je ne sais pas comment on déclare une valeur numérique
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 20:05
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
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 20:43
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 ?
0
Utilisateur anonyme
12 janv. 2010 à 21:25
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.
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 21:44
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 ?
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
12 janv. 2010 à 21:53
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
0
Utilisateur anonyme
12 janv. 2010 à 23:13
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 ?)
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
16 janv. 2010 à 13:36
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
0
Utilisateur anonyme
17 janv. 2010 à 12:08
Ok, et bien c'est cool alors =)
0
bene54800 Messages postés 26 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 janvier 2010
21 janv. 2010 à 12:40
tu peut me donner ton adresse e-mail pour que je te l'envoi si tu veux...
0
Utilisateur anonyme
21 janv. 2010 à 23:19
Désolé, mais je suis passé sous linux =)
0