2017-02-22 68 views
1

在此我提出叫洪水据我无法打印,我做它有一个构造函数,是对象的游戏:试图打印元素的二维数组中的Java

Dot(int x, int y, int color) 

我有三类一类是DotInfo.java:

public class DotInfo { 


private int x; 
private int y; 
private int color; 
private boolean captured; 

public DotInfo(int x, int y, int color){ 
    this.x = x; 
    this.y = y; 
    this.color = color; 
    captured = false; 
} 

public int getX(){ 
    return x; 
} 

public int getY(){ 
    return y; 
} 


public void setCaptured(boolean captured) { 
    this.captured = captured; 
} 

public boolean isCaptured(){ 
    return captured; 
} 

public int getColor() { 
    return color; 
} 

} 

我第二类是GameModel.java:

import java.util.Random; 

public class GameModel { 


/** 
* predefined values to capture the color of a DotInfo 
*/ 
public static final int COLOR_0   = 0; 
public static final int COLOR_1   = 1; 
public static final int COLOR_2   = 2; 
public static final int COLOR_3   = 3; 
public static final int COLOR_4   = 4; 
public static final int COLOR_5   = 5; 
public static final int NUMBER_OF_COLORS = 6; 

public static DotInfo[][] dots; 
private DotInfo dot; 
private int size; 
private int currentColor; 
private Random generator; 
private int steps; 
private String rep; 

/** 
* Constructor to initialize the model to a given size of board. 
* 
* @param size 
*   the size of the board 
*/ 
public GameModel(int size) { 
    this.size = size; 
} 


/** 
* Resets the model to (re)start a game. The previous game (if there is one) 
* is cleared up . 
*/ 
public void reset(){ 
    int color = 0; 
    dots = new DotInfo[size][size]; 
    for (int i=0;i<size;i++) { 
     for (int j=0;j<size;j++) { 
      new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 
      System.out.println(dots[i][j]); 
     } 
    } 
} 


/** 
* Getter method for the size of the game 
* 
* @return the value of the attribute sizeOfGame 
*/ 
public int getSize(){ 
    return size; 
} 

/** 
* returns the current color of a given dot in the game 
* 
* @param i 
*   the x coordinate of the dot 
* @param j 
*   the y coordinate of the dot 
* @return the status of the dot at location (i,j) 
*/ 
public int getColor(int i, int j){ 
    int color=0; 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      if (dots[x][y].getX()==i && dots[x][y].getY()==j) { 
       color=dots[x][y].getColor(); 
      } 
     } 
    } 
    return color; 
} 

/** 
* returns true is the dot is captured, false otherwise 
* 
* @param i 
*   the x coordinate of the dot 
* @param j 
*   the y coordinate of the dot 
* @return the status of the dot at location (i,j) 
*/ 
public boolean isCaptured(int i, int j){ 
    boolean capture = true; 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      if (dots[x][y].getX()==i && dots[x][y].getY()==j) { 
       capture=dots[x][y].isCaptured(); 
      } 
     } 
    } 
    return capture; 
} 

/** 
* Sets the status of the dot at coordinate (i,j) to captured 
* 
* @param i 
*   the x coordinate of the dot 
* @param j 
*   the y coordinate of the dot 
*/ 
public void capture(int i, int j){ 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      if (dots[x][y].getX()==i && dots[x][y].getY()==j) { 
       dots[x][y].setCaptured(true); 
      } 
     } 
    } 
} 


/** 
* Getter method for the current number of steps 
* 
* @return the current number of steps 
*/ 
public int getNumberOfSteps(){ 
    return steps; 
} 

/** 
* Setter method for currentSelectedColor 
* 
* @param val 
*   the new value for currentSelectedColor 
*/ 
public void setCurrentSelectedColor(int val) { 
    currentColor = val; 
} 

/** 
* Getter method for currentSelectedColor 
* 
* @return currentSelectedColor 
*/ 
public int getCurrentSelectedColor() { 
    return currentColor; 
} 


/** 
* Getter method for the model's dotInfo reference 
* at location (i,j) 
* 
    * @param i 
*   the x coordinate of the dot 
* @param j 
*   the y coordinate of the dot 
* 
* @return model[i][j] 
*/ 
public DotInfo get(int i, int j) { 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      if (dots[x][y].getX()==i && dots[x][y].getY()==j) { 
       dot = dots[x][y]; 
      } 
     } 
    } 
    return dot; 
} 


/** 
* The metod <b>step</b> updates the number of steps. It must be called 
* once the model has been updated after the payer selected a new color. 
*/ 
public void step(){ 
    steps++; 
} 

/** 
* The metod <b>isFinished</b> returns true iff the game is finished, that 
* is, all the dats are captured. 
* 
* @return true if the game is finished, false otherwise 
*/ 
public boolean isFinished(){ 
    boolean flag=true; 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      if (dots[x][y].isCaptured()==false) { 
       flag=false; 
      } 
     } 
    } 
    return flag; 
} 


/** 
* Builds a String representation of the model 
* 
* @return String representation of the model 
*/ 
public String toString(){ 
    for (int x=0;x<size;x++) { 
     for (int y=0;y<size;y++) { 
      rep += "Dot("+dots[x][y].getX()+", "+ dots[x][y].getY()+", "+dots[x][y].getColor()+")"; 
     } 
    } 
    return rep; 
} 
} 

我迈运行一切n个等级是Floodit.java

public class FloodIt { 


/** 
* <b>main</b> of the application. Creates the instance of GameController 
* and starts the game. If a game size (<12) is passed as parameter, it is 
* used as the board size. Otherwise, a default value is passed 
* 
* @param args 
*   command line parameters 
*/ 
public static void main(String[] args) { 
    GameModel model = new GameModel(5); 
    model.reset(); 
    System.out.println(model); 

    } 


} 

谁能告诉我为什么当我把我的reset()方法我的阵列将不会更新?

回答

1

您忘记将新的DotInfo()对象分配给数组的每个位置。

行:

new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 

应该是:

dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 
1
在复位方法

你有一个for循环做:

dots = new DotInfo[size][size]; 
    for (int i=0;i<size;i++) { 
     for (int j=0;j<size;j++) { 
      new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 
      System.out.println(dots[i][j]); 
     } 
    } 

这条线,

new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 

是无所事事....

您创建了一个对象,是的,但它不是分配给什么,从而使物体迷路....

你必须是新的对象赋给二维数组中的元素...

dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1); 

编辑:

,另一方面,则需要初始化发电机对象:

public GameModel(int size) { 
    this.size = size; 
    generator = new Random(); 

} 
+0

刚刚编辑它,现在它说,行是错误的,我仍然得到一个NullPointerException。 –

+0

试一试,让我知道! –