2017-02-10 95 views
-1

這是我目前對於tic tac腳趾的代碼,它運行良好,我修正瞭如何保持分數,但是,我覺得代碼不夠好,乾淨。有什麼方法可以使代碼更清潔。Tic Tac Toe Score

import java.util.Scanner; 
import java.io.*; 
import java.lang.String; 


     public class TicTacToe{ 
      public static int a; 
      public static int b; 
      public static int c; 
      public static int d; 
      public static int e; 
      public static int f; 
      public static int g; 
      public static int h; 
      public static int i; 
        public static boolean Winner(){ 
          if(a == 1 && b == 1 && c == 1){ 
            return true;  
            } 
           else if(d == 1 && e == 1 && f == 1){ 
            return true;  
            } 
           else if(g == 1 && h == 1 && i == 1){ 
            return true;  
            } 
           else if(a == 1 && d == 1 && g == 1){ 
            return true;  
            } 
           else if(b == 1 && e == 1 && h == 1){ 
            return true;  
            } 
           else if(c == 1 && f == 1 && i == 1){ 
            return true;  
            } 
           else if(a == 1 && e == 1 && i == 1){ 
            return true;  
            } 
           else if(c == 1 && e == 1 && g == 1){ 
            return true;  
            } 
           else if(a == 2 && b == 2 && c == 2){ 
            return true;  
            } 
           else if(d == 2 && e == 2 && f == 2){ 
            return true;  
            } 
           else if(g == 2 && h == 2 && i == 2){ 
            return true; 
            }  
           else if(a == 2 && d == 2 && g == 2){ 
            return true; 
            }  
           else if(b == 2 && e == 2 && h == 2){ 
            return true; 
            }  
           else if(c == 2 && f == 2 && i == 2){ 
            return true; 
            }  
           else if(a == 2 && e == 2 && i == 2){ 
            return true;  
            } 
           else if(c == 2 && e == 2 && g == 2){ 
            return true; 
            }  
            return false; 
            } 
       public static void main (String args[]){ 
         String line1 = "1 | 2 | 3"; 
         String line2 = "-------"; 
         String line3 = "4 | 5 | 6"; 
         String line4 = "-------"; 
         String line5 = "7 | 8 | 9"; 
         String line6 = "-------"; 
           Scanner tic = new Scanner (System.in); 
           Scanner tac = new Scanner (System.in); 

            System.out.println("Welcome to a game of Tic Tac Toe"); 
            System.out.println("The game for those who aren't good at anything else."); 
            System.out.println (line1); 
            System.out.println (line2); 
            System.out.println (line3); 
            System.out.println (line4); 
            System.out.println (line5); 
            System.out.println (line6); 


        for (int i=0; i < 7; i++) 
         { 

         System.out.println("First player please choose a number. "); 
         int number = tic.nextInt(); 

         if (number == 1){ 
         line1 = line1.replace ("1","O"); 
         a = 1; 
         } 
         if (number == 2){ 
         line1 = line1.replace ("2","O"); 
         b = 1; 
         } 
         if (number == 3){ 
         line1 = line1.replace ("3","O"); 
         c = 1; 
         } 
         if (number == 4){ 
         line3 = line3.replace ("4","O"); 
         d = 1; 
         } 
         if (number == 5){ 
         line3 = line3.replace ("5","O"); 
         e = 1; 
         } 
         if (number == 6){ 
         line3 = line3.replace ("6","O"); 
         f = 1; 
         } 
         if (number == 7){ 
         line5 = line5.replace ("7","O"); 
         g = 1; 
         } 
         if (number == 8){ 
         line5 = line5.replace ("8","O"); 
         h = 1; 
         } 
         if (number == 9){ 
         line5 = line5.replace ("9","O"); 
         i = 1; 
         } 


          System.out.println(line1); 
          System.out.println(line2); 
          System.out.println(line3); 
          System.out.println(line4); 
          System.out.println(line5); 
            if(Winner()){ 
            System.out.println("First Player wins."); 
            System.exit(1); 
             } 
          if(a != 0 && b != 0 && c != 0 && d != 0 && e != 0 && f != 0 && g != 0 && h != 0 && i != 0){ 
            System.exit(1); 
             } 
         System.out.println("Second player please choose a number. "); 
         int number2 = tac.nextInt(); 

         if (number2 == 1){ 
         line1 = line1.replace ("1","X"); 
         a = 2; 
         } 
         if (number2 == 2){ 
         line1 = line1.replace ("2","X"); 
         b = 2; 
         } 
         if (number2 == 3){ 
         line1 = line1.replace ("3","X"); 
         c = 2; 
         } 
         if (number2 == 4){ 
         line3 = line3.replace ("4","X"); 
         d = 2; 
         } 
         if (number2 == 5){ 
         line3 = line3.replace ("5","X"); 
         e = 2; 
         } 
         if (number2 == 6){ 
         line3 = line3.replace ("6","X"); 
         f = 2; 
         } 
         if (number2 == 7){ 
         line5 = line5.replace ("7","X"); 
         g = 2; 
         } 
         if (number2 == 8){ 
         line5 = line5.replace ("8","X"); 
         h = 2; 
         } 
         if (number2 == 9){ 
         line5 = line5.replace ("9","X"); 
         i = 2; 
         } 
           System.out.println(line1); 
           System.out.println(line2); 
           System.out.println(line3); 
           System.out.println(line4); 
           System.out.println(line5); 
           System.out.println(line6); 
           if(Winner()){ 
            System.out.println("Second Player wins."); 
            System.exit(1); 
             } 
          if(a != 0 && b != 0 && c != 0 && d != 0 && e != 0 && f != 0 && g != 0 && h != 0 && i != 0){ 
            System.exit(1); 
     } 
    } 
    } 
    } 

這個工程,但是有沒有更有效的方法來解決它?

+1

你是什麼意思「它似乎不工作」?我沒有看到任何旨在記錄分數的變量。 – Carcigenicate

+1

你不應該首先實現算法來檢測獲勝者嗎?目前缺失。你應該做一些關於避免代碼重複的研究。即使你是新手,你也應該關心這一點。 – Tom

+1

代碼格式是可怕的。請格式化(縮進代碼)以提高可讀性。 ---代碼重複太多。你有沒有學過*方法*? ---請閱讀:[如何創建**最小**,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Andreas

回答

1

當玩家獲勝時,您的程序似乎無法檢測到。 一旦你實現了,你所要做的就是跟蹤每個玩家的整數分數。當你發現任一玩家贏了,就增加與他的分數相對應的整數。 :)

+0

另外,即使所有的方塊都填滿了X和O,遊戲也不會結束。 –

+0

@DavidChoweller不,結束,但'for'循環計數器太高(沒有420雙關語:P)。 – Tom

2

爲了獲得遊戲的勝者和失敗者,並給出適當的分數,你必須檢查你的遊戲板的狀態。解析文本有點複雜,並且需要很多不必要的工作,所以我建議你以某種方式代表matrix中的電路板。

例子:

char[][] gameBoard = new char[3][3]; 

這樣,當您通過掃描儀收到的輸入,爲您的代碼做,你將進入你想要的(「O」或「X」)的炭像這樣的遊戲鍵盤變量:

// number is 1-9 according to your code 
int row = number/3; // Gives you 0 or 1 or 2 
int col = number%3; // Gives you 0 or 1 or 2 
gameBoard[row][col] = 'O'; // or 'X' 

每個玩家每回合後,您將調用下面的函數(完成自己的代碼,查找java的矩陣迭代):

public boolean hasWinner(int playerNumber) 
{ 
    // playerNumber will be passed according to which player did the current turn. 
    // The function will try to search for the sequence that wins the game. 

} 
0
import javax.swing.*; 
import java.util.*; 
public class TicTacToe 
{ 
private String [] line = new String[5]; 
private Scanner input; 
private int counter; 

public TicTacToe() 
{ 
    counter = 0; 
    input = new Scanner(System.in); 
    line[0] = "1 | 2 | 3"; 
    line[1] = "_______"; 
    line[2] = "4 | 5 | 6"; 
    line[3] = "_______"; 
    line[4] = "7 | 8 | 9"; 
} 

public void rulesOfTheGame(){ 
    System.out.println("Tic Tac Toe"); 
    System.out.println(line); 
} 

public void replace(String str) 
{ 
    for (int j = 1; j < 10; j++) 
    { 
     System.out.println("Player choose a number."); 
     int number; 
     number = 0; 
     for (int i = 1; i < 10; i++) 
     { 
      number = input.nextInt(); 
      if ((number == i) && ((i == 1) || (i == 2) || (i == 3))){ 
       String num = "" + i + ""; 
       line[0] = line[0].replace(num,str); 
       counter++; 
      } 
      if ((number == i) && ((i == 4) || (i == 5) || (i == 6))){ 
       String num = "" + i + ""; 
       line[2] = line[2].replace(num,str); 
       counter++; 
      } 
      else 
      { 
       String num = "" + i + ""; 
       line[4] = line[4].replace(num,str); 
       counter++; 
      } 
      System.out.println(line); 
     } 
    } 
} 

public void winnerWinnerChickenDinner() 
{ 
    if ((counter >= 5) && (counter < 9)){ 
     String isItOver = JOptionPane.showInputDialog("Getting down to the wire here, is the game over yet! CAPITAL Y FOR YES OR CAPITAL N FOR NO", "Game Over"); 
     if (isItOver.equals("Y")) 
     { 
      System.out.println("Game Over"); 
     } 
     else 
     { 
      System.out.print(""); 
     } 
    } 
    else if (counter == 9){ 
     System.out.println("Game Over"); 
     System.exit(0); 
    } 
} 
} 

這是最高效的代碼。我實際上可以創造。我相信有更簡單的方法來做到這一點;然而,我認爲這幾乎沒有重複的代碼,仍然非常簡潔。

+0

另外,您需要創建一個新的客戶端類來實際獲取打印值。 – user7282043