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

Téléchargez Pascal Discussion :

Jeu de Triple Yahtzee


Sujet :

Téléchargez Pascal

  1. #1
    Responsable Pascal, Lazarus et Assembleur

    Jeu de Triple Yahtzee
    Bonjour,

    Je vous propose un nouvel élément à télécharger : Jeu de Triple Yahtzee

    Il s'agit d'un jeu de Triple Yahtzee à plusieurs joueurs sur un même poste.



    Le projet n'utilise que des composants ultra-classiques. Il a été réécrit en "tout objet" en mettant en application les notions détaillées dans les excellents tutoriels de Gilles Vasseur sur la POO :


    L'application ne gère pas encore l'enregistrement des meilleurs scores et ne possède pas encore de un système d'aide. Mais le jeu est parfaitement jouable !

    Qu'en pensez-vous ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  2. #2
    Responsable Pascal, Lazarus et Assembleur

    Le jeu est à présent terminé, avec une aide et un classement persistant des meilleurs scores.

    Tout retour sur d'éventuels bugs est le bienvenu !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  3. #3
    Rédacteur/Modérateur

    Très beau travail.

    Bizarre, avec cette nouvelle version, je n'arrive pas à choisir les dés que je veux relancer. Il manque le bouton du deuxième dé, et les autres boutons ne réagissent pas.

    C'est sous Windows 10, avec l'exécutable que tu as compilé.

    Une question en passant, à quoi sert le composant que tu as utilisé ?

  4. #4
    Responsable Pascal, Lazarus et Assembleur

    Merci pour le compliment !

    Citation Envoyé par Roland Chastain Voir le message
    Bizarre, avec cette nouvelle version, je n'arrive pas à choisir les dés que je veux relancer. Il manque le bouton du deuxième dé, et les autres boutons ne réagissent pas.

    C'est sous Windows 10, avec l'exécutable que tu as compilé.

    Une question en passant, à quoi sert le composant que tu as utilisé ?
    Ce ne sont pas des TButton mais des TStaticText. Il faut cliquer sur les dés pour commuter entre garde et relance.
    L'aide contient un mode d'emploi.

    J'ai recompilé l'exécutable. Honnêtement, je n'ai testé que vaguement sous Windows, dans une machine virtuelle Windows XP. Le rendu est d'ailleurs très moyen. Si je trouve du temps, je m'occuperai d'essayer de rendre cela plus présentable ; si tu as des idées...
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  5. #5
    Rédacteur/Modérateur

    Citation Envoyé par Alcatîz Voir le message
    Ce ne sont pas des TButton mais des TStaticText. Il faut cliquer sur les dés pour commuter entre garde et relance.
    Ah oui, au temps pour moi.

    Mais il semble qu'il y ait un petit problème d'affichage. Tantôt il manque le cadre autour du mot "relancer" (voir ma capture d'écran d'hier), tantôt le fond du deuxième dé est noir.



    Citation Envoyé par Alcatîz Voir le message
    L'aide contient un mode d'emploi.
    C'est noté.

    Citation Envoyé par Alcatîz Voir le message
    Le rendu est d'ailleurs très moyen. Si je trouve du temps, je m'occuperai d'essayer de rendre cela plus présentable ; si tu as des idées...
    Je ne trouve pas cela si désagréable. On pourrait améliorer le dessin des dés, mais comme ça ce n'est pas mal. Je vais regarder ton code de plus près.

  6. #6
    Rédacteur/Modérateur

    Citation Envoyé par Alcatîz Voir le message
    Le rendu est d'ailleurs très moyen. Si je trouve du temps, je m'occuperai d'essayer de rendre cela plus présentable ; si tu as des idées...
    Je ne sais pas à quoi tu pensais exactement mais voici ce que j'ai à te proposer, des dés faits avec BGRABitmap.



    J'ai fait le fond des images en noir, parce c'était comme ça dans l'original, mais on pourrait aussi prendre comme couleur de fond la couleur de la fenêtre :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      bmp := TBGRABitmap.Create(
        Image.Picture.Bitmap.Width,
        Image.Picture.Bitmap.Height,
        //BGRABlack
        ColorToBGRA(ColorToRGB(clForm))
      );

  7. #7
    Responsable Pascal, Lazarus et Assembleur

    Ah c'est tout de suite beaucoup plus beau ! Le fond noir, ce n'est pas top, en effet.

    Merci, Roland, je vais intégrer ta suggestion.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  8. #8
    Rédacteur/Modérateur

    Citation Envoyé par Alcatîz Voir le message
    Merci, Roland, je vais intégrer ta suggestion.
    Pas de quoi. Mais si je peux me permettre encore une autre suggestion, je trouve que ce serait dommage, d'un point de vue pédagogique, de perdre le code original. Peut-être y a-t-il un moyen de garder les deux ?

    Une autre possibilité à laquelle j'ai pensé serait de faire un programme séparé qui fabrique les images des six dés, afin de pouvoir se contenter de charger les images déjà faites dans Yahtzee. Si cette possibilité retient ton attention, je me ferai un plaisir de t'aider à réaliser le premier programme.

    Je pense qu'avec BGRABitmap il y a moyen de faire des dés encore plus beaux que ceux-là. Ce pourrait être intéressant d'aller plus loin. Avec l'aide de Johann peut-être, s'il passe par ici ?

  9. #9
    Responsable Pascal, Lazarus et Assembleur

    Citation Envoyé par Roland Chastain Voir le message
    je trouve que ce serait dommage, d'un point de vue pédagogique, de perdre le code original. Peut-être y a-t-il un moyen de garder les deux ?
    Une directive de compilation peut faire l'affaire :


    Citation Envoyé par Roland Chastain Voir le message
    Une autre possibilité à laquelle j'ai pensé serait de faire un programme séparé qui fabrique les images des six dés, afin de pouvoir se contenter de charger les images déjà faites dans Yahtzee. Si cette possibilité retient ton attention, je me ferai un plaisir de t'aider à réaliser le premier programme.
    Pourquoi pas ? Les images étant alors incluses sous forme de ressources, j'imagine ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  10. #10
    Rédacteur/Modérateur

    C'est une bonne idée de tracer le contour du dé. Mais je me demande si ça ne serait pas encore mieux comme ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
      LBitmap.FillRoundRectAntialias(0, 0, Image.Picture.Bitmap.Width - 1, Image.Picture.Bitmap.Height - 1, CArrondi, CArrondi, LPixel, []);
      LBitmap.RoundRectAntialias(0, 0, Image.Picture.Bitmap.Width - 1, Image.Picture.Bitmap.Height - 1, CArrondi, CArrondi, BGRABlack, 1, []);


    Avec encore cette petite modification pour que les points soient bien centrés :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
      with LBitmap do
        FillEllipseLinearColorAntialias(CCoord[Li,1] * (Width - 1), CCoord[Li,2] * (Height - 1), CRayon, CRayon, ColorToBGRA(clDkGray), BGRAPixelTransparent);


    Et éventuellement utiliser le gris foncé aussi pour le contour du dé. À toi de voir...

  11. #11
    Responsable Pascal, Lazarus et Assembleur

    Toutes tes suggestions ont été incluses dans le code source.

    Voici la nouvelle version (3.1.1) : http://lazarus.developpez.com/telech...Triple-Yahtzee

    Ce qui me gène encore est la différence de rendu entre Linux et Windows au niveau du dimensionnement des composants : par exemple, les deux TStringGrid de la feuille de points sont exactement dimensionnées sous Linux et semblent quelque peu rétrécir dans leur cadre sous Windows. Une suggestion ?
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  12. #12
    Responsable Lazarus & Pascal

    Citation Envoyé par Alcatîz Voir le message

    Ce qui me gène encore est la différence de rendu entre Linux et Windows au niveau du dimensionnement des composants : par exemple, les deux TStringGrid de la feuille de points sont exactement dimensionnées sous Linux et semblent quelque peu rétrécir dans leur cadre sous Windows. Une suggestion ?
    Bonjour,

    A ma connaissance, il n'y a pas de solution facile à ce simple : le rendu final est tributaire des OS, surtout pour les contrôles natifs.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  13. #13
    Responsable Lazarus & Pascal

    Bonjour,

    Tout d’abord, félicitations pour le travail réalisé : j’apprécie tout particulièrement ton code précis et bien documenté . Comme j’ai enfin trouvé le temps de le revoir dans son ensemble, je me permets quelques suggestions.

    Compilation avec Lazarus
    J’ai toujours une certaine réticence à utiliser Code Typhon, mais c’est très personnel ! Si cet EDI est très riche et adapté à ceux qui ne veulent pas s’embêter avec des bibliothèques à installer, il reste qu’il anticipe parfois un peu trop en utilisant des éléments instables ou renommés de manière arbitraire.
    Ainsi, le code source fourni avec ton jeu ne compile pas avec Lazarus : les bibliothèques pl_bgrabitmap et lz_ipro sont inconnues. De plus, la version d’ipro définit automatiquement une propriété preview inconnue de la version diffusée avec Lazarus. Du coup, j’ai retravaillé ton projet afin qu’il se compile sans problème avec la version de base de Lazarus 1.6.0 pour peu qu’on lui adjoigne BGRABitmap.

    Fichier common.pas
    Je ne définirais pas de getters pour des propriétés simples : en effet, un getter laisse entendre qu’un traitement est effectué avant le retour de la valeur du champ (c’est par exemple le cas de Copyright). Du côté des setters, comme ils sont bien plus susceptibles d’être implémentés (par exemple pour vérifier la validité des données), les définir même sous une forme squelettique ne pose pas de problème, au contraire (ça devient une question de style).

    Fichier main.pas
    Partout où tu as créé dynamiquement une fiche, je remplacerais le code par un autre plus léger. Par exemple :

    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
     
    var
      //LFormInscriptions : TFormInscriptions;
      Li : Integer;
    begin
      (* Dialogue d'inscription des joueurs *)
      //LFormInscriptions := TFormInscriptions.Create(Self);
      //try
      //  LFormInscriptions.ShowModal;
      //finally
      //  FreeAndNil(LFormInscriptions);
      //end;
      with TFormInscriptions.Create(nil) do
        try
          ShowModal;
        finally
          Free;
        end;


    Non seulement on y gagne en lisibilité, mais on économise une variable locale (je suis avare en variables ).
    N.B. : il n’y a pas de raison d’utiliser le paramètre Self alors que la destruction va s’opérer manuellement. D’ailleurs, Free a été omis à la fin du listing dans la méthode Partie.

    Fichier feuillepoints.pas
    Plutôt que de définir cinq méthodes pour savoir si oui ou non on garde la valeur des dés, je suggère d’employer la propriété Name connues de tous les descendants de TObject pour ne garder qu’une seule méthode partagée par les cinq événements OnClick :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TFormFeuillePoints.imgDe1Click(Sender: TObject);
    (* Choix de garder ou relancer un dé *)
    var
      LI: Integer;
    begin
      LI := StrToInt(RightStr((Sender as TImage).Name, 1));
      Des[LI].Garder := not Des[LI].Garder;
    end;


    Là, ce n’est pas une petite économie !

    Enfin, pour éviter les avertissements et les conseils qui laissent croire que le code n’est pas maîtrisé (alors que ce n'est certainement pas le cas), j’aime employer {%H-} devant un paramètre non utilisé volontairement et encadrer une ligne par {$HINTS OFF} et {$HINTS ON} si nécessaire.

    Finalement, vu le nombre de lignes de code, ce ne sont que des broutilles. Le vrai problème est celui-ci : ce jeu est addictif pour moi et il faut que je passe à autre chose .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  14. #14
    Responsable Pascal, Lazarus et Assembleur



    Grâce à tes bons conseils, j'aspire à m'améliorer et à grapiller sur le monstrueux retard technologique que j'ai pris (je sors tout doucement d'OWL () et des API).
    Je mettrai à jour la fiche de téléchargement quand j'aurai étudié et intégré tes modifications.

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  15. #15
    Responsable Lazarus & Pascal

    Citation Envoyé par Alcatîz Voir le message
    grapiller sur le monstrueux retard technologique que j'ai pris (je sors tout doucement d'OWL () et des API)
    Franchement, ça ne se sent pas du tout à la lecture du code que tu as produit : même les remarques que j'ai faites sont marginales, car ton code n'est ni fautif ni lent. Je le répète d'ailleurs : j'aimerais lire plus souvent un code aussi clair et documenté

    Quant aux "modifications", elles n'ont rien d'impératif. Ce sont plutôt des remarques et ne pas les intégrer ne me gênerait pas. Je les vois plus comme des questions de style (cosmetics) à prendre ou à laisser...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  16. #16
    Rédacteur/Modérateur

    Bonjour ! Je m'aperçois que le tableau des scores est chronologique. Serait-il possible, dans une prochaine version, d'avoir les meilleurs scores en premier ?

  17. #17
    Responsable Pascal, Lazarus et Assembleur

    Bonjour Roland,

    En cliquant sur les titres des colonnes, tu choisis sur laquelle le tri doit se faire et dans quel sens.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  18. #18
    Rédacteur/Modérateur

    Citation Envoyé par Alcatîz Voir le message
    En cliquant sur les titres des colonnes, tu choisis sur laquelle le tri doit se faire et dans quel sens.
    Ah, d'accord. Décidément un très bon produit !

###raw>template_hook.ano_emploi###