Jeux simple en assembleur

Résolu
bene54800 Messages postés 26 Statut Membre -  
 Utilisateur anonyme -
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.
Configuration: Windows XP
Firefox 3.5.7

17 réponses

  1. Utilisateur anonyme
     
    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
  2. bene54800 Messages postés 26 Statut Membre
     
    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
  3. Utilisateur anonyme
     
    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
  4. bene54800 Messages postés 26 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. bene54800 Messages postés 26 Statut Membre
     
    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
  8. bene54800 Messages postés 26 Statut Membre
     
    la déclaration est fausse je pense. je ne sais pas comment on déclare une valeur numérique
    0
  9. bene54800 Messages postés 26 Statut Membre
     
    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
  10. bene54800 Messages postés 26 Statut Membre
     
    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
  11. Utilisateur anonyme
     
    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
  12. bene54800 Messages postés 26 Statut Membre
     
    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
  13. bene54800 Messages postés 26 Statut Membre
     
    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
  14. Utilisateur anonyme
     
    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
  15. bene54800 Messages postés 26 Statut Membre
     
    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
  16. Utilisateur anonyme
     
    Ok, et bien c'est cool alors =)
    0
  17. bene54800 Messages postés 26 Statut Membre
     
    tu peut me donner ton adresse e-mail pour que je te l'envoi si tu veux...
    0
  18. Utilisateur anonyme
     
    Désolé, mais je suis passé sous linux =)
    0