1

こんにちは!私は現在 C++ でテキスト アドベンチャーに取り組んでおり、助けが必要です。

私がやろうとしているのは、ユーザーに次のようなコマンドを入力させることです:

  • 「キッチンに行く」
  • 「鍵でドアを開ける」

それに応じてゲームを反応させます。

私たちの先生は私たちに次のコード (私が修正したもの) をくれましたが、それが何をしているのか、それをどのように使用してゲームを作成できるのかを理解するのに苦労しています。ユーザーがstrings を入力できるように変更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;
  }
4

2 に答える 2

2

宿題を出しすぎないようにするには、利用可能なすべてのアクションのリストを何らかの方法で構造に読み取り、その構造と比較する必要があります。

ヒントとして、パターンに応じて、それは switch() {} ステートメントまたは配列のようなコレクションである可能性があります。

switch (myCommand.verb) Case "go" を検討してください:

実際のアプリケーションでは、コマンド オブジェクトのファクトリを作成し、そのうちの 1 つを呼び出します。ただし、ここでは、制御ステートメントを検討することをお勧めします。

于 2012-01-06T00:59:07.063 に答える
0

文字列を使用して切り替えを行うことはできません(すでに述べたように、切り替えは定数でのみ機能します)

文字列を比較するには、strcmp、strncmp、またはさらに良い方法として、String.compareを使用できます。あなたはグーグル検索でそれらについての十分な情報を見つけることができるはずです。

于 2012-06-08T17:55:12.240 に答える