2015-04-25 40 views
0

好吧,所以我在C編碼方面真的很新,而且我的代碼中有很多複製和粘貼。 (這是我最後的項目,所以如果時間允許的話,我真的沒有時間優化和縮短,直到結束)。無論如何,爲了這個原因,我會避免發佈我的所有代碼。我只會發布我正在嘗試做的相關部分。隨機移動tic tac腳趾在c

我需要遊戲從1-9中挑選一個隨機數字,然後使用該數字來選擇棋盤上的移動。我在代碼的這一部分添加了一個printf來確保一個數字被選中,但是當我去scanf時,遊戲只是閃爍提示並且不會繼續。

有沒有人看到有什麼不對或我需要發佈任何其他代碼段?任何幫助將非常感謝!我只包含了遊戲的一個玩家部分,然後計算機應該移動。我取消了勝利支票和董事會的重新印刷。讓我知道如果你們需要看到其他的東西,我只是不想擁有一大塊代碼。

if (player == 1) 
    { 
     for(k=0;k<9;k++) // 9 moves max. 
     { 
     printf("\n\n"); // print board again. 
     printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]); 
     printf("---+---+---\n"); 
     printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]); 
     printf("---+---+---\n"); 
     printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]); 

     do 
     { 
      printf("Player 1, where would you like to move? Enter 1-9\n"); 
      scanf("%d", &move); 

      if (move == 1) 
       board[0][0] = '1'; 
      if (move == 2) 
       board[0][1] = '1'; 
      if (move == 3) 
       board[0][2] = '1'; 
      if (move == 4) 
       board[1][0] = '1'; 
      if (move == 5) 
       board[1][1] = '1'; 
      if (move == 6) 
       board[1][2] = '1'; 
      if (move == 7) 
       board[2][0] = '1'; 
      if (move == 8) 
       board[2][1] = '1'; 
      if (move == 9) 
       board[2][2] = '1'; 

     }while(move>9 && move <1); 


     do 
     { 
      printf("Computer moves..."); 


      move = rand() % 9 + 1; 
      printf("%d", move); 
      scanf("%d", &move); 


      if (move == 1) 
       board[0][0] = '2'; 
      if (move == 2) 
       board[0][1] = '2'; 
      if (move == 3) 
       board[0][2] = '2'; 
      if (move == 4) 
       board[1][0] = '2'; 
      if (move == 5) 
       board[1][1] = '2'; 
      if (move == 6) 
       board[1][2] = '2'; 
      if (move == 7) 
       board[2][0] = '2'; 
      if (move == 8) 
       board[2][1] = '2'; 
      if (move == 9) 
       board[2][2] = '2'; 


     }while(move>9 && move <1); 



    } 
+1

你在期待'scanf()'做什麼? –

+0

掃描計算機選取的隨機數?當我用人體部分做到這一點時,它就可以工作。但是,當我使用rand來選擇數字時,它看到scanf不? –

+0

@GabriellaCoronell Afaik(我不知道c),'scanf'從控制檯請求輸入,而不是任何任意的來源。 – Carcigenicate

回答

1

看來,你需要從你的代碼reamove scanf()scanf()塊,直到輸入被提供給程序,它返回匹配格式字符串如果有的話,通過輸入項目的數量。

如果您使用rand()生成號碼,則根本不需要任何輸入。

請閱讀this,瞭解scanf()的用途。

+0

哇哈哈。這樣一個簡單的解決方案,我一直堅持。非常感謝。 –

+0

另外,感謝您的鏈接! –

0

試試這個

move = rand() % 9;

避免這種情況。

+0

這似乎是一個評論,而不是一個答案。請編輯您的問題以提供更好的解釋,建議如答案應在評論部分給出。 – Siraj