Jeu de Triple Yahtzee

Présentation
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, à l'exception du composant Iphtml dont le paquetage Turbopower_Ipro est fourni avec le code source. 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 (dont vous trouvez les liens ci-dessous).

Bon amusement !
Nos ressources disponibles
Téléchargement
Compatibilité
Linux Windows
2  0 
Téléchargé 20 fois Voir les 17 commentaires
Détails
Catégories : Programmes complets
Avatar de Jean-Luc Gofflot
Responsable Pascal, Lazarus et Assembleur
Voir tous les téléchargements de l'auteur
Licence : GPL
Date de mise en ligne : 18 septembre 2016




Avatar de Alcatîz Alcatîz - Responsable Pascal, Lazarus et Assembleur https://www.developpez.com
le 12/09/2016 à 22:10
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 !
Avatar de Alcatîz Alcatîz - Responsable Pascal, Lazarus et Assembleur https://www.developpez.com
le 18/09/2016 à 16:32
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 ?
Avatar de gvasseur58 gvasseur58 - Responsable Lazarus & Pascal https://www.developpez.com
le 26/09/2016 à 13:29
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
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
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 .
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 16/09/2016 à 9:00
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.
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 16/09/2016 à 22:17
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
1
2
3
4
5
6
  bmp := TBGRABitmap.Create(
    Image.Picture.Bitmap.Width,
    Image.Picture.Bitmap.Height,
    //BGRABlack
    ColorToBGRA(ColorToRGB(clForm))
  );
Avatar de Alcatîz Alcatîz - Responsable Pascal, Lazarus et Assembleur https://www.developpez.com
le 26/09/2016 à 20:22


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.

Avatar de gvasseur58 gvasseur58 - Responsable Lazarus & Pascal https://www.developpez.com
le 26/09/2016 à 23:03
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...
Avatar de Alcatîz Alcatîz - Responsable Pascal, Lazarus et Assembleur https://www.developpez.com
le 27/07/2018 à 19:59
Bonjour Roland,

En cliquant sur les titres des colonnes, tu choisis sur laquelle le tri doit se faire et dans quel sens.
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 15/09/2016 à 12:00
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é ?
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.