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 Quarto : prédicat pour placer pièce sur une case vide


Sujet :

Prolog

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 54
    Points
    54
    Par défaut Jeu Quarto : prédicat pour placer pièce sur une case vide
    Bonjour,

    Je dois coder en Prolog le jeu Quarto. Le but du jeu est d'aligner 4 pièces ayant au moins un point commun entre elles, sauf qu'à chaque coup c'est le joueur adversaire qui choisit la pièce que vous devez placer sur le plateau du jeu.
    http://fr.wikipedia.org/wiki/Quarto

    J'ai déjà défini les cases, les pièces et les stratégies gagnantes.

    Maintenant, je dois créer un prédicat qui me permette de placer une pièce(la pièce choisie par l'adversaire) sur une case vide (sur laquelle il n'y a pas de pièce). Mais je ne vois pas comment m'y prendre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    % on définit chaque case
    case([1,1]).
    case([1,2]).
    % etc.
     
    % les 4 paramètres qui définissent une pièce
    piece(clair,petit,carre,plein).

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 71
    Points : 63
    Points
    63
    Par défaut
    tu peux donner plus de précision sur le sujet car comme possibilité moi je crée une liste de toutes les cases possible et j'applique le prédicat qui donne le gagnant
    genre([A,Z,E,.......],R). je vérifie les contraintes possible
    et R=1 si le joueur 1 gagne
    R=2 si le joueur 2gagne

    et pour savoir si une case est vide moi je crée une liste avec des variable qui prendront la valeur v pour vide et je les modifie dans le seul cas si leur valeur est v
    mais je pense que Trap D va avoir une solution mieux que la mien

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    Moi comme stratégie gagnante j'ai par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    % Si 4 pieces sont alignées 
     
    ligneGagnante([1,1],[1,2],[1,3],[1,4]).
    Mon problème c'est pour écrire le prédicat qui va permettre à mon joueur de placer le pion fournie par l'adversaire sur une case vide.
    Je ne vois pas du tout comment je dois faire

  4. #4
    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 Boss38400 Voir le message
    mais je pense que Trap D va avoir une solution mieux que la mien
    Merci de me faire confiance
    Je n'ai pas beaucoup de temps actuellement et se plonger dans la stratiégie d'un jeu est autre chose que de conseiller sur le Prolog.
    Simplement, pour une case on peut simplement écrire
    case(1,2) au lieu de case([1,2]).

    Après réflexion comment est codé le plateau de jeux ?
    Il me semble qu'une liste de 16 cases est suffisante, length(L, 16) pour l'initialisation.
    Il faut écrire les accesseurs et tester si la case est occupée ou non (utilisation de var(X)).
    Ensuite on écrit les différents prédicats pour accéder aux différentes lignes, colonnes et diagonales.
    Il faut aussi coder la description de chaque pièce en fonction des critères.
    Pour la saisie de l'emplacement choisi par l'adversaire tu peux faire comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	write('Ligne   : '), read(L),
    	write('Colonne : '), read(C),
    	write('Piece   : '), read(P),
    	% calcul de l'indice Ind dans la liste à partir de L et C
    	% (c'est l'accesseur dont je parlais avant)
    	% verification que l'emplacement est libre
    	% si oui
    	nth0(Ind, L, P),
           ................
    "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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Points : 54
    Points
    54
    Par défaut
    L'emplacement n'est pas choisi par l'adversaire. L'adversaire choisit uniquement une piece pour le joueur. Puis, le joueur place où il veut cette piece sur une case du plateau (à condition qu'elle ne soit pas vide bien sûr).

    Je n'ai pas trop bien compris le rôle de l'accesseur (ou indice) Ind que je dois calculer à partir de L et C.

    Avec nth0, ce que j'ai compris c'est que l'on affiche la valeur de l'élément P qui se trouve à l'indice Ind

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    % je dois ecrire un prédicat comme ci dessous c'est à dire avec ces paramètres ?
     
    poserpion([L,C],Pion) :-

  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
    Je voulais simplement dire "je joue en ligne 3 colonne 4" donc il faut un prédicat d'accès qui calcule la case correspondante de la liste des cases du plateau.
    "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

Discussions similaires

  1. Quel nom pour le contenu d'une case vide?
    Par byrdo dans le forum Débuter
    Réponses: 6
    Dernier message: 23/08/2012, 17h56
  2. [VBA-E] Dbl Click sur une case pour afficher le contenu d'un USERFORM
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2007, 10h41
  3. créer bouton pour enregistrer BDD sur une page
    Par guimauve dans le forum Access
    Réponses: 3
    Dernier message: 11/07/2006, 11h01
  4. Err $251E avec le BDE... pour un prog sur une becane...
    Par Harry dans le forum Bases de données
    Réponses: 14
    Dernier message: 11/04/2006, 17h59
  5. [DELPHI6][MySQL 4.1.11] Pb pour se connecter sur une base My
    Par Desraux dans le forum Bases de données
    Réponses: 3
    Dernier message: 04/06/2005, 10h43

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