こんにちは!私は現在 C++ でテキスト アドベンチャーに取り組んでおり、助けが必要です。
私がやろうとしているのは、ユーザーに次のようなコマンドを入力させることです:
- 「キッチンに行く」
- 「鍵でドアを開ける」
それに応じてゲームを反応させます。
私たちの先生は私たちに次のコード (私が修正したもの) をくれましたが、それが何をしているのか、それをどのように使用してゲームを作成できるのかを理解するのに苦労しています。ユーザーがstring
s を入力できるように変更string
し、動詞、目的語、前置詞、および object2 に見事にトークン化します。
しかし、私がしなければならないことは、何らかの方法で入力を使用可能なコマンドのリストと比較することです。これは、私が現時点で達成するのに苦労していることです。私はプログラミングが初めてで、勉強の宿題としてこれを行う必要があります。どんな助けでも大歓迎です。
struct command {
char* verb;
char* object;
char* preposition;
char* object2;
};
bool getTokens(char * acInput,
const char token_delimiter,
command * pTargetCommand)
{
char * pCurToken;
pCurToken = strtok (acInput, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no verb");
getchar();
return 1;
}
pTargetCommand->verb = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no object");
getchar();
return 1;
}
pTargetCommand->object = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken != NULL) {
pTargetCommand->preposition = pCurToken;
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken == NULL) {
printf("Error: Found no second object for preposition");
getchar();
return 1;
}
pTargetCommand->object2 = pCurToken;
}
pCurToken = strtok (NULL, &token_delimiter);
if (pCurToken != NULL) {
printf("Error: too many tokens.");
getchar();
return 1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char acInput[256];
cin.getline (acInput,256);
command myCommand = { NULL };
int RoomChoice = 0;
printf ("Splitting string \"%s\" into tokens:\n", acInput);
getTokens(acInput, *TOKEN_DELIMITER, &myCommand);
printf ("Verb: %s\n", myCommand.verb);
printf ("object: %s\n", myCommand.object);
printf ("preposition: %s\n", myCommand.preposition);
printf ("object2: %s\n", myCommand.object2);
getchar();
return 0;
}