2015-11-23 53 views
-3

我正在製作一個tic tac toe遊戲,而且我有點卡住了。這是我到目前爲止有:關於在Java中製作一個Tic Tac Toe遊戲的問題

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功能,while循環回採條件不檢查,如果用戶轉向應該結束的好方法。如果第一步是(0,0)會發生什麼?然後,循環將不會在下一次玩家1時執行,因爲它不再設置爲「 - 」。

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