2012-07-05 453 views
1

我一直在用Objective C和Xcode開發一個非常簡單的文本遊戲。它幾乎完成,但我有一個問題,方法停止循環,並要求用戶輸入,而我需要計算機運行循環的其餘部分,我想出的解決方案是運行兩個while循環在同時,一個是邏輯循環,另一個是用戶輸入的循環。我一直在做我的研究,它看起來像使用線程是要走的路,我只是沒有找到一個教程,將打破它在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); 
     } 
    } 
+0

當'scanf'對'scanf'設置的var進行測試後,接下來的事情是如何繼續循環的?我認爲你需要考慮重構'if(timeToGenerateNum == true)'給一個函數(讓我們稱之爲'randNumber'),然後你會改變if(userNum == randNumber)'if if(userNum = = randNumber())' – 2012-07-05 21:17:39

+0

@Tom Ingram我需要循環才能繼續,因爲時間還是需要添加,這個遊戲是定時的......代碼在嵌套的while循環內並不完美,因爲我沒有測試它,因爲'scanf'不斷停止循環 – HDAViiRuS 2012-07-05 21:24:49

回答

0

你將不得不學習一些關於BSD(UNIX,Linux)的輸入/輸出關閉此功能:用您編寫的非阻塞函數將您的呼叫替換爲scanf,以從用戶鍵盤獲取輸入。

此函數應該立即返回用戶輸入的任何內容,或者如果她沒有輸入任何內容,則立即返回一個零字符數。

閱讀select(2)系統調用,並記住鍵盤輸入(標準輸入)是第一個文件描述符,文件描述符爲零。