cs_marex
Messages postés2Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 décembre 2005
-
26 nov. 2005 à 18:05
cs_marex
Messages postés2Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 décembre 2005
-
17 déc. 2005 à 21:46
Je veut faire un jeu console pour égayer la classe pendant les temps morts du cours de programmation mais je ne comprend rien au type énuméré(je sait juste que c'est plus facile à gérer un gros programme avec ce type).
Exemple:
Type classes(guerrier, mage, paladin, assassin);
Var choixclasse : classes;
comment je fait l'interface pour que l'utilisateur choisisse une classe?
TMultiClassePersonnage = set of TClassePersonnage ;
// ----- Les constantes permettant d'obtenir une chaine -----
// ----- pour chacun des éléments du type énuméré -----
const
S_CLASSE_PERSONNAGE : array[TClassePersonnage] of String =
( 'Aucune'
, 'Guerrier'
, 'Mage'
, 'Paladin'
, 'Assassin'
// insérer ici les chaine pour les nouvelles classes
// ...
, '-- Réservé --'
) ;
type
TJoueurMonoClasse = record
Classe : TClassePersonnage ;
end ;
TJoueurMultiClasses = record
Classes : TMultiClassePersonnage ;
end ;
var
JoueurMonoClasse : TJoueurMonoClasse ;
JoueurMultiClasse : TJoueurMultiClasses ;
// Evenement OnClick du TButton
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer ;
j : TClassePersonnage ;
S : string ;
begin
ComboBox1.Items.Clear;
ComboBox1.Text := S_CLASSE_PERSONNAGE[cpAucune];
// Un élément du type énuméré peut être vu comme un ordinal ou un entier
// low(TClassePersonnage) renvoit cpAucune
// High(TClassePersonnage) renvoit cpNOMBRE_CLASSES
// Ord(low(TClassePersonnage)) renvoit Ord(cpAucune) soit 0
// Integer(High(TClassePersonnage)) renvoit Integer(cpNOMBRE_CLASSES) soit 5
for I:=Ord(low(TClassePersonnage)) to Integer(High(TClassePersonnage))-1 do
ComboBox1.Items.Add( S_CLASSE_PERSONNAGE[TClassePersonnage(I)] ) ;
// Initialisation, une classe
JoueurMultiClasse.Classes:=[cpAucune];
// Initialisation, plusieurs classes
JoueurMultiClasse.Classes:=[cpMage,cpPaladin,cpAssassin];
// Initialisation, plusieurs classes
JoueurMultiClasse.Classes:=[cpGuerrier..cpPaladin];
// Vérification de la présence d'une classe
if not( cpAssassin in JoueurMultiClasse.Classes ) then
begin
MessageDlg( 'Le Joueur "Multi Classe" n''est pas un assasin', mtInformation,[mbYes],0);
end ;
// Retrait d'une classe
JoueurMultiClasse.Classes:= JoueurMultiClasse.Classes-[cpMage];
// Ajout d'une classe
JoueurMultiClasse.Classes:= JoueurMultiClasse.Classes+[cpAssassin];
// Affichage des informations du joueur Multi classes
S := '' ;
for J:=Low(TClassePersonnage) to High(TClassePersonnage) do
begin
if ( J in JoueurMultiClasse.Classes ) then
S := S + S_CLASSE_PERSONNAGE[J] + ' ' ;
end ;
MessageDlg ( 'Classes du Joueur "Multi Classe" : ' + S
, mtInformation
,[mbYes]
,0
);
end;
// Evenement OnChange du TComboBox
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
JoueurMonoClasse.Classe := TClassePersonnage(ComboBox1.ItemIndex) ;
MessageDlg ( 'La classe du Joueur "Mono Classe" est : '
+ S_CLASSE_PERSONNAGE[JoueurMonoClasse.Classe]
, mtInformation
,[mbYes]
,0
);
end;
Pour l'utilisation, appuyer sur le bouton1 pour charger le combobox et initialiser les variables puis tester la modification de la valeur du combobox.
On remarquera que l'ajout d'une nouvelle classe dans le type énuméré, se fait de façon simple et rapide sans changer par ailleurs le code des boucles, ce qui est un gain de temps non négligeable.
Cordialement.
<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...