Игра "жизнь" - найти и исправить ошибки в коде - C (СИ)
Формулировка задачи:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <WinCon.h>
#include <conio.h>
#include <time.h>
#define SIZE 20
int a[SIZE][SIZE],b[SIZE][SIZE];
int chk(int x, int y)
{
int i=0;
if (a[(x+SIZE-1)%SIZE][y]==1) i++;
if (a[(x+SIZE-1)%SIZE][(y+SIZE-1)%SIZE]==1) i++;
if (a[(x+SIZE-1)%SIZE][(y+1)%SIZE]==1) i++;
if (a[x][(y+SIZE-1)%SIZE]==1) i++;
if (a[x][(y+1)%SIZE]==1) i++;
if (a[(x+1)%SIZE][(y+SIZE-1)%SIZE]==1) i++;
if (a[(x+1)%SIZE][y]==1) i++;
if (a[(x+1)%SIZE][(y+1)%SIZE]==1) i++;
return i;
}
void gotoxy(short x,short y)
{
COORD Coor;
Coor.X=x; Coor.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE) ,Coor);
}
int main()
{
int i,j,t,seed;
printf("Enter seed (0 for random seed):");
scanf("%d",&seed);
if (seed==0) srand(time(NULL));
else srand(seed);
system("cls");
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
{
a[i][j]=rand()%2;
gotoxy(i,j);
if(a[i][j]==1) printf("#");
else printf(" ");
}
while (!kbhit())
{
Sleep(150);
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
{
if (t=chk(i,j)==3) b[i][j]=1;
else if (t==2) b[i][j]=a[i][j];
else b[i][j]=0;
}
for (i=0; i<SIZE;i++)
for(j=0; j<SIZE; j++)
{
gotoxy(i,j);
printf("%c",b[i][j]==1?'#':' ');
a[i][j]=b[i][j];
}
}
return 0;
}Решение задачи: «Игра "жизнь" - найти и исправить ошибки в коде»
textual
Листинг программы
if (t=chk(i,j)==3) b[i][j]=1; else if (t==2) b[i][j]=a[i][j]; else *b[i][j]=0;
Объяснение кода листинга программы
t=chk(i,j)==3- здесь происходит проверка условияchk(i,j)==3, и если оно истинно, то переменнойtприсваивается значение 3.b[i][j]=1- если условие в первом шаге истинно, то в массивbзаписывается единица.else if (t==2)- если условие в первом шаге не выполнено, и значение переменнойtравно 2, то происходит переход к этому блоку кода.b[i][j]=a[i][j]- если значение переменнойtравно 2, то в массивbзаписываются значения из массиваa.else *b[i][j]=0- если условие в первом шаге не выполнено, и значение переменнойtне равно 2, то в массивbзаписывается ноль.