2014-02-12 109 views
0

我使用Xcode中的命令行创建TicTacToe游戏。除了我无法弄清楚如何避免玩家夺取其他玩家位置之外,我已经有了一切正常的工作。因此,如果玩家选择点[1] [1],如果在整个游戏中任一玩家进入点[1] [1],他们将会得到“无效输入,请再试一次”,他们将不得不选择另一点。有什么建议么?TicTacToe板检查

- (void) getChoice1 
{ 
    do 
    { 
     if (player == 1 && winner == 0 && turns < 9) 
     { 
      do { 
      //player 1's input 
      NSLog(@"Player 1, please choose a cell."); 
      NSLog(@"Enter row number(1, 2, or 3)."); 
      scanf("%ld", &row); 
      } while ((row != 1 && row != 2 && row != 3)); 

     do{ 
     NSLog(@"Enter column number(1, 2, or 3)."); 
     scanf("%ld", &column); 
     } while ((column != 1 && column != 2 && column != 3)); 


     //decrement players input -1 
     row--; 
     column--; 

     //ensure spot is unselected 
     if (arr[row][column] == 1 || arr[row][column] == 2) { 
      NSLog(@"Invalid entry, try another spot"); 

      [self getChoice1]; 
     } 
     else 
     { 

      //add input to board 
      arr [row][column] = 1; 

      //display updated board 
      [self showBoard]; 

      //switch players 
      player = 2; 

      //add a turn 
      turns++; 

      //check for winner 
      [self checkWinner]; 
     } 
    }  
} while (turns < 9 && winner == 0); 

}

回答

0

在朋友的帮助下,我意识到我必须完全重构该方法。这是我的工作答案。

do 
    { 
     if (winner == 0 && turns < 9) 
     { 
      do { 
      //player 1's input 
      if (player == 1) { 
       NSLog(@"Player 1, please choose a cell."); 
      } else { 
       NSLog(@"Player 2, please choose a cell."); 
      } 
      NSLog(@"Enter row number(1, 2, or 3)."); 
      scanf("%ld", &row); 
      } while ((row != 1 && row != 2 && row != 3)); 
      do{ 
      NSLog(@"Enter column number(1, 2, or 3)."); 
      scanf("%ld", &column); 
      } while ((column != 1 && column != 2 && column != 3)); 
      //decrement players input -1 
      row--; 
      column--; 
      //add input to board 
      if (arr [row][column] == 0) { 
       arr [row][column] = player; 
       if (player == 1) { 
        player = 2; 
       } else { 
        player = 1; 
       } 
       //display updated board 
       [self showBoard]; 
       //add a turn 
       turns++; 
      } else { 
       NSLog (@"Cell already used pick a different cell."); 
      }    
      //check for winner 
      [self checkWinner]; 
     } 
    } while (turns < 9 && winner == 0); 
} 
0

你必须让该块被禁用的用户交互。

例如,如果BLOCK1被触摸,使:

block1.userInteractionEnabled = NO; 

一次,比赛结束后,再次进行userInteractionEnabled来回所有块YES。

这将工作,因为我也做了一个类似的游戏。

在命令行的情况下,你可以设置一些变量,例如,如果对于x设定1,0 2集,因为没有游戏设定0

然后,一旦有人新的新闻有检​​查1和2并做所需的

+0

他提到了它的命令行游戏。 – Anil

+0

@samkit,Anil是正确的。它在命令行中。也许我不清楚。我已经创建了一个董事会,我在每个玩家轮到玩家后都会打电话。在每一回合中,如果玩家选择已经选择的地点,他们需要被告知选择另一地点。 – jsollo2

+0

查看我的编辑...... –