1

私はObjectiveCとXcodeを使用して非常にシンプルなテキストゲームを開発してきました。ほぼ完了しましたが、問題が発生しています。scanfメソッドはループを停止し、コンピューターで残りのループを実行する必要があるときにユーザー入力を要求します。私が思いついた解決策は、2つのwhileループを同時に実行することでした。時間。1つは論理ループで、もう1つはユーザー入力のループです。

私は自分の研究を行っていますが、スレッドを使用することが道のりのようですが、Objective Cでn00bに分解するチュートリアルが見つかりませんでした(私はJavaでまともです、スレッドを使ったことがありません)。誰かがそれらを説明したり、私を非常に分解されたチュートリアルにリンクしたりできれば、それは素晴らしいことです。または、誰かが別のアイデアを持っている場合、私は他のことを受け入れます。

必要なコード(私が問題を抱えているscanfには、行にアスタリスクが付いています):

 while(running != 0)
    {
        if(gameState == 1)
        {
            if(timeToGenerateNum == true)
            {
                while(randNumber < 10000000)
                {
                    randNumber = arc4random() % 100000000;
                }
                NSLog(@"%i", randNumber);
                timeToGenerateNum = false;
            }
            else 
            {
                while(time <= 2500)
                {
                    NSLog(@"Testing");
                    time++;
  ******************scanf("%i", &userNum);************************
                    if(userNum == randNumber)
                    {
                        score += time;
                        time = 0;
                        timeToGenerateNum = true;
                    }
                }
                NSLog(@"Game Over! Your score was %i!", score);
                running = 0;
            }
        }
        else if(gameState == 2)
        {
            NSLog(@"To play, simply type in the number that appears on the screen.");
            NSLog(@"But be careful, you only have a short amount of time before GAME OVER!");
            NSLog(@"The quicker you type in the number the more score you get!");
            NSLog(@"Are you ready to start, if so type '1' and press enter!");
            scanf("%i", &gameState);
        }
    }
4

1 に答える 1

0

これを実現するには、BSD (Unix、Linux) の入出力について少し学ぶ必要があります。scanf の呼び出しを、ユーザーのキーボードから入力を取得するために作成したノンブロッキング関数に置き換えます。

この関数は、ユーザーが入力したものをすぐに返すか、何も入力しなかった場合は文字数ゼロですぐに返す必要があります。

select(2) システムコールを読んで、キーボード入力 (標準入力) が最初のファイル記述子であり、ファイル記述子がゼロであることを覚えておいてください。

于 2012-07-06T11:47:39.880 に答える