Download presentation
Presentation is loading. Please wait.
Published byGeraldine Bond Modified over 9 years ago
1
1 Data Structures CSCI 132, Spring 2014 Lecture 4 Implementing Life
2
2 Rules of Life The neighbors of a given cell are the eight cells that touch it. Every cell is either living or dead. A living cell stays alive in the next generation if it has either 2 or 3 living neighbors; otherwise it dies (of loneliness or overcrowding) A dead cell becomes alive in the next generation if it has exactly 3 neighboring cells that are already alive. All births and deaths take place at exactly the same time for each generation.
3
3 Specifications What do we want the program to do?
4
4 Specifications We want the program to: List instructions Allow user to initialize grid Print out grid at each generation Update next generation Repeat until user says stop
5
5 Design Class (noun) The Life game itself Methods or functions (What methods or functions should we have?) Print instructions Initialize Print Update
6
6 The Client Code #include "utility.h" #include "life.h" int main( ) { Life configuration; instructions( ); configuration.initialize( ); configuration.print( ); cout << " Continue viewing new generations? "<<endl; while (user_says_yes( )) { configuration.update( ); configuration.print( ); cout << " Continue viewing new generations? "<<endl; } }
7
7 Testing with Stubs void instructions( ) { } bool user_says_yes( ) { return(true); } class Life { // In file life.h public: void initialize( ); void print( ); void update( ); }; void Life ::initialize( ) { } // In file life.cc void Life ::print( ) { } void Life ::update( ) { }
8
8 Class Specification const int maxrow = 20, maxcol = 60;// grid dimensions class Life { public: void initialize( ); void print( ); void update( ); private: int grid[maxrow +2][maxcol +2]; // allows for two extra rows and columns int neighbor_count(int row, int col); };
9
9 Class implementation int Life ::neighbor_count(int row, int col) { int i, j; int count = 0; //we will fill this in return count; }
10
10 Class implementation int Life ::neighbor_count(int row, int col) { int i, j; int count = 0; for (i = row - 1; i <= row +1; i ++) { for (j = col - 1; j <= col +1; j ++) { count += grid[i][j];//Increase the count if neighbor is alive. } count -=grid[row][col];// Reduce count, since cell is not its own neighbor. return count; }
11
11 Using a Driver int main ( ) // driver for neighbor_count( ) { Life configuration; configuration.initialize( ); //we will fill this in. }
12
12 Using a Driver int main ( ) // driver for neighbor_count( ) { Life configuration; configuration.initialize( ); for (row = 1; row <= maxrow; row ++){ for (col = 1; col <= maxrow; col ++) { cout << configuration.neighbor_count(row, col) << " " ; } cout << endl; }
13
int Life ::update( ) { int row, col; int new_grid[maxrow+2][maxcol+2]; //we will fill this in for (row = 1; row <= maxrow; row++) { for (col = 1; col <= maxcol; col++) { grid[row][col] = new_grid[row][col]; } //end inner for loop } //end outer for loop } //end update()
14
int Life ::update( ) { int row, col; int new_grid[maxrow+2][maxcol+2]; for (row = 1; row <= maxrow; row ++) { for (col = 1; col <= maxcol; col ++) { switch (neighbor_count(row, col)) { case 2: new_grid[row][col] = grid[row][col]; break; case 3: new_grid[row][col] = 1; break; default: new_grid[row][col] = 0; } //end switch } //end inner for loop } //end outer for loop for (row = 1; row <= maxrow; row++) { for (col = 1; col <= maxcol; col++) { grid[row][col] = new_grid[row][col]; } //end inner for loop } //end outer for loop } //end update()
15
int Life ::initialize( ) { int row, col; for (row = 0; row <= maxrow+1; row++) { for (col = 0; col <= maxcol+1; col++) { grid[row][col] = 0; } //end inner for loop } //end outer for loop cout << "List the coordinates for the living cells." << endl; cout << "Terminate the list with the pair -1 -1 " << endl; cin >> row >> col; // we will fill this in } //end initialize()
16
int Life ::initialize( ) { int row, col; for (row = 0; row <= maxrow+1; row++) { for (col = 0; col <= maxcol+1; col++) { grid[row][col] = 0; } //end inner for loop } //end outer for loop cout << "List the coordinates for the living cells." << endl; cout << "Terminate the list with the pair -1 -1 " << endl; cin >> row >> col; while (row != -1 || col != -1) { if (row >= 1 && row <= maxrow) { if ( col >= 1 && col <= maxcol ) { grid[row][col] = 1; } else { cout << "Column " << col << " is out of range." << endl; } // end inner if-else } else { cout << "Row " << row << " is out of range." << endl; } //end outer if - else cin >> row >> col; } //end while loop } //end initialize()
17
17 Order of Development 1. initialize( ) 2. print( ) 3. neighbor_count ( ) 4. update( )
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.