Game of Life Border — проверка живых клеток

Я делаю Conway’s Game of Life для класса C ++, который я посещаю, и я не могу заставить его оставаться в пределах досягаемости на границах. Мы используем древний класс, поэтому его объяснение ниже.

<lvp\matrix.h> — Позволяет масштабировать 2-мерные массивы

Использование —

декларация — matrix<itemType> itemName(numRows, numColumns, fillValue)

переход к функциям — (itemName)

параметр в функциях — либо (const matrix<itemType> &name) или что без 'const' спереди.

Итак, вот картина проблемы (вектор — это класс, на котором основана матрица, он создает массивы и имеет методы, которые очень легко масштабируют).

http://imageshack.com/a/img835/2531/03gx.png

Просто помните, что я начинающий программист, поэтому, пожалуйста, будьте осторожны с вашей критикой 🙂

И заранее спасибо.

Итак, вот код на данный момент:

#include <lvp\matrix.h>
#include <iostream.h>

//--------------------------------------------------------------

void displayBoard(const matrix<char> &board)
{
cout << "   1  2  3  4  5  6  7" << endl;
for( int row=0; row<board.numrows(); row++)
{
cout << row+1 << " ";
for( int col = 0; col < board.numcols(); col++)
cout<<"["<<board[row][col]<<"]";
cout<<endl;
}
}

//--------------------------------------------------------------

void placeLiveCells(matrix<char> &board, matrix<char> &check)
{
//Test function
board[3][3]='X';
board[3][4]='X';
board[3][2]='X';
check[3][3]='X';
check[3][4]='X';
check[3][2]='X';
}

//--------------------------------------------------------------//--------------------------------------------------------------

void checkNeighbors(matrix<char> &board, int row, int col)
{
int count=0;
for(int i=0; i<2; i++)
{
if(board[row][col+1]=='X')
count++;
if(board[row][col-1]=='X')
count++;
if(board[row+1][col+1]=='X')
count++;
if(board[row-1][col-1]=='X')
count++;
if(board[row+1][col-1]=='X')
count++;
if(board[row-1][col+1]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row-1][col]=='X')
count++;
if(count<2)
board[row][col]='O';
if(count>3)
board[row][col]='O';
}
}

//--------------------------------------------------------------

void findX(matrix<char> &board)
{
int numspots=board.numrows()*board.numcols(), r=0, c;
for(int j=0; j<numspots; j++)
{
if(board[r][c]=='X')
checkNeighbors(board, r, c);  /*This is where I think the
problem is, the code was working ok before I added this function*/
if(c==6)
{
c=0;
r++;
}
}
}

//--------------------------------------------------------------

int main()
{
int row=0, col=0;
matrix<char> check(7, 7, 'O');
matrix<char> board(7, 7, 'O');
displayBoard(board);
placeLiveCells(board, check);
displayBoard(board);
findX(board);
checkNeighbors(board, row, col);

return(0);
}

Моя следующая попытка checkNeighbors включает проверку на наличие ошибок за пределами <0, который все еще не работает:

void checkNeighbors(matrix<char> &board, int row, int col)
{
int count=0;
for(int i=0; i<2; i++)
{
if((row-1>=0) && (col-1>=0))
{
if(board[row][col+1]=='X')
count++;
if(board[row][col-1]=='X')
count++;
if(board[row+1][col+1]=='X')
count++;
if(board[row-1][col-1]=='X')
count++;
if(board[row+1][col-1]=='X')
count++;
if(board[row-1][col+1]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row-1][col]=='X')
count++;
if(count<2)
board[row][col]='O';
if(count>3)
board[row][col]='O';
}
else if((row-1<0) && (col-1>=0))
{
if(board[row][col+1]=='X')
count++;
if(board[row][col-1]=='X')
count++;
if(board[row+1][col+1]=='X')
count++;
if(board[row][col-1]=='X')
count++;
if(board[row+1][col-1]=='X')
count++;
if(board[row][col+1]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row][col]=='X')
count++;
if(count<2)
board[row][col]='O';
if(count>3)
board[row][col]='O';
}
else if((row-1>=0) && (col-1<0))
{
if(board[row][col+1]=='X')
count++;
if(board[row][col]=='X')
count++;
if(board[row+1][col+1]=='X')
count++;
if(board[row-1][col]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row-1][col+1]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row-1][col]=='X')
count++;
if(count<2)
board[row][col]='O';
if(count>3)
board[row][col]='O';
}
else if((row-1<0) && (col-1<0))
{
if(board[row][col+1]=='X')
count++;
if(board[row][col]=='X')
count++;
if(board[row+1][col+1]=='X')
count++;
if(board[row][col]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row][col+1]=='X')
count++;
if(board[row+1][col]=='X')
count++;
if(board[row][col]=='X')
count++;
if(count<2)
board[row][col]='O';
if(count>3)
board[row][col]='O';
}
}
}

Так что я сделал здесь, я переделал checkNeighbors с одним огромным оператором if вокруг операторов if, которые проверяют другие ячейки. Теперь они делают это так, что если row или же col отрицательны, при проверке соседних ячеек НЕ будет -1 к тому, что будет отрицательным.

0

Решение

Задача ещё не решена.

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