Поражены заданием, основанным на игре жизни Конвея

Мне выдаются файлы gameOfLife.cpp, life.cpp и life.h. Мне разрешено редактировать только life.cpp, чтобы программа работала. Я не знаю, где с редактированием life.cpp, потому что там так много всего, что мне незнакомо. Мне дали файл checkoutLife.cpp, чтобы проверить мою работу.

Я провел последние два дня, просматривая файлы Game of Life других людей, пытаясь понять, как поступить, но я в растерянности. Я не хочу, чтобы кто-то делал мою работу за меня, но мне нужно какое-то направление.

gameOfLife.cpp

#include <iostream>
#include "life.cpp"#include "life.h"
const int GENERATIONS=100;

using namespace std;

//make a random array of initial living cells
void gen(bool a[ROWS][COLS]){
for(int i=0;i<ROWS;++i){
for(int j=0;j<COLS;++j){
if(rand()%100<10)a[i][j]=true;
else a[i][j]=false;
}
}
a[5][5]=true;
a[5][6]=true;
a[5][7]=true;
return;
}

// check to see if two arrays are equal
bool equal(const bool a[ROWS][COLS], const bool b[ROWS][COLS]){
int i,j;
for(i=0;i<ROWS;++i)for(j=0;j<COLS;++j)if(a[i][j]!=b[i][j])return false;
return true;
}

//copy the b array into the a array
void copy(bool a[ROWS][COLS], const bool b[ROWS][COLS]){
for(int i=0;i<ROWS;++i){
for(int j=0;j<COLS;++j){
a[i][j]=b[i][j];
}
}
return;
}

//print out the array
void print(const bool a[ROWS][COLS]){
for(int i=0;i<ROWS;++i){
for(int j=0;j<COLS;++j){
if(a[i][j])cout << 'X';
else       cout << ' ';
}
cout << endl;
}
return;
}int main(){
bool current[ROWS][COLS];
bool next[ROWS][COLS];
int i=0;

//initialze the cell array and print it out
gen(current);
print(current);

while(i<GENERATIONS){
//get a carriage return before the next generation
cin.get();

//give the current generation to life()
//it puts the next generation into next
life(current,next);

//copy the next generation into the current
copy(current,next);

//print it out
print(current);
i++;
}

return 0;
}

life.cpp

/*1. You need to write a file life.cpp that implements the function prototyped in life.h.  You can and should write other functions
and tuck them into the same file; whatever you need to get your function working in an elegant manner.

2. Compile your file with checkoutLife.cpp and run the resulting executable to see if it passes all the tests.

3. Compile yourfile with gameOfLife.cpp and run the resulting executable to see if it makes pretty pictures.

4. If you are convinced steps 2 and 3 are working, submit your life.cpp via canvas.
*/

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

void life(const bool current[ROWS][COLS], bool next[ROWS][COLS]){

}

life.h

#ifndef LIFE_H
#define LIFE_H
const int ROWS=25;
const int COLS=25;

// Simulate one generation of Conways Game of Life
//
// Given:
//        a constant 2D bool array called "current" where each true element
//        indicates a live cell and each false element indicates a dead cell.
//
//        an empty  2D bool array called "next"
void life(const bool current[ROWS][COLS], bool next[ROWS][COLS]);
#endif

-3

Решение

life () вызывается с двумя параметрами: массивом текущего состояния вашей доски (которое, вероятно, вы не будете касаться) и массивом следующего состояния платы (которое вы будете заполнять).

Вот алгоритм, который вы можете использовать:

  • Для каждой строки в строке:
    • Для каждого col в COL:
      • Сложите всех окружающих соседей в текущем [] [], сохраните в «соседях»
      • Если текущий [row] [col] жив и соседи < 2, следующий [row] [col] = dead
      • Иначе, если текущий [row] [col] жив и соседи == 2 или 3, следующий [row] [col] = жив
      • Иначе, если current [row] [col] жив и соседи> 4, next [row] [col] = dead
      • Иначе, если текущий [row] [col] мертв и соседи == 3, следующий [row] [col] = жив

Вы можете немного очистить логику, но я распечатал ее так же, как и правила в Википедии. Сложная часть (IMO) — «Сложи всех соседей» — здесь много проверок границ. Для ясности я предлагаю назвать другой метод, который вы пишете.

1

Другие решения