2017-02-11 10 views
-2

私は、5x5コンソールの販売で看板と十字のゲームを書いています。 次の問題に直面した:TicTacToe 5x5(Javaコンソール)

1)何らかの理由で、ゲームは、選択されたセルのタイプに応じて、最初のストロークと2番目のストロークの後に終了することができます。たとえば、0と6のセルを選択すると、Xはすでに勝者です。または22番目を選択すると、ゲームも終了します。

2)美しい細胞境界。それは良いまたは1桁または2桁のために作ることが判明しました。美しいテーブルを作る方法? コード:

package game; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class GameField { 

    static int [] canvas = {0,0,0,0,0, 
          0,0,0,0,0, 
          0,0,0,0,0, 
          0,0,0,0,0, 
          0,0,0,0,0}; 

    public static void main(String[] args){ 

     boolean b; 
     boolean isCurrentX = false; 
     do { 
      isCurrentX = !isCurrentX; 
      drawCanvas(); 
      System.out.println("Ходит " + (isCurrentX ? "X" : "O")); 
      int n = getNumber(); 
      canvas[n] = isCurrentX ? 1 : 2; 
      b = !isGameOver(n); 
      if (isDraw()){ 
       System.out.println("Draw"); 
       return; 
      } 
     } while (b); 
     drawCanvas(); 
     System.out.println(); 

     System.out.println("ПОбедитель: " + (isCurrentX ? "X" : "O") + "!"); 
    } 

    static int getNumber(){ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
     while (true){ 
      try { 
       int n = Integer.parseInt(reader.readLine()); 
       if (n >= 0 && n < canvas.length && canvas[n]==0){ 
        return n; 
       } 
       System.out.println("Выберите свободное поле и введите его порядковый номер"); 
      } catch (NumberFormatException e) { 
       System.out.println("Пожалуйста, введите порядковый номер клетки"); 
      } catch (IOException e) { 
      } 
     } 
    } 

    static boolean isGameOver(int n){ 
     // 
     // 0 1 2 3 4 
     // 5 6 7 8 9 
     // 10 11 12 13 14 
     // 15 16 17 18 19 
     // 20 21 22 23 24 

     int row = n-n%5; 
     if (canvas[row]==canvas[row+1] && 
       canvas[row]==canvas[row+2] && 
         canvas[row]==canvas[row+3] && 
           canvas[row]==canvas[row+4]) return true; 

     int column = n%5; 
     if (canvas[column]==canvas[column+5]) 
      if (canvas[column]==canvas[column+10]) 
       if (canvas[column]==canvas[column+15]) 
        if (canvas[column]==canvas[column+20])return true; 

     if (n%2!=0) return false; 

     if (n%4==0){ 

      if (canvas[0] == canvas[6] && 
        canvas[0] == canvas[12] && 
          canvas[0] == canvas[18] && 
            canvas[0] == canvas[24]) return true; 
      if (n!=4) return false; 
     } 
     return canvas[2] == canvas[4] && 
       canvas[2] == canvas[8]&& 
         canvas[2] == canvas[12]&& 
           canvas[2] == canvas[16]&& 
             canvas[2] == canvas[20]; 
    } 

    static void drawCanvas(){ 
     System.out.println("  |  |  "); 
     for (int i = 0; i < canvas.length; i++) { 
      if (i!=0){ 
       if (i%5==0) { 
        System.out.println(); 
        System.out.println("_____|_____|_____"); 
        System.out.println("  |  |  "); 
       } 
       else 
        System.out.print("|"); 
      } 

      if (canvas[i]==0) System.out.print(" " + i + " "); 
      if (canvas[i]==1) System.out.print(" X "); 
      if (canvas[i]==2) System.out.print(" O "); 
     } 
     System.out.println(); 
     System.out.println("  |  |  "); 
    } 

    public static boolean isDraw() { 
     for (int n : canvas) if (n==0) return false; 
     return true; 
    } 
} 

答えて

1

私は美しいセルの枠線を作るためにあなたを助けることができる:あなたのisGameOver()メソッドについては

static void drawCanvas(){ 
    System.out.println("  |  |  |  |  |"); 
    for (int i = 0; i < canvas.length; i++) { 
     if (i!=0){ 
      System.out.print("|"); 
      if (i%5==0) { 
       System.out.println(); 
       System.out.println("_____|_____|_____|_____|_____|"); 
       System.out.println("  |  |  |  |  |"); 
      } 
     } 

     if (canvas[i]==0) { 
      if(i<10) { 
       System.out.print(" " + i + " "); 
      } 
      else { 
       System.out.print(" " + i + " "); 
      } 
     } 
     if (canvas[i]==1) System.out.print(" X "); 
     if (canvas[i]==2) System.out.print(" O "); 
    } 
    System.out.print("|"); 
    System.out.println(); 
    System.out.println("  |  |  |  |  |"); 
} 

、私はあなたがこのblogから技術を使用することができると思う: (isWinを参照してください。 )メソッドを呼び出し、変更3〜5を変更します。