2015-11-23 2 views
-3

Я делаю игру с tic tac toe, и я немного застрял на ее создании. Это то, что я до сих пор:Проблемы с созданием игры Tic Tac Toe в Java

package twodarrays; 

import java.util.Scanner; 
public class TwoDArrays { 

    public static void IniBoard(String [][]TicTable){ 
     for (String[] TicTable1 : TicTable) { 
      for (int c = 0; c<TicTable[0].length; c++) { 
       TicTable1[c] = "-"; 
       System.out.print(TicTable1[c]); 
      } 
      System.out.println(""); 
     } 
    } 
    public static void Player1(String Player1, int row1, int col1, String [][]Tictable){ 
     Scanner in = new Scanner(System.in); 
     while(("-").equals (Tictable[row1][col1])){ 
     System.out.println("Player 1#, Enter your row: "); 
     row1=in.nextInt(); 
     System.out.println("Player 1#, Enter your column: "); 
     col1=in.nextInt(); 


     if(!("-").equals(Tictable[row1][col1])){ 
      System.out.println("Invalid Move. Try agian"); 
     } 
     else Tictable[row1][col1]=Player1; 
     break; 
     } 
    } 
    public static void Player2(String Player2, int row2, int col2, String [][]Tictable){ 
     Scanner in = new Scanner(System.in); 
     while(("-").equals (Tictable[row2][col2])){ 
     System.out.println("Player 2#, Enter your row: "); 
     row2=in.nextInt(); 
     System.out.println("Player 2#, Enter your column: "); 
     col2=in.nextInt(); 


     if(!("-").equals (Tictable[row2][col2])){ 
      System.out.println("Invalid Move. Try agian"); 
     } 
     else { 
      Tictable[row2][col2]=Player2; 
      break; 
     } 

     } 
    } 
    public static void main(String[] args) { 

     String Gp1="", Gp2=""; 
     String[][] TicTable = new String [3][3]; 
     String Player1="X", Player2="O"; 
     boolean win=false; 
     int row1=0, row2=0; 
     int col1=0, col2=0; 

      while (win==false){ 
       IniBoard(TicTable); 

       Player1(Player1, row1, col1, TicTable); 
       Player2(Player2, row2, col2, TicTable); 
      } 
    } 
} 

Я сделал способ для игрока 1 и игрока 2. Первый метод, который я сделал был инициализацией мой совет, что часть работы fine.But мой метод для игрока 1 и игрока 2 не работает должным образом. Он должен заменить тире («-») на X или O, но это не так. Поэтому мне нужна помощь в этом. Также я не знаю, как сделать свою выигрышную часть для программы. Если кто-нибудь может помочь, ответьте мне.

+4

Ваш вопрос очень расплывчатый. Вам нужно дать нам конкретную проблему и рассказать нам, как ее воспроизвести, используя свой код. – Keppil

+0

Благодарим за комментирование. Я внес изменения в свой вопрос, чтобы люди могли понять. Но мне нужна помощь быстро – Qwerty6501

ответ

0

Ваш IniBoard уничтожает ход игроков. Отделить инициализацию и вашу печать на два отдельные методы:

public static void IniBoard(String[][] TicTable) 
{ 
    for(String[] TicTable1 : TicTable) 
    { 
     for(int c = 0; c < TicTable[0].length; c++) 
     { 
      TicTable1[c] = "-"; 
     } 
    } 
} 

public static void PrintBoard(String[][] TicTable) 
{ 
    for(String[] TicTable1 : TicTable) 
    { 
     for(int c = 0; c < TicTable[0].length; c++) 
     { 
      System.out.print(TicTable1[c]); 
     } 
     System.out.println(""); 
    } 
} 

Затем измените ваши главный для печати доски каждого цикла, но вызывать только IniBoard, когда начинается игра.

Для выигрышной части вы должны проверить, выиграли ли они после каждого хода. Ниже приведена моя пересмотренная основная функция и пустая функция GetWinner.

public static String GetWinner(String[][] TicTable) 
{ 
    //your code here: 
    return null; 
} 

public static void main(String[] args) 
{ 
    String Gp1 = "", Gp2 = ""; 
    String[][] TicTable = new String[3][3]; 
    String Player1 = "X", Player2 = "O"; 
    String winner = null; 
    int row1 = 0, row2 = 0; 
    int col1 = 0, col2 = 0; 

    IniBoard(TicTable); 
    while(winner == null) 
    { 
     PrintBoard(TicTable); 
     Player1(Player1, row1, col1, TicTable); 
     Player2(Player2, row2, col2, TicTable); 
     winner = GetWinner(TicTable); 
    } 
} 
0

Первый выпуск, я вижу, вы используете IniBoard() снова и снова, пока игра еще не закончена.

while (win==false){ 
    IniBoard(TicTable); //<---------Move this line above the while loop. 

    Player1(Player1, row1, col1, TicTable); 
    Player2(Player2, row2, col2, TicTable); 
} 

как так ...

IniBoard(TicTable);    
while (win==false){ 
    Player1(Player1, row1, col1, TicTable); 
    Player2(Player2, row2, col2, TicTable); 
} 

Кроме того, внутри вашего player1 и Player2 функций, условие очистного времени цикла не является отличным способом, чтобы проверить, если пользователи должны повернуть конец. Что произойдет, если первый ход (0,0)? Тогда цикл не будет выполняться в следующий раз, когда игроки 1, так как он больше не будет установлен на «-».

while(("-").equals (Tictable[row1][col1])){