數據結構學習筆記:C++版生命遊戲

目錄ios

1、在Dev C++裏建立項目TheGameOfLifeapp

一、編寫頭文件life.hide

二、編寫C++程序life.cppoop

三、編寫頭文件utility.h佈局

四、編寫程序文件utility.cppspa

五、編寫主程序文件main.cpp.net

六、運行程序,查看結果3d

2、生命遊戲其它初始佈局code


1、在Dev C++裏建立項目TheGameOfLife

一、編寫頭文件life.h

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);	
};

#define DONE
#include "life.cpp"

二、編寫C++程序life.cpp

 

 

#ifdef DONE
void Life::initialize() 
/*Pre: None
  Post: The Life object contains a configuration specified by the user.*/
{
	int row, col;
	for (row = 0; row <= maxrow + 1; row++)
		for (col = 0; col <= maxcol + 1; col++)
			grid[row][col] = 0;
	cout << "List the coordinates for living cells." << endl;
	cout << "Terminate the list with the special 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;
		else
			cout << "Row " << row << " is out of range." << endl;
		cin >> row >> col;			
	}
}

void Life::print() 
/*Pre: The Life object contains a configuration.
  Post: The configuration is written for the user.*/
{
	int row, col;
	cout << "\nThe current Life configuration is:" << endl;
	for (row = 1; row <= maxrow; row++) {
		for (col = 1; col <= maxcol; col++) 
			if (grid[row][col] == 1) cout << '*';
			else cout << ' ';
		cout << endl;
	}
	cout << endl;		
}

void Life::update() 
/*Pre: The Life object contains a configuration
  Post: The Life object contains the next generation of configuration.*/
{
	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]; // Status stays the same.
					break;
				case 3:
					new_grid[row][col] = 1; // Cell is alive.
					break;
				default:
					new_grid[row][col] = 0; // Cell is dead.					
			}
			
	for (row = 1; row <= maxrow; row++)
		for (col = 1; col <= maxcol; col++)
			grid[row][col] = new_grid[row][col];
}

int Life::neighbor_count(int row, int col)
/*Pre: The Life object contains a configuration, and the coordinates row and col
       define a cell inside its hedge.
  Post: The number of living neighbors of the specified cell is returned.*/
{
	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;
}
#endif

三、編寫頭文件utility.h

 

#include <iostream>
#include <istream>
using namespace std;
#include "life.h"

void instructions();
bool user_says_yes();

#define DONE
#include "utility.cpp"

四、編寫程序文件utility.cpp

 

#ifdef DONE
void instructions() 
/*Pre: None.
  Post: Instructions for using the Life program have been printed.*/
{
	cout << "Welcome to Conway's game of Life." << endl;
	cout << "This game uses a grid of size " << maxrow << " by " << maxcol << " in which " << endl;
	cout << "each cell can either be occupied by an organism or not." << endl;
	cout << "The occupied cells change from generation to generation" << endl;
	cout << "according to the number of neighboring cells which are alive." << endl;
}

bool user_says_yes() 
{
	int c;
	bool initial_response = true;
	
	do { // Loop until an appropriate input is received.
		if (initial_response) 
			cout << " (y,n)? " << flush;
		else
			cout << "Respond with either y or n: " << flush;
		do { // Ignore white space.
			c = cin.get();			
		} while (c == '\n' || c == ' ' || c == '\t');
		initial_response = false;		
	} while (c != 'y' && c != 'Y' && c != 'n' && c != 'N');
	return(c == 'y' || c == 'Y');
}
#endif

五、編寫主程序文件main.cpp

 

#include "utility.h"
int main() // Program to play Conway's game of Life
/*Pre: The user supplies an initial configuration of living cells.
  Post: The program prints a sequence of pictures showing the changes in the
        configuration of living cells according to the rules for the game of Life.
  Uses: The class Life and its methods initialize(), print(), and update().
        The functions instructions(); user_says_yes().*/
{
	Life configuration;
	instructions();
	configuration.initialize();		
	cout << "count = " << configuration.neighbor_count(2, 3) << endl;
	configuration.print();		
	cout << "Continue viewing new generations? " << endl;
	while (user_says_yes()) {
		configuration.update();
		configuration.print();
		cout << "Continue viewing new generations? " << endl;
	}

	return 0;
}

六、運行程序,查看結果

 

2、生命遊戲其它初始佈局

本文分享 CSDN - howard2005。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。blog

相關文章
相關標籤/搜索