Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
2 / 2 / 2
Регистрация: 16.10.2011
Сообщений: 179
1

Некорректная работа игры 'Жизнь'

21.12.2012, 10:21. Показов 554. Ответов 3
Метки нет (Все метки)

Доброго времени суток, накидал за пару часов программу - игру Жизнь http://ru.wikipedia.org/wiki/Жизнь_(игра), но алгоритм, видимо, неправильный

Здесь выкладываю кусок кода, который отвечает за перемещение нарисованных областей:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 void cell::stepcells(void)  //перемещение закрашенных областей, симулирующих живык клетки
 {
 clearcells();  //очищаем область, рисуем "сеточку"
 
 for (int i = 0; i < 30; i++)
 {
     for (int j = 0; j < 30; j++)
     {
     if (((countN(i,j))==2) || ((countN(i,j))==3))  //countN(i,j) - функция, рассчитывающая кол-во живых клеток вокруг кетки i j
 
     tempcell[i][j]=true;   //если кол-во живых кл - 2 или 3 - рисуем живую клетку, иначе очищаем область
     else tempcell[i][j]=false;
     }
     }
 
 
       Form3->Canvas->Brush->Color=clGreen;
 
    for (int i = 0; i < 30; i++)
    {
     for (int j = 0; j < 30; j++)
     {
      cell[i][j]=tempcell[i][j];  //массиву клеток присваиваем значения, живых клеток
      if (cell[i][j])
      {
 
       Form3->Canvas->FillRect(Rect(i*20,j*20,i*20+20,j*20+20));  //заливаем область
      }
     }
      }
     Application->ProcessMessages();
 
 
 
 }
 
 int cell::countN(int x, int y)
 {
   int temp=0;
 
   for (int i = -1; i < 2; i++)
   {
        for (int j = -1; j < 2; j++)
        {
        if ((i!=0) && (j!=0)) {
       
            if ((cell[x+i][y+j]) && ((x+i)>-1) && ((y+j)>-1)&& ((x+i)<31) && ((y+j)<31))
            {
             temp++;  //если есть клетка "живая" вокруг исследуемой области - увеличиваем переменную
            }
            }
        }
   }
   return temp;  //возвращаем значение переменной
 }
Проблема в том, что область раполняется явно неравномерно, в чём может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2012, 10:21
Ответы с готовыми решениями:

Корректировка алгоритма игры "Жизнь"
Здравствуйте. У меня некорректно работает игра &quot;жизнь&quot;. Работает всё по какому-то адскому...

Некорректная работа таймера
void __fastcall TForm1::Timer1vremTimer(TObject *Sender) { if (Timer2pusk-&gt;Enabled) { int t2;...

keybd_event некорректная работа
Есть строка &quot;abcdefghijklmno&quot;. Я пытаюсь эмулировать её нажатие вызывая в цикле: AnsiString...

Некорректная работа отладчика
Здравствуйте ! Была замечена некорректная работа отладчика RAD Studio 10.2.3 при разработке...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
3
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
21.12.2012, 12:02 2
Цитата Сообщение от mappy89 Посмотреть сообщение
область раполняется явно неравномерно
поясни...
0
2 / 2 / 2
Регистрация: 16.10.2011
Сообщений: 179
21.12.2012, 12:06  [ТС] 3
*заполняется

через секунд 20 после запуска программы (период обновления 200 мс) почти половина обасти оказывается заполненной
0
4030 / 2320 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
21.12.2012, 12:07 4
Цитата Сообщение от mappy89 Посмотреть сообщение
C++
1
2
if (((countN(i,j))==2) || ((countN(i,j))==3)) *//countN(i,j) - функция, рассчитывающая кол-во живых клеток вокруг кетки i j
tempcell[i][j]=true; * //если кол-во живых кл - 2 или 3 - рисуем живую клетку, иначе очищаем область
Для живых и мертвых клеток правила разные, а у тебя одни и те же. Если вокруг мертвой клетки 2 живых, клетка должна оставаться мертвой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2012, 12:07

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Некорректная работа ZipForge?
Люди добрые, помогите кто чем может! Программа задумывалась таким образом: 1)Указываем...

Некорректная работа кода
Что тут не так что то не пашетvoid __fastcall TForm4::CheckBox1Click(TObject *Sender) { { ...

Некорректная работа функции Sleep в цикле while
При вызове из цикла do - while, sleep срабатывает только один раз. А как сделать, чтобы между...

Некорректная работа кнопки в текстовом редакторе
Есть код простого текстового редактора. Но в нем не работает кнопка изменения шрифта. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.