Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

[C#] Проблема с игрой "Жизнь"

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> [C#] Проблема с игрой "Жизнь"
Имя
Сообщение << Старые топики   Новые топики >>
[C#] Проблема с игрой "Жизнь" - 2010-06-26 23:55:30.270000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
В общем занялся я написанием игры "Жизнь", но где-то в алгоритме допустил ошибку, а вот где именно сам не могу найти, поэтому прошу вашей помощи. Вот Код обхода матрицы:
for (int i = 0; i &lt; 800 / 5; i++) for (int j = 0; j &lt; 800 / 5; j++) { int neighbors = getNeighborsCount(i, j); if (neighbors == 3 && !isAliveAt(i, j)) map[i, j] = true; else if (neighbors == 3 || neighbors == 2 && isAliveAt(i, j)) map[i, j] = map[i, j]; else if (neighbors &lt; 2 || neighbors &gt; 3 && isAliveAt(i, j)) map[i, j] = false; } Код ф-ции "getNeighborsCount":
int getNeighborsCount(int x, int y) { int count = 0; if (isAliveAt(x - 1, y - 1)) count++; if (isAliveAt(x + 1, y + 1)) count++; if (isAliveAt(x - 1, y + 1)) count++; if (isAliveAt(x + 1, y - 1)) count++; if (isAliveAt(x, y + 1)) count++; if (isAliveAt(x, y - 1)) count++; if (isAliveAt(x + 1, y)) count++; if (isAliveAt(x - 1, y)) count++; return count; } Код ф-ции "isAliveAt":
bool isAliveAt(int x, int y) { return (x &gt; 0 && x &lt; 800 / 5 && y &gt; 0 && y &lt; 800 / 5) && map[x, y]; } Ф-ция "getNeighborsCount" возвращает количество живых "соседей" у клетки (х, у). Ф-ция "isAliveAt" проверяет жива ли клетка (х, у).
Проблема вот в чём: если нарисовать планер , то он после следующего обхода матрицы превращается в неподвижную фигуру. А если нарисовать фигуру где приблизительно 100-150 живых точек, то со временем живые точки "захватят" весь экран.
Post #: 1
RE: [C#] Проблема с игрой "Жизнь" - 2010-06-27 10:49:11.980000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
У тебя должно быть 2 буфера для хранения точек. Иначе ты устанавливаешь значение одной, а при вычислении следующей - учитываешь уже новое состояние предыдущей.
Post #: 2
RE: [C#] Проблема с игрой "Жизнь" - 2010-06-27 14:01:56.900000   
sbk

Сообщений: 144
Оценки: 0
Присоединился: 2008-12-20 19:01:57.273333
Спасибо _SaZ_, с двумя буферами всё отлично работает.
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> [C#] Проблема с игрой "Жизнь"







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.