2013-03-11 161 views
0

我想在Java中編寫一個簡單的遊戲,使用二維數組爲用戶創建網格點。我已經完成了這一步,並且我已經到了要求用戶選擇其動作的點,但是,在此之後,我想重新打印其舊空間爲空的網格,並使用「o」他們搬到的空間。我不確定如何去重新打印網格,因爲當我第一次打印它時,我使用if語句來告訴循環在哪裏不放點。我會發佈下面的代碼,非常感謝提示!簡單的二維數組java遊戲

import java.util.Scanner; 
import java.util.Random; 
public class main { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    char[][] gridArray = new char[10][10]; 
    int randomRow; 
    int randomCol; 
    int randomRow2; 
    int randomCol2; 
    String moveSelect; 
    boolean validInput = true; 

    int min = 0; 
    int max = 9; 

    Random tRNG = new Random(); 
    randomRow = tRNG.nextInt(max - min + 1) + min; 
    randomCol = tRNG.nextInt(max - min + 1) + min; 
    randomRow2 = tRNG.nextInt(max - min + 1) + min; 
    randomCol2 = tRNG.nextInt(max - min + 1) + min; 

    gridArray[randomRow][randomCol] = 'o'; 
    gridArray[randomRow2][randomCol2] = 'X'; 

    for (int i = 0; i < gridArray.length; i++) 
    { 
     for (int j = 0; j < gridArray.length; j++) 
     {  
      if (gridArray[i][j] != gridArray[randomRow][randomCol] && gridArray[i][j] != gridArray[randomRow2][randomCol2]) 
      { 
       gridArray[i][j] = '.'; 
      } 
      System.out.print(gridArray[i][j]); 
     } 
     System.out.println(""); 
    } 

    System.out.println("Enter a movement choice W A S or D"); 
    do{ 

     Scanner keyboard = new Scanner(System.in); 
     moveSelect = keyboard.nextLine(); 

     if (moveSelect.equals("w")) 
     { 
      gridArray[randomRow][randomCol] = gridArray[randomRow+1][randomCol]; 
      gridArray[randomRow][randomCol] = ' '; 
      validInput = true;  
     } 

     else if (moveSelect.equals("a")) 
     { 
      gridArray[randomRow][randomCol] = gridArray[randomRow][randomCol-1]; 
      gridArray[randomRow][randomCol] = ' '; 
      validInput = true; 
     } 

     else if (moveSelect.equals("s")) 
     { 
      gridArray[randomRow][randomCol] = gridArray[randomRow-1][randomCol]; 
      gridArray[randomRow][randomCol] = ' '; 
      validInput = true; 
     } 

     else if (moveSelect.equals("d")) 
     { 
      gridArray[randomRow][randomCol] = gridArray[randomRow][randomCol+1]; 
      gridArray[randomRow][randomCol] = ' '; 
      validInput = true; 
     } 

     else 
     { 
      System.out.println("Invalid Entry. Try again."); 
      validInput = false; 
     } 

    } while (validInput == false); 
} 

} 
+0

您可以指定哪些W,A,S,d分別對應? (如上,下,左,右)。此外,您需要進行驗證以確保其移動不會將其移出數組的邊界。 – 2013-03-11 01:53:16

+0

我的錯誤,w = up,a = left,s = down,d = right。我明白你的意思,如果它超出界限並不確定如何處理它,雖然 – user2150807 2013-03-11 01:54:19

+0

如果w是up,s是down的,你有行添加混合,你應該減去去更高的行基於你如何印刷。 – 2013-03-11 01:56:55

回答

0

做的方法來打印我修改你的gridArray [randomRow] [randomCol]從= ' '爲=' 網格如果ValidInput的==真

public static void printGrid(char[][]gridArray){ 
    for (int i = 0; i < gridArray.length; i++) 
    { 
     for (int j = 0; j < gridArray.length; j++) 
     {  
      System.out.print(gridArray[i][j]); 
     } 
     System.out.println(""); 
    } 
} 

'。因爲你想讓它成爲一個點嗎? (如果你真的希望它是一個空間,只要把它就像它已經是) 進行驗證,每個方向改變的東西,如:

if (moveSelect.equals("w")&&randomRow!=0) 
     { 
      gridArray[randomRow][randomCol] = gridArray[randomRow-1][randomCol]; 
      gridArray[randomRow][randomCol] = '.'; 
      validInput = true;  
     } 

在做結束,

if(validInput) printGrid(gridArray); 
+0

好吧我改變了每個驗證,那些工作很好。我想我應該解釋我是新來的Java,所以我不確定如何使用一種方法,但我會讀取 – user2150807 2013-03-11 02:13:29

+0

一種方法是一個功能塊的代碼塊。它可以被多次調用,所以你不必重複你輸入的所有東西。你只是將它稱爲我在if語句中編寫的內容,並且它會遍歷方法中的所有代碼。 – 2013-03-11 02:18:07

1

我認爲大部分問題都來自對數組的一般混淆。例如。從按下瓦特代碼塊運行的行:

gridArray[randomRow][randomCol] = gridArray[randomRow+1][randomCol]; 

設置在randomRow,randomCol陣列的炭值(在這種情況下的「x」),以的陣列空間中的一個的char值在randomRow + 1,randomCol下面的行。然後代碼行:

gridArray[randomRow][randomCol] = ' '; 

給同一空間分配一個新的值,使上面的代碼變得毫無價值!最後,randomRow和randomCol永遠不會被修改。 (你也有一些混淆哪個方向X將具有較高的行值移動)

你確實需要在這個代碼塊做的是:

randomRow -= 1; 

在此之後,你可以簡單地轉載整個網格與之前的打印代碼。儘管此代碼還存在其他問題,使其遠沒有達到最佳效果。此外,還有一個類似的問題,如果for循環中的語句工作,但後來導致問題。簡單地重寫它來解決所有的事情錯了,你將會得到:

char[][] gridArray = new char[10][10]; 
int randomRow; 
int randomCol; 
int randomRow2; 
int randomCol2; 
String moveSelect; 
boolean validInput = true; 

int min = 0; 
int max = 9; 

Random tRNG = new Random(); 
randomRow = tRNG.nextInt(max - min + 1) + min; 
randomCol = tRNG.nextInt(max - min + 1) + min; 
randomRow2 = tRNG.nextInt(max - min + 1) + min; 
randomCol2 = tRNG.nextInt(max - min + 1) + min; 

gridArray[randomRow][randomCol] = 'o'; 
gridArray[randomRow2][randomCol2] = 'X'; 

for (int i = 0; i < gridArray.length; i++) 
{ 
    for (int j = 0; j < gridArray.length; j++) 
    {  
     if (!((i == randomRow && j == randomCol) || (i == randomRow2 && j == randomCol2))) 
     { 
      gridArray[i][j] = '.'; 
     } 
     System.out.print(gridArray[i][j]); 
    } 
    System.out.println(""); 
} 

System.out.println("Enter a movement choice W A S or D"); 
do{ 

    Scanner keyboard = new Scanner(System.in); 
    moveSelect = keyboard.nextLine(); 

    if (moveSelect.equals("w")) 
    { 
     randomRow -= 1; 
     validInput = true;  
    } 

    else if (moveSelect.equals("a")) 
    { 
     randomCol -= 1; 
     validInput = true; 
    } 

    else if (moveSelect.equals("s")) 
    { 
     randomRow += 1; 
     validInput = true; 
    } 

    else if (moveSelect.equals("d")) 
    { 
     randomCol -= 1; 
     validInput = true; 
    } 

    else 
    { 
     System.out.println("Invalid Entry. Try again."); 
     validInput = false; 
    } 

} while (validInput == false); 
gridArray[randomRow][randomCol] = 'o'; 
gridArray[randomRow2][randomCol2] = 'X'; 

for (int i = 0; i < gridArray.length; i++) 
{ 
    for (int j = 0; j < gridArray.length; j++) 
    {  
     if (!((i == randomRow && j == randomCol) || (i == randomRow2 && j == randomCol2))) 
     { 
      gridArray[i][j] = '.'; 
     } 
     System.out.print(gridArray[i][j]); 
    } 
    System.out.println(""); 
} 
+0

也是,對於這樣一個簡單的任務,可以簡單地消除char [] []。 – bob0007 2013-03-11 03:58:52