Извините, если мне удалось что-то испортить. Когда вы запускаете код, он должен делать игру жизни Конвея. Первый совет работает как надо, показывая X`s и .`s, но все последующие кадры просто .`sИгра Жизни Жизни Конвея не корректируется должным образом
Я считаю, что этот вопрос будет в nextL
, но я не уверен ...
#include <iostream>
#include <cstdlib>
#include <unistd.h>
int C = 0, R = 0;
void initL(char L[22][22])
{
for(C = 0; C < 22; C++)
L[C][0] = '0';
for(R = 0; R < 22; R++)
L[0][R] = '0';
for(C = 0; C < 22; C++)
L[C][21] = '0';
for(R = 0; R < 22; R++)
L[21][R] = '0';
for(C = 1; C < 21; C++)
for(R = 1;R < 21; R++)
L[C][R] = '.';
for(C = 1; C < 21; C++)
for(R = 1; R < 21; R++)
L[C][R] = (rand() % 2) ? '.': 'x';
}
void printL(char L[22][22])
{
int C, R;
for(C = 1; C < 21; C++)
{
std::cout << "\n";
for(R = 1; R < 21; R++)
std::cout << " " << L[C][R];
}
std::cout << "\n\n";
}
void nextL(char L[22][22])
{
for(C = 1; C < 21; C++)
{
for(R = 1; R < 21; R++)
{
int LiveCnt = 0;
if(L[C - 1][R-1] == 'X')
LiveCnt++;
if(L[C - 1][R] == 'X')
LiveCnt++;
if(L[C - 1][R + 1] == 'X')
LiveCnt++;
if(L[C][R - 1] == 'X')
LiveCnt++;
if (L[C][R + 1] == 'X')
LiveCnt++;
if (L[C + 1][R - 1]=='X')
LiveCnt++;
if(L[C + 1][R + 1] == 'X')
LiveCnt++;
if(L[C + 1][R] == 'X')
LiveCnt++;
L[C][R] = '.';
if(L[C][R] == 'X' && LiveCnt < 2) //rule 1
L[C][R] = '.';
else if(L[C][R] == 'X' && (LiveCnt == 2 || LiveCnt == 3)) //rule 2
L[C][R] = 'X';
else if(L[C][R] == 'X' && LiveCnt > 3) //rule 3
L[C][R] = '.';
else if(L[C][R] == '.' && LiveCnt == 3) //rule 4
L[R][C]='.';
}
}
}
int main()
{
char L[22][22];
int T;
initL(L);
for (T = 0; T < 4; T++)
{
printL(L);
nextL(L);
}
}
Вы знаете, с верхней части головы, почему доски будет выводить только квадратные символы? – Tatoes
Если ваши значения символов выше буквенно-цифровых символов, они могут создавать квадраты, потому что ваша консоль не знает, как выводить символ. – Stephen
@Tatoes Ваш код только когда-либо устанавливает 'L [C] [R]' to ''.''. Следуйте его логике. Он сначала установлен в '. .'', тогда есть куча' if's. Единственный, который может срабатывать, если это '' .'' (который будет с тех пор, как вы просто установите его) устанавливает его в '' .''! –