Reputation: 461
In the game that I am making called Flood It I am having trouble printing the objects that I am making which have a constructor that is:
Dot(int x, int y, int color)
I have three classes one class is 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;
}
}
My second class is 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;
}
}
My main class that runs everything is 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);
}
}
Can someone tell me why my array will not update when i call my reset() method?
Upvotes: 1
Views: 129
Reputation: 48297
in the reset method you have a for loop doing:
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]);
}
}
this line,
new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
is doing NOTHING....
You are creating an object, yes, but not assigning it to nothing, so that object is getting lost....
You have to assign that new object to the element in the 2D array...
dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
on the other hand, you need to init the generator object:
public GameModel(int size) {
this.size = size;
generator = new Random();
}
Upvotes: 1
Reputation: 521
You forgot to assign the new DotInfo() objects to every position of the array.
The line:
new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
should be:
dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
Upvotes: 1