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

Langage Delphi Discussion :

Introduction aux jeu de Dames


Sujet :

Langage Delphi

  1. #21
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Oui merci, je vais essayer de faire le plus possible pour ce qui est de la propreté et des "rajouts" de function. Mais étant donné que je suis en plein examens et que je doit surtout avancer, je ne peux pas tout promettre (ce qui est tout à contraire à de la fainéantise ou du rejet de conseils ...

    En tout un grand merci, j'y retourne de ce pas ...

  2. #22
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par ptitlog Voir le message
    Oui merci, je vais essayer de faire le plus possible pour ce qui est de la propreté et des "rajouts" de function. Mais étant donné que je suis en plein examens et que je doit surtout avancer, je ne peux pas tout promettre (ce qui est tout à contraire à de la fainéantise ou du rejet de conseils ...
    Bien sur, les examens d'abord !

  3. #23
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Oui bien sûr, mais mon projet est l'un de mes examens justement ...

    Sans le TForm1, le programme ne veut plus se lancer, alors je l'ai laisser ...

    J'ai regarder attentivement vos suggestions et à seulement quelques jours de la présentation oral du projet, je le sens vraiment mal de mettre des case of et de changer les abort ...

    Donc je viens de créer une fonction avec les quelques feuille que j'ai dans le cours (pas eu de pratique) et les quelques tutos pour voir où bien la placer. Bon en étant donné que Mick605 avait fait fait presque tout mon boulot, j'ai quand même essayé (bien sur) et le résultat est toujours le même, les uns sont bloqués et les autres pas et ça, quoi qu'il se passe ...
    Je ne sais vraiment d'où vient l'(les)erreur(s) ... (NbTours d'abord 1 ou 0 et Resultat d'abord à True ou false ==> le résultat est le même ... donc ?)

    Voici le code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, extctrls, Menus, StdCtrls;
     
    type
      TForm1 = class(TForm)
        DrawGrid1: TDrawGrid;
        MainMenu1: TMainMenu;
        Menu1: TMenuItem;
        Nouvellepartie1: TMenuItem;
        N1: TMenuItem;
        Quitter1: TMenuItem;
        Rglesdujeu1: TMenuItem;
        procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure Quitter1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Nouvellepartie1Click(Sender: TObject);
        procedure Rglesdujeu1Click(Sender: TObject);
        procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Déclarations privées }
      public
        procedure VerifierJoueur;
        procedure VerifierCasesPossibles;
        procedure VerifierSiCaseNoir;
        procedure ChangementsCouleur;
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
    var ColSelect, RowSelect, x1, y1, x2, y2, NbTours : Integer;
        premierClic, blanc: Boolean;
        tabDamier : array [0..9,0..9] of integer;
        // Le damier en (colonne, ligne).
        // Les indices vont de 0 à 9 pour correspondre au DrawGrid.
        // Les valeurs possibles dans le tableau sont
          // 0 : case vide
          // 1 : case noire
          // 2 : pion blanc
          // 3 : pion noir
     
    {$R *.dfm}
     
    function Joueur : boolean ;
    var Resultat : boolean;
    begin
      if (NbTours mod 2)=0 then Resultat:=True
                           else Resultat:=False;
      Joueur:=Resultat;
    end;
     
    //-----------------------------------------------------------------------------
    procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
     
    ...
     
    //-----------------------------------------------------------------------------
    procedure TForm1.VerifierJoueur;
    begin
    //Ne fais rien comme c'est au deuxième joueur de jouer.
      if Joueur=false then
      begin
      if (tabDamier[x1,y1] = 3) then
        Abort;
      end
    //Ne fais rien comme c'est au premier joueur de jouer.
      else
      begin
      if (tabDamier[x1,y1] = 2) then
         Abort;
      end;
    end;
    J'ai mis tout le début pour être de voir si j'ai déjà mis la fonction au bon endroit. Et bien sur, je n'oublie pas de faire appel à VerifierJoueur par après.

    J'espère ne pas paraitre têtu ou féneant, mais le fait de peut-être louper mon projet de fin d'année me hante ...

  4. #24
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    J'ai aussi vu beaucoup d'exemple (dans mon cours et sur internet) comme quoi les fonctions s'utilisaient plutôt comme ça :

    Function voyelle (chaine:string : integer;

    Et je n'ai pas vu l'utilisation de var ...

    Et j'ai aussi vu dans mon cours qu'on utilisait les procédure quand on affichait plusieurs résultats et les fonctions pour 1 seul résultat. Mais je doit bien avouer que malheureusement je ne maitrise pas bien ces deux éléments très important (indispensable) de Delphi ...

    Bonne soirée à tous.

  5. #25
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par ptitlog Voir le message
    J'ai aussi vu beaucoup d'exemple (dans mon cours et sur internet) comme quoi les fonctions s'utilisaient plutôt comme ça :

    Function voyelle (chaine:string) : integer;

    Et je n'ai pas vu l'utilisation de var ...
    En fait, on met en Argument des valeurs que l'on veut faire "passer" a la fonction (ou a la procedure). Ensuite, il se peut tres bien que pour retourner quelque chose, on ait besoin de variables internes pour les calculs ! C'est exactement comme un programme ... L'avantage, c'est que ces variables n'existent QUE dans la fonction, c'est a dire que dans une autre procedure, tu peux tres bien déclarer une variable du meme nom ...

    Citation Envoyé par ptitlog Voir le message
    Et j'ai aussi vu dans mon cours qu'on utilisait les procédure quand on affichait plusieurs résultats et les fonctions pour 1 seul résultat. Mais je doit bien avouer que malheureusement je ne maitrise pas bien ces deux éléments très important (indispensable) de Delphi ...
    Alors, le plus souvent, j'essaye de faire des fonctions, car je n'ai besoin que d'une seule valeur. Mais il est possible de renvoyer plusieurs valeurs, en changeant un peu les arguments : par exemple, en mettant un argument en mode "var", il est possible de modifier la valeur de cetr argument dans la procédure, chose impossible si il n'y a pas de mode ou si c'est en mode "const"

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure Incrementer(Valeur :integer)
    begin
      inc(Valeur);
    end;
     
    procedure principale
    var Nombre :integer;
    begin
      Nombre:=1;
      Incrementer(Nombre);     //ici, nombre ne vaut pas 2 !!
     
    end;
    Tandis que ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure Incrementer(Var Valeur :integer)
    begin
      inc(Valeur);
    end;
     
    procedure principale
    var Nombre :integer;
    begin
      Nombre:=1;
      Incrementer(Nombre);     //ici, Nombre vaut 2
     
    end;
    ... fonctionne.
    Ainsi, il est possible de déclarer plusieurs arguments en mode "var" pour changer leur valeurs a tous !
    Mais je ne pense pas que cela soit utile pour ton programme !!

  6. #26
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Oui, mais c'est toujours bon à savoir ...

  7. #27
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Voilà j'ai enfin trouver pour le tour par tour ... (en vous remerciant fortement )

    Maintenant je m'attaque à la suppression d'un pion quand on passe au dessus (si la couleur est différente) ...

    J'ai ma petite idée, sur comment réussir mais je reviendrais poster dans tous les cas plus bard ...

  8. #28
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par ptitlog Voir le message
    ... Maintenant je m'attaque à la suppression d'un pion quand on passe au dessus (si la couleur est différente) ...
    De toutes facons, si la couleur est la meme, tu n'as pas le droit de faire ce mouvement ...

  9. #29
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Voici l'idée que j'ai eu pour verifier et changer s'il y avait un pion à "supprimer" ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.VerifierSiSauterPionBlanc;
    begin
      if (tabDamier[x1+1,y1+1] = 2) or (tabDamier[x1-1,y1+1] = 2) then
      begin
        tabDamier[x1+1,y1+1]:=1;
        tabDamier[x2,y2]:=3;
      end;
    end;
    (C'est juste un test)

    Mais sur cette image, les pions blancs situé en [3,6], [5,6], [7,6] peuvent bouger. Cependant les pions blancs se trouvant aux extrémités déclenche une classe d'exception ERangeError avec le message 'Erreur de vérification d'étendu'.

    Et je pense que c'est parce qu'il y a des cases qu'il vérifie qui se situe en dehors de l'échiquier ... Alors est-ce une mauvaise idée, ou une petite modification peut suffire ?

    http://www2.noelshack.com/uploads/damiers011772.JPG

  10. #30
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    C'est bien, mais comme tu dis, ca pose des problemes ...

    Tu pourrais rajouter des arguments, par exemple, le clic de départ et le clic d'arrivée ... si la case entre ces 2 clics contient un pion, le pion est supprimé !

  11. #31
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Benh justement j'ai deja fait ça ...

    C'est pour cela qu'il il y a un x1,y1 = premier clic et x2,y2 = deuxième clic ...

  12. #32
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Bon alors tu as le clic de départ et le clic d'arrivée. Est ce que tes clics contiennent obligatoirement la position d'une case blanche existante, ou peuvent ils contenir n'importe quelle case (par exemple une noire) ?

    Si tes clics contiennent déja des cases existantes, il te suffit de voir :
    - si le premier clic est un des pions du joueur
    - si le deuxieme clic est une case vide
    - si la distance entre les deux pions est rac(8) (pythagore est ton ami)
    - si la case située tel que x1 < x < x2 et y1 < y < y2 contient un pion adverse (attention aux valeurs)

    Si toutes ces conditions sont vérifiées, alors tu peus enlever le pion.

  13. #33
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Désolé de répondre que maintenant ...

    Merci, je regarde à ça demain avec mon cerveau charger complètement ...

  14. #34
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Benh les deux premiers, j'ai compris (et c'est déjà comme ça que ça se passe ...). Par contre à partir de Pythagore je ne vois plus trop ce que tu veux dire ...

    Fin surtout pour le troisième point avec rac (?) ...

  15. #35
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Ben pour savoir si la deuxieme case est bien positionnée par rapport a la premiere pour manger un pion, il faut qu'elle soit :
    - soit 2 cases au dessus, 2 cases a gauche de ton pion
    - soit 2 cases au dessus, 2 cases a droite de ton pion
    - soit 2 cases au dessous, 2 cases a gauche de ton pion
    - soit 2 cases au dessous, 2 cases a droite de ton pion

    alors, au lieu de faire toutes ces vérifications, tu peux seulement vérifier que la distance entre tes deux pions est de rac(8). Avec ca, tu couvres tout tes cas : si la distance entre tes deux pions est rac(8), alors tu est sûr que tu te trouves dans une configuration ci dessus. Et pour calculer cette distance, tu dois te servir de ... Pythagore

    Enfin, pour la suite, tu dois simplement vérifier que la case qui est entre les deux autres contient un pion adverse !!

    Bonne chance !

  16. #36
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Et en fait, je me posais une autre question ...

    Je sais que ce n'est pas l'endroit le plus approprié, mais je comptais mal refaire un nouveau sujet là dessus.

    Comment peut-on modifier la taille d'un richeedit, par exemple au lancement des règles du jeu.

    J'ai essayé en le mettant à la bonne taille au début mais elle ne reste pas au lancement des règles, j'ai essayé avec toute sortes de "combinaison" du genre ==> richeedit.height:=100, ou form1.richeedit.height:=100; et ainsi de suite mais rien n'a changé la taille ...

  17. #37
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Comment peut-on modifier la taille d'un richeedit, par exemple au lancement des règles du jeu.

    J'ai essayé en le mettant à la bonne taille au début mais elle ne reste pas au lancement des règles, j'ai essayé avec toute sortes de "combinaison" du genre ==> richeedit.height:=100, ou form1.richeedit.height:=100; et ainsi de suite mais rien n'a changé la taille ...
    Euh ... Normalement, tu fais le nom de ton composant suivi de .Heigth et ca devrait marcher ! Est tu sur que ton RichEdit s'appelle RicheEdit ? c'est pas plutot RichEdit1 par exemple ?? Verifie car cela devrait marcher !

  18. #38
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    J'ai bien vérifier, ça ne fonctionne toujours pas ...

  19. #39
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    C'est bizarre ca ...
    Tu voudrais pas me copier un bout de code stp ?
    Si tu l'appeles dans une procedure, faut rajouter Form1. devant ... mais de toutes facons ca ferait une erreur ...
    J'attends ton code !

  20. #40
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 26
    Points : 1
    Points
    1
    Par défaut
    Voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Rglesdujeu1Click(Sender: TObject);
    begin
    RichEdit1.Height:=200;
    RichEdit1.Visible:=True;
    RichEdit1.Lines.LoadFromFile('regles.txt');
    RichEdit1.Create(Form1);
    end;
    Je viens de me rendre compte que la procédure a du enlever le "è" du règles de jeu provenant du popupmenu ...
    Et je sais que tout ce qui est caractères spéciaux n'est pas l'ami de delphi mais bon ...
    Sinon le reste fonctionne correctement ... (visible, appelle du .txt)

Discussions similaires

  1. 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, 08h54
  2. [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, 19h39
  3. 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, 14h53
  4. [LG]Introduction aux pointeurs
    Par John_win dans le forum Langage
    Réponses: 7
    Dernier message: 22/11/2003, 11h11

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