IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Jeu de Dames


Sujet :

x86 16-bits Assembleur

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Jeu de Dames
    Bonjour à tous

    On nous a demandé de programmer un jeu de dames et j'y trouve quelques difficultés ; parmi les questions il y a :

    écrire une fonction qui retourne la ligne 1<= i <= 10 d'un numéro N entre 1 et 50

    exemple : pour N=9 alors i=2.Pour N=0 ou N=52 erreur car en dehors de l'intervalle [1,50]

    écrire une fonction qui retourne la colonne 1<=j<=10 d'un numéro N entre 1 et 50

    exemple : pour N=9 alors J=7

    écrire une fonction qui retourne le numéro N correspondant a la ligne i et a la colonne j.

    Votre aide me sera précieuse, merci

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,
    Es-tu sur que tu dois faire ton jeu de dame en assembleur ?
    Voici déjà la manière de déterminer ton I et ton J:
    Pour la ligne I (on ne prend que la partie entière):
    I=((N-1)/5)+1
    Pour la colonne J (toujours en se basant sur la partie entière):
    J=((((N-1)%5)+1)*2)-(((N-1)/5)&1)
    Avec le % pour modulo et & pour et logique.
    A toi de vérifier avant que tu es bien sur l'interval [1,50].
    Cordialement.

  3. #3
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    ton damier fait 5x10 cases ?
    c'est bizarre car tes coordonnées i et j ont 10 valeurs possibles donc 10x10 = 100 cases...

    Si c'est en assembleur x86, DIV permet de faire une division bien pratique car elle renvoie non
    seulement le résultat entier mais aussi le reste.

    ax = N-1
    bl = 10
    div bl
    renvoie : ax = résultat dx = reste

    i = (N/10)+1
    j = (N MOD(10))+1

    le résultat dans ax et dx vont avoir une valeur comprise entre 0 et 9 donc il faut
    ajouter 1 pour avoir la valeur de la case.

    attention, si AX >= 2560 le programme va faire une erreur de "division par 0" car le résultat ne pourra pas tenir dans AL
    (mais normalement ça n'arrivera pas car cette valeur est largement supérieure aux nombres de cases)

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    @Forthman:
    Son damier fait bien 100 cases mais au dames seul compte les case noires (numérotées de 1 à 50).
    Et donc la 9ème case se trouve bien sur la deuxième ligne et la 7ème colonne du carré 10x10.
    Cordialement.

  5. #5
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    ah... on voit de suite que je ne sais pas jouer aux dames

    donc il faut faire une division par 5 pour avoir la ligne
    et le modulo par 5 * 2 pour la colonne en ajoutant 1 si la ligne est impaire (ou paire, suivant la couleur de la première case)

    J'ai tout bon là ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,
    Es-tu sur que tu dois faire ton jeu de dame en assembleur ?
    Voici déjà la manière de déterminer ton I et ton J:
    Pour la ligne I (on ne prend que la partie entière):
    I=((N-1)/5)+1
    Pour la colonne J (toujours en se basant sur la partie entière):
    J=((((N-1)%5)+1)*2)-(((N-1)/5)&1)
    Avec le % pour modulo et & pour et logique.
    A toi de vérifier avant que tu es bien sur l'interval [1,50].
    oui je dois le faire en assembleur , merci de m'avoir aidé!!!

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Forthman Voir le message
    ah... on voit de suite que je ne sais pas jouer aux dames

    donc il faut faire une division par 5 pour avoir la ligne
    et le modulo par 5 * 2 pour la colonne en ajoutant 1 si la ligne est impaire (ou paire, suivant la couleur de la première case)

    J'ai tout bon là ?
    merci Forthman!

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    La première case est blanche.

    Si on divise juste par 5 alors:
    N=4 => I=0
    N=5 => I=1 (pas bon, la cinquième case est sur la même ligne que la quatrième)

    Même problème pour les colonnes:
    N=9 => I=9 mod(5) *2=4*2=8 (FAUX)
    ou dans l'autre cas:
    N=9 => I=(9mod(5)*2)+1=9 (FAUX)

    Et si on essaye avec -1 au lieu de +1
    N=9 => I=(9mod(5)*2)-1=7 (VRAI)
    N=10 => I=(10mod(5)*2)-1=-1 (FAUX devrait donner 9)

    Non, pas si simple (voir mes solution dans mon premier post).
    Cordialement.

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Ok Ok !

    Bon, alors je me suis fait un petit dessin pour visualiser le truc

    Le problème avec ton calcul c'est que c'est pas évident à transformer en assembleur

    Voici donc comment je ferais les choses :

    A=(N-1)*2 (je retombe sur un tableau de 100 cases avec adressage deux cases par deux )

    I = A/10+1
    J = (A MOD 10 )+ 1 (+1 si I est impair)

    là on voit directement le code non

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Cela fait très longtemps que je n'ai pas fait d'assembleur mais:
    I=((N-1)/5)+1
    C'est juste:
    ax = N -1
    bl=5
    div bl
    inc ax
    resultat dans ax.

    J=((((N-1)%5)+1)*2)-(((N-1)/5)&1)
    C'est juste:
    ax = N-1
    bl = 5
    div bl
    inc ax
    un décalage à gauche de ax (pour la multiplication par 2)
    un and 1 sur dx
    soustraire dx de ax
    Resultat dans ax.
    Cordialement.

  11. #11
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Je crois que c'est bon, on lui a fait l'exo

    moi je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    (al=N)
    dec al
    xor ah,ah
    cmp ax,50
    jns erreur ; si valeur >49 erreur
    shl al,1
    mov bl,10
    div bl
    inc al
    inc ah
    test al,1
    jz suite
    inc ah
    suite:
     
    ( al=i et ah=j)
    Ok, j'aurais pu utiliser des registres 16 bits, mais le tableau est tout petit

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci de m'avoir éclairé vous m'avez été d'une grande aide!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jeu de dame en c
    Par MALAKFATINE dans le forum Projets
    Réponses: 1
    Dernier message: 18/09/2006, 10h34
  2. créer jeu de dame en C
    Par SAMUELSalbert dans le forum C
    Réponses: 11
    Dernier message: 31/07/2006, 21h33
  3. Code source en c d'un jeu de dames
    Par ledawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 33
    Dernier message: 22/05/2006, 09h54
  4. [Jeu de dames]Enregistrer les règles...
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/11/2005, 20h39
  5. probleme pour un jeu de dames en python
    Par doudou152 dans le forum Général Python
    Réponses: 7
    Dernier message: 22/04/2005, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo