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

Turbo Pascal Discussion :

Jeux de rôle : quels types de variables pour coder des personnages ? [TPW]


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut Jeux de rôle : quels types de variables pour coder des Personnages ?
    Bonjour à tous

    pour les amateurs de RPG ou JDR en Français

    comment coderiez vous les personnages (et donc les monstres) ?

    avec une variable enregistrement qui aurait l'avantage de contenir le nom, la race, la carriere, les caractéristiques, les objets, ...

    ou plutôt avec des variables séparées ?

    pour le bestiaire des monstres, même question, en sachant qu'il pourrait devenir important, genre plus de 50 monstres

    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
     
    Type FichePersonnage = record
         name : string[25];
         race : byte;
         carriere : byte;
         Level : byte;
         weapon1 : integer;
         weapon2 : integer;
         armor: integer;
         money : integer;
         objets : array[1..NbObjets] of string;
         villePerso : byte;
         pp : profilPrincipal;
         ps : profilSecondaire;
         end;
    merci de vos lumières

  2. #2
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Si tu en as la possibilité il serait AMHA préférable de définir un objet qui permettrait de définir les comportements de tes personnages en tant que méthodes. (Je n'ai jamais codé de jeu cela dit et je ne joue pas donc mon avis n'est peut-être pas pertinent dans ce domaine. Néanmoins avec le bout de code que tu nous montres cela me semble adapté.

    Si tu ne veux/peux pas coder des objets, il faut alors mettre tes variables dans un RECORD, éventuellement VARIANT.

    En ce qui concerne Turbo Pascal, cela ne me semble pas le compilo le plus adapté. Installe Free Pascal à la place, totalement compatible au niveau du code mais possédant des possibilités bien supérieures (multiplateforme, adapté au 32 bits, modèle objet performant, etc., etc.). La SDL est compatible avec Free Pascal, pas de souci.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  3. #3
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    hé merci pour un avis aussi rapide
    je dois vous préciser que je suis débutant, aussi programmer un objet n'est pas dans mes capacités, mais je ne demande qu'à apprendre
    j'utilise TPW pour participer à l'initiation de mon fils ( sa fac utilise TPW), mais sur vos conseils je préfère largement delphi 6 que je commence à sentir

  4. #4
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Bonsoir,

    Il existe quelques très bons tuto sur la POO sur Développez. Notamment Ici

    Je n'ai pas dit Delphi, quoique cela soit excellent (mais pas multiplateforme), mais Free Pascal (+Lazarus, clone de Delphi) le tout gratuit et open source, installable à l'infini, bien maintenu, en progrès constant, etc.

    Pour la Fac, TOUT ce qui peut-être fait en TPW peut aussi êter fait en Free Pascal (c'est entièrement compatible). On peut sans problème installer les deux compilateurs sur un PC sachant qu'ils sont tous les deux gratuits, comme ça on bénéfie de tous les avantages ;-)

    Freepascal et lazarus voir la rubrique compilateurs Développez : c'est là
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    A mon avis, plus la modélisation est complexe plus tu auras de mal à t'en sortir avec les records (et des procédures généralistes). En effet, le monde réel est composé d'entités (= objet informatique, ou classe selon les niveaux de langage), qui font des choses propres à elles-même. Par exemple, un four permet de faire cuire des aliments, une pelle de creuser un trou, une fourchette de manger, etc..... Pour représenter ça dans un monde informatique, la solution préférée est de définir des objets qui ont des propriétés propres (par exemple, pour une fourchette, le nombre de dents), et auxquels on ajoute des méthodes (= liste d'actions qu'il peuvent faire) (exemple: la méthode "cuire" pour un four).

    Enfin tout ça pour dire, que avec les record tu risques d'être assez limité rapidement et te perdre dans les déclarations de tes nombreuses procédures...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  6. #6
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Une façon de voir les choses simplement est de considérer les objets comme des records pouvant contenir des procédures et des fonctions pour qui les variables déclarées dans le records sont des variables globales.
    Ex :
    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
     
    Type FichePersonnage = object
            private
             name : string[25];
             race : byte;
             carriere : byte;
             Level : byte;
             weapon1 : integer;
             weapon2 : integer;
             armor: integer;
             money : integer;
             objets : array[1..NbObjets] of string;
             villePerso : byte;
             pp : profilPrincipal;
             ps : profilSecondaire;
           public
            procedure setName(s : string);
            function getName() : string;
            {....}
         end;
    {definition des procedure et fonction de l'objet}
    procedure FichePersonnage.setName(s : string);
    begin
     name:=s;
    end;
     
    {...}
    les variables sont appelées des attributs ou les propriétes de l'objet; les fonctions et procedures sont les methodes de objet; c'est elles qui definissent les actions qu'execute l'objet.

  7. #7
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    merci de vos réponses

    si je comprend bien, je dois potasser la POO avant de m'amuser à ça ?

    aussi je vais le faire, je suis p-e un peu trop ambitieux pour mon niveau, mais l'idée de creuser ça me motive à apprendre, c'est déjà ça, et si je me rétame, au moins j'aurai appris

    même avec la migraine

  8. #8
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Bonjour,

    Il y a une autre possibilité, qui me semble plus adaptée à ton contexte :

    1) Tu commences à coder un JDR en programmation structurée, un prototype pourquoi pas mais fonctionnel quand même.
    2) Tu mets ensuite tes procédures et tes fonctions DANS les données (ça s'appelle un objet) comme te l'a dit Darrylsite.

    NB : je te sonseille quand même pour cela soit Delphi soit Freepascal (+ Lazarus gratuit et open source ...) car le modèle objet de ces deux EDI est plus facile et plus moderne que celui de TP 6, ou TPW, un objet étant un pointeur impicite ça te simplifiera la programmation (notamment la gestion de la mémoire).

    Je conseille quand même plus Free Pascal / Lazarus que Delphi 6 qui est un peu ancien et limité pour la suite.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  9. #9
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par richard Voir le message
    Je conseille quand même plus Free Pascal / Lazarus que Delphi 6 qui est un peu ancien et limité pour la suite.
    pas specialement, sauf si on veux faire du multi-plateforme.


    sinon les classes serait plus utiles ici en effet. les objets TP sont trés limités.
    je ferais un ptit exemple pour tout à l'heure.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  10. #10
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    C'est aussi mon avis pour ce qui concerne l'utilisation des classes à la place des objets de turbo pascal. Seulement, il faudra qu'il se fasse à l'idée qu'on travaille desormais avec les references vers les objets et non les objets eux-meme. Ce qui est deja un peu loin des records traditionnels.

  11. #11
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    pas specialement, sauf si on veux faire du multi-plateforme.
    Delphi 6 est en 64 bits ?
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  12. #12
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    merci de vos encouragements, je réalise à quel point il faut vraiment acceder à la POO pour tout désormais, seulement on ne peut pas courir avant de savoir marcher, sinon

    en attendant que je comprenne comment utiliser un objet Personnage et monstre, je cherche à étudier l'affichage d'un labyrinthe 3D du genre D&D

    je comprend que sous Delphi je dois utiliser la SDL c'est ça ?

  13. #13
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    La SDL est en effet une bibliothèque que tu peux utiliser avec Delphi ou Freepascal/Lazarus. Je te conseille ce tutorial, bien fait : ici

    Le mieux est d'installer JEDI SDL :
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  14. #14
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Sdl n'est elle pas pour le 2D?

  15. #15
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Exact, SDL=2D pas 3D. Si c'est pour de la 3D il faut une autre bibliothèque.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  16. #16
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    oui merci, j'ai cherché un peu, la 3D semble gérée par DirectX il faut une bibli Asphyre qui m'a rajouté des composants visuels dans Delphi, mais pour l'instant je n'ai pas exploré leur utilisation, les exemples fournis sont plutôt bluffants.

    mais je me disperse et disons le carrément, je mets la charrue avant les boeufs

    ________________________________

    pour revenir à ma variable record, ça a l'air sympa comme organisation, mais l'affectation des valeurs semble plus laborieuse que pour de simples tableaux

    il faut prendre les enregristrements 1 par 1 et chaque fois retaper tous les champs ?

    Var Guerrier[1] := (nom: godefroi, etc...)

    c'est bien ça ?

  17. #17
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Si tu veux du portable tu as OPENGL (DirectX c'e'st crosoft donc vérouillé sur le plan de la plte-forme).
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  18. #18
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Citation Envoyé par maxiNoob Voir le message
    pour revenir à ma variable record, ça a l'air sympa comme organisation, mais l'affectation des valeurs semble plus laborieuse que pour de simples tableaux

    il faut prendre les enregristrements 1 par 1 et chaque fois retaper tous les champs ?

    Var Guerrier[1] := (nom: godefroi, etc...)

    c'est bien ça ?
    Ce n'est pas clair pour moi : tu parles d'un RECORD et tu donnes un exemple de syntaxe d'ARRAY. Poste ta déclaration complète avec un bout de code qui te permet de l'afficher, du type :

    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
     
    program RPG;
     
    Type 
       Personnage=RECORD
            Nom : string;
            Age : integer;
            PointsDeVie : integer;
            Force : integer;
            Intelligence : integer;
            Niveau : integer;
            Arme : string;
            Argent: integer;
            Objets : array[1..10] of string;
                        END;
     
    Var
     
      MonPers :Personnage;
     
    Procedure AffecteValeurs;
     
      Var 
         i: integer;
     
       Begin
     
        Writeln(' Quel nom ? ');
        Readln(Monpers.Nom);
         Writeln(' Quel âge ? ');
        Readln(MonPers.Age);
         Writeln(' Combien de points de vie ? ');
        Readln(Monpers.PointsDeVie);
         Writeln(' Quelle force (de 0 à 1000) ? ');
        Readln(Monpers.Force);
         Writeln(' Quelle intelligence (de 0 à 100 ? ');
        Readln(Monpers.Intelligence);
         Writeln(' Quel Niveau ? ');
        Readln(Monpers.Niveau);
         Writeln(' Arme ? (couteau, sabre, arc, arbalète, épée ');
        Readln(Monpers.Arme);
         Writeln(' Combien d''argent ? ');
        Readln(Monpers.Argent);
        For i:=1 to 10 do
            Begin
                Writeln(' Objet numéro', i, ' ? ');
                Readln(Monpers.Objets[i]);
             End;
     end; {AffecteValeurs}
     
     
    Procedure AfficheValeurs;
     
     Var
      i: integer;
     
      Begin
     
       With Monpers do {     Une syntaxe qui permet d'éviter de taper le préfixe à chaque fois  }
            Begin
                Writeln('nom : ', nom, ' âge: ' , Age, ' PDV : ', PointsDeVie, ' Force : ', Force);
                Writeln('Intelligence : ', Intelligence, ' Niveau : ', Niveau, ' Arme : ', Arme, ' Argent : ', Argent);
                For i:=1 to 10 do
                    Begin
                      Writeln(' Objet n° ', i, ' : ', Objets[i]);
                    End;
            End;
        End;  { AfficheValeurs  }
     
     Begin   { Principal   }
        AffecteValeurs;  
        AfficheValeurs;
        Readln {pour voir les résultats  }
     End.  {   Principal  }
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  19. #19
    Membre à l'essai Avatar de maxiNoob
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 129
    Points : 18
    Points
    18
    Par défaut
    merci richard pour cette réponse détaillée
    ton code permet de remplir 1 seule fiche grace à une saisie au clavier

    mais si par exemple tu veux créer 30 monstres en utilisant une variable tableau d'enregistrement pour celà, comment peut on faire pour affecter les 30 valeurs ?

    un animal ayant un nom, une force, des points de vie, une protection, une arme naturelle, etc... bref des types différents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const NbAnimals = 30;
     
    Type
          Animal = record
             name: string;
             strenght: byte;
             life: byte;
             armor: byte;
             hit: byte;
            end;
     
    var Beasts : Array [0..NbAnimals-1] of Animal;
    comment remplir mon tableau d'animaux ?

  20. #20
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    On peut arriver au resultat si on passait les animaux en parametre de ces fonction
    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
     
    Procedure AffecteValeurs( var monPers : Personnage);
     
      Var 
         i: integer;
     
       Begin
     
        Writeln(' Quel nom ? ');
        Readln(Monpers.Nom);
         Writeln(' Quel âge ? ');
        Readln(MonPers.Age);
         Writeln(' Combien de points de vie ? ');
        Readln(Monpers.PointsDeVie);
         Writeln(' Quelle force (de 0 à 1000) ? ');
        Readln(Monpers.Force);
         Writeln(' Quelle intelligence (de 0 à 100 ? ');
        Readln(Monpers.Intelligence);
         Writeln(' Quel Niveau ? ');
        Readln(Monpers.Niveau);
         Writeln(' Arme ? (couteau, sabre, arc, arbalète, épée ');
        Readln(Monpers.Arme);
         Writeln(' Combien d''argent ? ');
        Readln(Monpers.Argent);
        For i:=1 to 10 do
            Begin
                Writeln(' Objet numéro', i, ' ? ');
                Readln(Monpers.Objets[i]);
             End;
     end; {AffecteValeurs}
    Si les caracteristiques des personnages se trouve dans un fichiers ou un tableau, une boucle permettra de les initialiser en passant passant les personnage en paramettre de la fonction desirée.

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 24/07/2012, 16h51
  2. [AC-2007] quel type de variable pour récupérer des objets de type Ole
    Par rominous41 dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/05/2011, 16h59
  3. Quel type de variable pour 20 bits?
    Par The_72 dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/04/2010, 12h08
  4. Quel type de variable pour enregistrer un temps ?
    Par trigone dans le forum Langage
    Réponses: 9
    Dernier message: 07/12/2008, 20h15
  5. Réponses: 2
    Dernier message: 05/02/2008, 11h47

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