2009-01-25 4 views
1

나는 경주와 수업을 요구받는 작은 게임을 쓰고있다. 문자열 [5]의 가능한 경합은 5 개이고 문자열 [9]의 가능한 클래스는 4 개가 있습니다.파스칼에서 문자열 세트를 사용하는 방법은 무엇입니까?

어떻게 5 개의 레이스와 4 개의 클래스를 상수로 정의 할 수 있습니까? 2. 사용자 입력을 검사하여 입력이 가능한 레이스 및 클래스 내에 있는지 확인하십시오. - 여러 개의 IF 문을 사용하지 않아도됩니까?

힌트를 보내 주시면 감사하겠습니다.

답변

2

입력 내용이 엄격하게 정의되었으므로 첫 번째 질문은 문자열을 사용자 입력으로 사용해야한다는 것입니다. 사용자에게 선택권을 줄 수 있습니까? 드롭 다운하라고? 그런 다음 각 선택 항목을 열거 형에 매핑 할 수 있습니다.

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; 

동급입니다.

+0

감사합니다. 스티브. 그것은 좋은, 깔끔한 솔루션입니다. –

0

스티브 솔루션을 따라야합니다. 그러나 문자열을 사용한다면 Delphi/FreePascal에서 TStringList를 사용할 수 있습니다. 당신은 당신의 종족으로 그것을 채울 수 있고 TStringList의 IndexOf 함수를 사용하여 플레이어 응답을 평가할 수 있습니다. 전달 된 문자열의 인덱스를 반환하거나 전달 된 문자열이 List에없는 경우 -1을 반환합니다.

어쨌든 난 강력하게 ... Steves와 솔루션 :

+0

그는 코드를 직접 작성하지 않아도되지만 OPO에서 피하고자하는 작업을 IndexOf가 정확하게 수행합니다. –

2

나는 출발점으로 Steves와 솔루션을 권장하지만, 열거 된 유형과 세트를 사용하여 조금 더 갈 것이라고 권하고 싶습니다

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 
     ); 
당신이 사용자 입력 콤보를 사용하고, 이러한 열거 유형에 C를 입력을하게되면, 지금

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' 
     ); 

:

또한 레이스 이름과 문자 클래스에 대한 상수를 설정할 수 있습니다 조합이 유효하다면 간단합니다 :

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

나는이 대답에 동의한다. 귀하의 데이터는 기본적으로 문자열이 아닌 열거 형입니다. "다섯 가지 인종 문자열"[5]이 없습니다. 당신은 "5 가지 가능한 종족"을 가지고 있습니다. 문자열 [5]로 표시 할 수 있습니다. 하지만 열거 형으로 저장하십시오. – Anthony

관련 문제