voidgameOfLife(Grid<int>& board){ Grid<int> temp = board; int width = board.width(); int height = board.height(); for (int i = 0; i < height; i++){ for (int j = 0; j < width; j++){ int count = -1; //besides the cell itself
for (int ni = -1; ni < 2; ni++){ for (int nj = -1; nj < 2; nj++){ int x = i + ni; int y = j + nj;
if (x >= 0 && y >= 0 && x < height && y < width && board[x][y] == 1) count++; } }
while (age <= kMaxAge){ display.setDimensions(board.numRows(), board.numCols());
for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){ int count = 0;
for (int ni = -1; ni < 2; ni++){ for (int nj = -1; nj < 2; nj++){ int x = i + ni; int y = j + nj; if (x < 0 || x >= board.numRows() || y < 0 || y >= board.numCols()) continue; count += board[x][y];
} } printf("%d, %d has %d neibours\n", i, j, count); if (board[i][j] == 1) display.drawCellAt(i, j, age);
/** * 先实现3x3网格 * TODO 初始化Grid * TODO 单回合cell变化 * TODO cell 年龄变化 * TODO 输出结果并循环 * TODO 显示图形 * TODO 退出 */
/** * 初始化Grid * TODO 读取配置文件 * TODO 随机生成 * * random */ Grid<int> initRandomBoard(){ /* srand(time(0)); int rowRandom = rand() % 100; int colRandom = rand() % 100; Grid<int> board(rowRandom, colRandom);
int height = rowRandom; int width = colRandom;
for (int i = 0; i < height; i++){ for (int j = 0; j < width; j++){ board[i][j] = rand() % 2;
} } */
int height = randomInteger(3, 100); int width = randomInteger(3, 100); Grid<int> board(height, width);
for (int i = 0; i < height; i++){ for (int j = 0; j < width; j++){ board[i][j] = randomInteger(0, 1); } }
return board; }
//读取地图文件 Grid<int> initfBoard(){
ifstream input; input.open("../res/files/Fish"); if (!input){ printf("打开文件失败,使用随机地图!\n"); returninitRandomBoard(); }
int height; int width;
input >> height; input >> width;
Grid<int> board(height, width); string cell;
int i = 0;int j = 0; while (input >> cell){ if (cell == "-"){ board[i][j] = 0; } elseif (cell == "X"){ board[i][j] = 1; } }
input.close(); return board; }
//return age integer intdisplayAge(int i, int j, Grid<int> &ageboard){
return ageboard[i][j]; }
//稳定性检验-放在每次循环board更新之前 boolstableCheck(Grid<int> &board){ int cellLeft = 0; for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){
/** * cell 0/1逻辑 */ voidreboard(Grid<int> &board, Grid<int> &ageBoard){ Grid<int> temp = board; for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){ int count = 0;
for (int ni = -1; ni < 2; ni++){ for (int nj = -1; nj < 2; nj++){ int x = i + ni; int y = j + nj; if (x < 0 || x >= board.numRows() || y < 0 || y >= board.numCols()) continue; count += board[x][y];
ageBoard[i][j]++;
} } //printf("%d, %d has %d neibours\n", i, j, count);
/** * Function: main * -------------- * Provides the entry point of the entire program. */ intmain(){ LifeDisplay display; display.setTitle("Game of Life"); welcome();
//Where game map from Grid<int> board = initRandomBoard(); //Grid<int> board = initfBoard(); Grid<int> ageboard = initAgeboard(board);
display.setDimensions(board.numRows(), board.numCols()); int age = 0;
while (true){
for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){ age = displayAge(i, j, ageboard); display.drawCellAt(i, j, age); display.repaint(); } }
stableCheck(board);
reboard(board, ageboard);
//temp func call //display.printBoard();
//_sleep(1000); //getLine("Hit [enter] to continue..... "); }
for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){ if (board[i][j] == 1){ ageBoard[i][j] = 1; } else { ageBoard[i][j] = 0; } } }
return ageBoard; }
intgetAge(int i, int j, Grid<int> &ageBoard){ return ageBoard[i][j]; }
voidnext(Grid<int> &board, Grid<int> &ageBoard){ Grid<int> temp = board; Grid<int> tempAge = ageBoard; for (int i = 0; i < board.numRows(); i++){ for (int j = 0; j < board.numCols(); j++){ int count = 0;
for (int ni = -1; ni < 2; ni++){ for (int nj = -1; nj < 2; nj++){ int x = i + ni; int y = j + nj; if (x < 0 || x >= board.numRows() || y < 0 || y >= board.numCols()) continue; count += board[x][y];
/** * Function: main * -------------- * Provides the entry point of the entire program. */ intmain(){ LifeDisplay display; display.setTitle("Game of Life"); welcome();
Grid<int> board = initRandomBoard(); int height = board.numRows(); int width = board.numCols();
Grid<int> ageboard = initAgeBoard(board);
while (stableCheck(board)){ display.setDimensions(height, width);
for (int i = 0; i < height; i++){ for (int j = 0; j < width; j++){ if (board[i][j] == 1){ int age = getAge(i, j, ageboard);