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

Prolog Discussion :

Jeu du chocolat


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut Jeu du chocolat
    Bonjour à tous,

    J'ai un jeu à faire en prolog c'est le mange savon (connu aussi sous le nom de jeu du chocolat). On dispose d'une tablette de chocolat et dans celle ci il y a un morceau qui est un morceau de savon dans le carré supérieur gauche de la tablette, le but est donc de ne pas manger le savon. Deux joueurs jouent, chacun choisit un carré de la tablette et le mange mais il mange également tous les carrés se situant en bas et à droite de celui-ci. On continue à jouer tant que c'est possible. Un exemple est dispo ici => http://www-leibniz.imag.fr/LAVALISE/Chocolat/Choco1.html

    Le problème c'est que je ne vois pas du tout comment commencer, je ne sais pas d'où partir... est ce qqun pourrait me donner des pistes??
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Et bien, en fait, c'est pas très compliqué à représenter comme problème. Tu n'as que 2 variables:
    - largeur de la tablette de chocolats (en nombre de carrés)
    - hauteur de la tablette de chocolats (en nombre de carrés)

    C'est tout!

    Ensuite, pour la stratégie, il faut (quand c'est possible) prendre les carrés de manière qu'ensuite on ait largeur==hauteur. Ca va, c'est pas trop compliqué à programmer!
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Merci de ta réponse. Mais je me demande comment on peut modéliser les cases qui sont ou ne sont pas déjà mangées??

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    C'est simple: toutes les cases telles que colonne<colonneMangée et ligne<ligneMangée ne sont pas encore mangées. (il te faut vraiment un prédicat pour représenter cela?)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    C'est simple!!! Ca dépend pour qui
    Je vais m'y mettre sérieusement demain je pense et je vais réfléchir à ce que tu m'as dit mais sans trop m'avancer je pense que j'aurai besoin de plus d'aide car je ne sais rien faire ou presque en prolog, j'ai eu 5 cours à tout casser.
    Merci en tous cas.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il suffit de manipuler un tuple (L, C) ou L est le nombre de lignes et C le nombre de colonnes intactes.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    J'imagine déjà la réponse de zorely: "c'est quoi un tuple?"
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    tuple-eux lui expliquer

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Guardian
    tuple-eux lui expliquer

    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par pcaboche
    J'imagine déjà la réponse de zorely: "c'est quoi un tuple?"
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Merci
    Effectivement je ne savais pas ce qu'était un tuple !!! Mais j'ai regarder dans le tutoriel.
    Mais ça ne m'avance pas vraiment. Je vais effectivement utiliser un tuple avec le nombre de lignes et de colonnes mais après comment je vais faire pour modéliser les cases "mangées", est ce qu'il faut que j'utilise des 0 pour mangé et 1 pour non mangé par exemple ou alors est ce qu'il faut que je gère les coordonnées ??
    Je n'ai aucune idée

  12. #12
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Avant de te poser la question de l'implémentation, tu dois te poser la question de l'interface:
    - que doit faire mon programme?
    - quels prédicats seront appelés? avec quels paramètres? quel est le résultat attendu?

    En gros, faire un cahier des charges. Après, on pourra te répondre.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Réfléchis bien à ce qui est important et à ce qui est accessoire, par exemple, les cases mangées ont -elles de l'importance dans la suite du jeu ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Ok merci je vais réfléchir à ça et je pense que je reviendrai quand j'aurai fait ce que vous m'avez conseillé.
    A plus

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Salut!

    Voilà les particularités du projet:
    - les carrés de chocolat sont représentés par leurs coordonnées cartésiennes en suivant la convention (ligne, colonne)
    - le carré supérieur gauche a les coordonnées (0,0)
    - la tablette possède m+1 lignes et n+1 colonnes => la carré inférieur droit a pour coordonnées (m,n)

    Au niveau des fonctions de base, le jeu doit pouvoir permettre de jouer un coup c'est-à-dire de supprimer le carré choisi ainsi que tous les carrés se situant en bas et à droite de celui-ci. Le jeu continue jusqu'à ce que la tablette entière soit mangée. Le perdant est donc celui qui mange le carré supérieur gauche de coordonnées (0,0).

    Je pense donc que seul les carrés de chocolat restant sont interessants car en fait on n'utilise jamais ce qu'on a mangé.

    Voilà

    Merci

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Pas de réponse???

  17. #17
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par zorely
    Pas de réponse???
    Pas de réponse à quoi ? On pensait que t'avais compris et que t'allais savoir te débrouiller tout seul !

    D'ailleurs, t'as même pas fait ce que je t'ai demandé:
    Citation Envoyé par pcaboche
    Avant de te poser la question de l'implémentation, tu dois te poser la question de l'interface:
    - que doit faire mon programme?
    - quels prédicats seront appelés? avec quels paramètres? quel est le résultat attendu?

    En gros, faire un cahier des charges. Après, on pourra te répondre.
    N'espère pas une réponse tant que tu n'auras pas fait cela !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  18. #18
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Pour ce que doit faire le programme j'ai répondu, c'est peut etre pas assez complet???

    Par contre pour le reste je dois bien dire que je ne sais pas.
    Je n'arrive pas à trouver les predicats, j'ai lu le tutoriel qu'il y a sur prolog et plein d'autres trucs comme le code pour le sudoku mais je reste bloquée.
    Je pense que l'orsque le joueur joue un coup, il va donner les coordonnées de la case donc on aura un prédicat avec les coodonnées ou le nom de la case en question, ensuite ce predicat va se charger de supprimer le carré choisi ainsi que tous les carrés se situant en bas et à droite de celui-ci.
    Sinon je pense que pour pouvoir jouer une partie, il faut utiliser l'algo minimax mais je n'en suis pas là encore.

    Le fait que la taille de la plaquette de chocolat ne soit pas fixe me gene. Du coup au début j'ai voulu commencé qqch avec une taille fixe. J'ai voulu faire une grille de 5 lignes, 4 colonnes et de tout initialiser à 1 (1 voulant dire pas mangé) et de l'afficher avec des | et des _ pour faire un tableau, mais je ne sais pas si en faisant cela je suis sur la bonne voie ou si ca ne sert à rien...

    Voilà. Merci

  19. #19
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par zorely
    Je n'arrive pas à trouver les predicats, j'ai lu le tutoriel qu'il y a sur prolog et plein d'autres trucs comme le code pour le sudoku mais je reste bloquée.
    Aucun didacticiel au monde, aussi bien fait soit-il, ne pourra te dire comment concevoir ton interface. Tout juste seront-ils en mesure de suggérer des noms ou de spécifier des conventions de nommage. C'est au développeur de faire ces choix.



    Analyse du besoin:
    Citation Envoyé par zorely
    Je pense que l'orsque le joueur joue un coup, il va donner les coordonnées de la case donc on aura un prédicat avec les coodonnées
    Oui

    Citation Envoyé par zorely
    ensuite ce predicat va se charger de supprimer le carré choisi ainsi que tous les carrés se situant en bas et à droite de celui-ci.
    J'aurais pas dit comme ça. En fait on retourne la nouvelle taille du carré de chocolat, sous la forme d'un tuple: (Largeur,Hauteur)


    Citation Envoyé par zorely
    Sinon je pense que pour pouvoir jouer une partie, il faut utiliser l'algo minimax mais je n'en suis pas là encore.
    Même pas besoin pour un problème aussi simple ! (voir plus loin).

    Citation Envoyé par zorely
    Le fait que la taille de la plaquette de chocolat ne soit pas fixe me gene (...) mais je ne sais pas si en faisant cela je suis sur la bonne voie ou si ca ne sert à rien...
    C'est pas un problème. En effet, ça ne sert à rien.


    Solution:

    On écrit un prédicat case_a_jouer/2, avec:
    - en entrée: la taille de la tablette de chocolat (un tuple)
    - en sortie: la taille de la tablette après avoir jouer (un tuple)

    On suppose que la taille en entrée est cohérente (Largeur et Hauteur sont toutes 2 positives).

    La technique est simple: après chaque coup, il faut que Largeur==Hauteur (pour tendre vers la solution où il n'y a plus qu'un carré). Après, cela dépend si tu tombes sur un adversaire idiot ou pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    case_a_jouer( (1,_), (1,1), (0,0) ) :- !.  % Perdu ;-(
    case_a_jouer( (_,1), (1,1), (0,0) ) :- !.  % Perdu ;-(
     
    case_a_jouer( (L,H), (L, L), (Dim, Dim) ) :-
       L < H, !,
       Dim is L-1.
     
    case_a_jouer( (L,H), (H, H), (Dim, Dim) ) :-
       H < L, !,
       Dim is H-1.
     
    case_a_jouer( (L,H), (L, L), (Dim, Dim) ) :-
      L == H, !,
      Dim is L-1.
    Voilà, c'est tout !

    Edit: correction du code.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  20. #20
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 42
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup, je vais essayer ça et faire l'interface.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47
  2. Réponses: 7
    Dernier message: 18/06/2003, 15h20
  3. [socket][tcp] jeu en reseau
    Par souris_sonic dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2003, 07h31
  4. [C réseau débutant] jeu
    Par Heimdall dans le forum Développement
    Réponses: 6
    Dernier message: 22/05/2003, 13h58
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

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