Java

SIMULATION PROJECT - GAME OF LIFE

 

 

PROBLEM #1 - SOLUTION HINTS

Please note that you might have a different (and even better) solution.  These hints are simply guides that you may chose to ignore.

 


HINT #1 – CLASSES TO USE

You will need three classes for your solution.

  • ColourGrid
  • Tester
  • NOOPDraw

 

HINT #2 – CLASS SETUP


Most of the work is in ColourGrid. It probably should contain the following pieces:

 

Datafields:

  • rows  -  Number of rows in the array
  • cols  -  Number of columns in the array
  • grid  -  The actual array itself

 

Constructor:

  • Simply gets an argument for each datafield.
  • It creates the array and calls the randomizeColours() method to give random colours to each element in the array.

 

Methods:

  • randomizeColours() – Simply loops through the array using nested for loops and creates a random Color object for each element.  This method is called from inside the constructor.  (Initially the code inside this method could be placed in the constructor but once we want to do animation, we need a way to call this directly.)
  • drawGrid() – Loops through the array using nested for loops, sets the drawing colour to the current element’s color and then draws the rectangle at the correct location.


HINT #3 – DRAWING SQUARES AT RIGHT LOCATION

The array holds the colours of each square.  To draw the squares, we need to find a pattern between the element[r][c] and the corresponding square’s x, y, width and height (which we need to draw a square).


For my solution, I used a width and height of 20. 

 

Here is a table considering the first row of squares.  A pattern is easy to find for the value of x.

Array indexes

Corresponding square’s information

r

c

x

y

width

Height

0

0

0

0

20

20

0

1

20

0

20

20

0

2

40

0

20

20

0

3

60

0

20

20

0

c

c*20

0

20

20

 

Here is a table considering the first column of squares.  Again, a pattern is easy to find for y.

 

Array indexes

Corresponding square’s information

r

c

x

y

width

Height

0

0

0

0

20

20

1

0

0

20

20

20

2

0

0

40

20

20

3

0

0

60

20

20

r

0

0

r*20

20

20

 

Now we can also consider a few different squares that we randomly picked to find an overall pattern.

 

Array indexes

Corresponding square’s information

r

c

x

y

width

Height

2

3

60

40

20

20

7

4

80

140

20

20

4

1

20

80

20

20

0

6

120

0

20

20

r

c

c*20

r*20

20

20

 

So, the statement

 

          NOOPDraw.fillRectangle(c*20, r*20, 20, 20);

 

will draw element[r][c] of the array at its proper location.

 

HINT #4 - ANIMATION

 

The animation aspect is handled in the main function of the Tester class.  Here is the pseudo-code for the animation.

 

          Create NOOPDraw window.

          Create ColourGrid object cg.

          Display cg

 

          Loop
                    Wait one second

                    Update cg with new colours

                    Redisplay cg
          End loop

 

HINT #5 – WAITING

 

We can make the program wait 1 second by using:

 

          Thread.sleep(1000);

 

It will require that the function using the statement above throws an exception.