2009-01-25 14 views
1

J'écris un petit jeu dans lequel on demande à l'utilisateur sa course et sa classe. Il y a cinq races de chaînes possibles [5] et quatre classes de chaînes possibles [9]. Comment puis-je programmer pascal pour 1. définir les cinq races et les quatre classes comme des constantes, 2. vérifier l'entrée de l'utilisateur pour voir si l'entrée est dans les races et les classes possibles - sans utiliser plusieurs instructions IF?Comment utiliser des ensembles de chaînes en Pascal?

Toutes les indications seront appréciées.

Répondre

2

Puisque votre entrée est strictement définie, ma première question est la suivante: devez-vous utiliser des chaînes comme entrée de l'utilisateur? Ne pouvez-vous pas donner le choix à l'utilisateur? Dites une liste déroulante? Ensuite, vous pouvez mapper chaque choix à une énumération.

type 
    race = (rcRace0, rcRace1, rcRace2 rcRace3, rcRace4); 


case race(Input) of //input is an integer, index of the drop down list for example 
    rcRace0 : //perform processing for race 0 
    rcRace1 : //perform processing for race 1 
    rcRace2 : //perform processing for race 2 
    rcRace3 : //perform processing for race 3 
    rcRace4 : //perform processing for race 4 
end; 

Identique pour la classe.

+0

Merci Steve. C'est une bonne solution bien rangée. –

0

Je trouve que vous devriez suivre la solution de Steves. Mais si vous utilisez des chaînes, vous pouvez utiliser une TStringList (dans Delphi/éventuellement FreePascal). Vous pouvez le remplir avec vos races et ensuite évaluer la réponse des joueurs en utilisant la fonction IndexOf de la TStringList. Il renvoie l'index de la chaîne passée ou -1 lorsque la chaîne transmise n'est pas dans la liste.

Quoi qu'il en soit, je vous recommande fortement la solution Steves :)

+0

Il pourrait ne pas avoir à le coder lui-même, mais sous le capot, IndexOf fait exactement ce que l'OP voulait éviter. –

2

Je recommande la solution Steves comme point de départ, mais aller un peu plus loin avec l'utilisation de types et ensembles ...

type 
    TRace = (rcRace0, rcRace1, rcRace2, rcRace3, rcRace4); 

    TCharacterClass = (ccClass0, ccClass1, ccClass2, ccClass3); 

    TCharacterClassSet = set of TCharacterClass; 

const 
    validCombinations : array[TRace] of TCharacterClassSet = (
     [ccClass0, ccClass1, ccClass2, ccClass3], // race0 can be any class 
     [ccClass0, ccClass2],      // race1 
     [ccClass0, ccClass1, ccClass2],   // race2 
     [ccClass0, ccClass3],      // race3 
     [ccClass0]         // race4 
     ); 
énumérés

vous pouvez également mettre en place des constantes pour les noms de course et classes de personnages:

const 
    raceNames : array[TRace] of string = (
     'Race 0', 
     'Race 1', 
     'Race 2', 
     'Race 3', 
     'Race 4' 
     ); 

    characterClassNames = array[TCharacterClass] of string = (
     'Class 0', 
     'Class 1 ', 
     'Class 2', 
     'Class 3' 
     ); 

maintenant, si vous utilisez comboboxes pour les entrées utilisateur et carte à l'entrée de ces types énumérés, c si une combinaison est valide est simple:

function ValidRaceAndClass(aRace : TRace; aClass : TCharacterClass) : Boolean; 
    begin 
    result := aClass in validCombinations[ aRace ]; 
    end; 
+0

Je suis d'accord avec cette réponse. Vos données sont fondamentalement enums pas des chaînes. Vous n'avez pas "cinq races de corde possibles". Vous avez "cinq races possibles". Qui peut être affiché en tant que chaîne [5]. Mais stockez alors comme enums. – Anthony