2011-12-14 49 views
1

我是Java的新手,我需要一些2D數組的幫助。如何檢查是否繪製(java遊戲)

總之,這是一個4x4網格,每個玩家決定通過輸入獲得哪個位置。

Player1使用「1」,player2使用「2」。獲勝者是佔用2x2的人。 例如

1 2 0 0 
0 1 1 2 
2 1 1 2 
2 0 0 0 

玩家1在這種情況下獲勝。我沒有問題決定誰贏了兩場,但我不能執行正確的抽籤。例如

1 2 1 2 
1 2 1 2 
1 2 1 2 

這是一個抽獎遊戲,因爲沒有玩家在網格中獲得2x2。但是,我不知道如何檢測,而不會破壞別的東西。 :(

任何幫助深表感謝

回答

3

如果你知道如何檢測一個勝利者不應該有一個問題,如果檢測比賽以平局結束。

  1. 尋找一個贏家
  2. 沒有發現贏家?這是一個平局。
+0

如果我使用嵌套循環檢查獲勝者,可以這樣做嗎? – bbalchev 2011-12-14 07:06:36

+0

@BlagovestBalchev是的,無論您如何檢查贏家,您都應該能夠溝通沒有找到贏家。一個非常簡單的解決方案是在嵌套循環中找到贏家後,添加一個標記`found_winner`(初始化爲false),該標記設置爲`true`。如果在循環之後`found_winner`爲假,它就是一個平局。 – 2011-12-14 07:09:23

+0

問題在於每個玩家輪流後都會進行檢查。如果循環沒有找到贏家,它說繪製。 :( 要麼是我做錯了什麼。 – bbalchev 2011-12-14 07:27:02

1

可以解析數組和搜索的2個連續發生或1

如果沒有任何退出,它是一個平局!

int board[][] = new int[4][4]; 
boolean drawFlag = true; 

for(int i = 0; i<4; i++) 
{ 
    for(int j=1; j<4; j++) 
    { 
     if(board[i][j-1] == board[i][j]) 
      drawFlag = false; 
     } 
    } 

    if(drawFlag == true) 
    System.out.println("Its a draw!"); 
1

我想,你在問如何檢測遊戲狀態的模式。我定義了3種遊戲狀態,分別是draw(0),win(1)和not-determined(2)。當遊戲正在玩並且贏或失狀態不確定時,則遊戲狀態不確定。你的問題完全涉及到生成遊戲狀態評估算法。細節有點複雜。無論你問什麼,解決問題的方法就是下面給出的代碼。如果您需要進一步解釋,請隨時反饋。

該解決方案由兩個操作組成。第一次操作在給定的開始座標處掃描勝利條件的矩陣。第二個操作爲第一個操作生成所有起始座標。

這是第一次操作是什麼提到以上定義的返回值:

int evaluateSection(int startPosX, int startPosY) 
{ 
    int firstVal; 
    boolean emptyExists = false; 
    for(int i=0;i<2;i++) 
    { 
     for(int j=0;j<2;j++) 
     { 
      if(i==0 && j==0) 
       firstVal = matrix[startPosX + i][startPosY + j]; 
      else if(firstVal == 0) 
      { 
       firstVal = matrix[startPosX + i][startPosY + j]; 
       emptyExists = true; 
      } 

      else if(matrix[startPosX + i][startPosY + j] !=0 && matrix[startPosX + i][startPosY + j] !=firstVal) 
       return 0; 
      else if(matrix[startPosX + i][startPosY + j] ==0) 
       emptyExists = true; 

     } 

    } 
    if(emptyExists==false) 
     return 1; 
    else 
     return 2; 

} 

二操作掃描在遊戲領域的所有部分,並使用第一操作:

int result() 
{ 
    int tmp,res=0; 
    for(int i=0;i<3;i++) 
     for(int j=0;j<3;j++) 
     { 
      tmp=evaluateSection(i,j); 
      if(tmp==0 && res!=2) 
       res=0; 
      if(tmp==1) 
      { 
       return 1; 
      } 
      else if(tmp==2) 
      { 
       res=2; 
      } 
     } 
    return res; 
} 

正如你看到的,它變得複雜。但算法就是這樣。試試。