aspose file tools*
The moose likes Java in General and the fly likes Could you please help me? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "Could you please help me?" Watch "Could you please help me?" New topic
Author

Could you please help me?

Paul Chung
Greenhorn

Joined: Feb 10, 2005
Posts: 4
Hello, I have been trying to fix this assignment for nearly 2 weeks now, and I am still stumped, so I was wondering if someone here might point out a few things for me. My assignment is to create a game in which organisms grow or die according to a set pattern, notably that if any organism is next to less than 2 or more than 3 organisms it will die, but if there is a spot adjacent to 3 organisms, the organism will live. However I got this to work perfectly fine in the console, but when I tried to make it into a JPanel program, I get strange results. Sometimes the program works fine, other times the program behaves erratically, like it will do the grow/die methods for only part of the cluster of organisms or it will lag (skipping a few iterations). Also the console tells me I have a null pointer exception. I am really confused about this and if you could so kindly help me I would really appreciate it, thanks!

Here is the source code:

*Note that the actual starting point of the program is the method "begin(),"
this is where I suspect the bugs are hidden, but I can't seem to understand why.*

Cheers

****************************************************************************

import javax.swing.*;
import java.awt.*;

public class GameFrame extends JFrame

{
public GameFrame()
{
super("Animation");//calls the 1-param constructor JFrame
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();//draw on panels
panel.setLayout(new GridLayout(1,1) );//1 rwo 1 col
Life life = new Life();//executing design

panel.add(life);
life.setBackground(Color.white);
setContentPane(panel);//all GUIs placed on ContentPane
show();//shows the panel BUT also calls paintComponent
life.begin();
}

public static void main(String[] asd)
{
GameFrame obj = new GameFrame();
}
}

//******************************************************************************

class Life extends JPanel
/*
* reading a life world
*
*/
{

final int M = 25;
final int N = 75;
final char DOT = '.';
final char ORGANISM = 'X';

char[][] grid;
char[][] newGrid;

int universalCounter = 0;

boolean flag = false;
boolean flag1 = false;

boolean flag2 = false;


//********************************

public void zero(char[][] array)
{
for(int row = 0; row <= M +1; row++)
{
for(int col = 0; col <= N +1; col++)
{
array[row][col] = DOT;
}
}
}

//********************************

public void print(Graphics g)
{
int x, y = 20;
for(int row = 1; row <= M; row++)
{
x = 5;
for(int col = 1; col <= N; col++)
{
g.drawString("" + grid[row][col], x, y);
//prints string begining at x,y
x = x + 7;
}
y = y + 15;
}
}

//********************************

public void read(String file)
{
FileStringReader f = new FileStringReader(file);
String s;
char ch;
for(int row = 1; row <= M; row++)
{
s = f.readLine();
for(int col = 0; col < N; col++)
{
ch = s.charAt(col);
this.grid[row][col + 1] = ch ;
}
}
}

//********************************

public void scanWorld(char[][] grid)
{
boolean liveOrDie;

for(int row = 1; row < M; row++)
{
for(int col = 1; col < N; col++)
{
char currentBox = grid[row][col];

liveOrDie = liveOrDie(grid, row, col);

}
}
}

//********************************

public boolean liveOrDie(char[][] grid, int row, int col)
{
char blockTest = grid[row][col];
char blockTest1 = grid[row-1][col-1];
char blockTest2 = grid[row-1][col];
char blockTest3 = grid[row-1][col+1];
char blockTest4 = grid[row][col-1];
char blockTest5 = grid[row][col+1];
char blockTest6 = grid[row+1][col-1];
char blockTest7 = grid[row+1][col];
char blockTest8 = grid[row+1][col+1];

int counter = 0;
boolean live;

//if(blockTest == ORGANISM) {
//counter++;
//}
if(blockTest1 == ORGANISM) {
counter++;
}
if(blockTest2 == ORGANISM) {
counter++;
}
if(blockTest3 == ORGANISM) {
counter++;
}
if(blockTest4 == ORGANISM) {
counter++;
}
if(blockTest5 == ORGANISM) {
counter++;
}
if(blockTest6 == ORGANISM) {
counter++;
}
if(blockTest7 == ORGANISM) {
counter++;
}
if(blockTest8 == ORGANISM) {
counter++;
}

if( (counter > 3) || (counter < 2) ) {

this.dies(this.newGrid, row, col);
return live = false;

} else {
if ( (counter == 3) && (blockTest == DOT) ){
this.grow(this.newGrid, row, col);
return live = true;
} else
if ( (counter == 3) && (blockTest == ORGANISM)){
this.preserve(grid, this.newGrid, row, col);
return live = true;
}
this.preserve(grid, this.newGrid, row, col);
return live = true;

}
}

//********************************

public void grow(char[][] newGrid, int row, int col ) {

for(int r = 1; r < M+1; r++){

if(row == r){

for(int c = 1; c < N+1; c++){

if(col == c){
newGrid[r][c] = ORGANISM;
}
}
}
}
}

//********************************

public void dies(char[][] newGrid, int row, int col ) {

for(int r = 1; r < M+1; r++){

if(row == r){

for(int c = 1; c < N+1; c++){

if(col == c){
newGrid[r][c] = DOT;
}
}
}
}
}

//********************************

public void preserve(char[][] grid, char[][] newGrid, int row, int col) {

for(int r = 1; r < M+1; r++) {

if(row == r) {

for(int c = 1; c < N+1; c++){

if(col == c) {

if(grid[r][c] == ORGANISM) {

newGrid[r][c] = grid[r][c];
}
}
}
}
}
}

//********************************

public void copyArray(char[][] firstArray, char[][] secondArray){

for(int row = 0; row < M+1; row++)
{
for(int col = 0; col < N+1; col++)
{
secondArray[row][col] = firstArray[row][col];
}
}
}

//********************************

public boolean isSame(char[][] firstArray, char[][] secondArray){

boolean same = true;

if(!isEmpty(firstArray) )
{

for(int row = 0; row < M+1 && same; row++)
{
for(int col = 0; col < N+1 && same; col++)
{
same = same && (firstArray[row][col] == secondArray[row][col]);
}
}
return same;

} else {
return same = false;
}

}

//********************************

public boolean isEmpty(char[][] array){

boolean empty = true;
for(int row = 1; row <= M; row++)
{
for(int col = 1; col <= N; col++)
{
empty = empty && (array[row][col] == DOT);
}
}
return empty;
}

//********************************

public void oneSec() {

try {
Thread.currentThread().sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}

//********************************

public static void manySec(long s) {
try {
Thread.currentThread().sleep(s * 1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}


//********************************

public void begin ()
{
this.grid = new char[M + 2][N + 2];
this.newGrid = new char[M + 2][N + 2];

this.zero(this.newGrid);
//this.zero(this.grid);
this.read("life2.dat");

this.repaint();
this.oneSec();

do {

this.scanWorld(this.grid);
this.repaint();

this.copyArray(this.newGrid, this.grid);
this.zero(this.newGrid); //grid should have updated world while newGrid returns to default state

this.oneSec();

this.universalCounter++;
} while( !flag1 && !flag2);

}


//********************************

public void paintComponent(Graphics g)
{
flag1 = isSame(this.grid, this.newGrid);
flag2 = isEmpty(this.grid);


if(flag)//skips executing paintComponent on first call
{


super.paintComponent(g);//erases panel Contents
g.setColor(Color.black);

if(!flag1 && !flag2)//not isSame nor isBlank
{

print(g);//prints the world
}
else if( flag1 )
{

print(g);
g.drawString("The worlds are repeating!", 10, 460);
}
else //flag2 is true
{
print(g);
g.drawString("The world is blank!", 10, 460);

}

g.drawString("Iteration " + (universalCounter), 10, 440);


}
else
flag = true;
}

}
Paul Chung
Greenhorn

Joined: Feb 10, 2005
Posts: 4
Btw, here is the class FileStringReader, which you also need for this program

****************************************************************************

import java.io.*;
//enables reading of file
public class FileStringReader
{ FileInputStream in;
BufferedReader reader ;

public FileStringReader( String s)
{ try
{ File f1 = new File( s );
in = new FileInputStream(f1);
InputStreamReader inStream = new InputStreamReader(in);
reader = new BufferedReader(inStream);
}
catch(IOException e)
{ System.out.println(e);
System.exit(1);
}
}

public String readLine()
{ String inputLine ="";
try
{inputLine = reader.readLine();
}
catch(IOException e)
{ System.out.println(e);
System.exit(1);
}
return inputLine;
}

public void close()
{ try
{ reader.close();
}
catch(IOException e)
{ System.out.println(e);
System.exit(1);
}
}
}
Paul Chung
Greenhorn

Joined: Feb 10, 2005
Posts: 4
...And the database file (life2.txt):

******************************************************************************
Starts from here:

...........................................................................
...........................................................................
...........................................................................
...........................................................................
...........................................................................
...........................................................................
..................XXX......................................................
...............XXX...XXX.........................XXXXX.....................
.............XXXX.....XXXX...................XXXXX...XXXXX.................
...............XXX...XXX.........................XXXXX.....................
..................XXX......................................................
...........................................................................
...........................................................................
...........................................................................
...........................................................................
..................XXX......................................................
...............XXX...XXX.........................XXXXX.....................
.............XXXX.....XXXX...................XXXXX...XXXXX.................
...............XXX...XXX.........................XXXXX.....................
..................XXX......................................................
...........................................................................
...........................................................................
...........................................................................
...........................................................................
...........................................................................
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Could you please help me?