Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ реализация игры жизнь.

Автор: Aljona 16.04.2006 0:01

Существует простая и интересная игра Жизнь. Помогите написать простую реализацию с использованием двух массивов, всю ночь сидела, ничего не вышло.
Напомним правила игры "Жизнь". На клетчатом листе стоит несколько фишек. Их расположение во всех клетках одновременно меняется следующим образом. Если в клетках, соседних с данной (по стороне или углу), стоит ровно 3 фишки, то в данную клетку ставится фишка (если ее не было). Если в соседних клетках более 3 или менее 2 фишек, то фишка снимается (если она была). Если в соседних клетках ровно 2 фишки, то состояние клетки не меняется.

Автор: Altair 16.04.2006 0:42

http://pascal.dax.ru/?sources&cat=8 есть http://pascal.dax.ru/files/pascal/sources/games/life.zip

Автор: Aljona 16.04.2006 0:54

а вы не могли бы в скобках объяснения процедур написать, а то многие неясны, а с пояснениями было бы проще разобраться, заранее благодарю вас.

Автор: lapp 16.04.2006 15:55

Цитата(Aljona @ 15.04.2006 20:01) *

Помогите написать простую реализацию с использованием двух массивов, всю ночь сидела, ничего не вышло.

Aljona, я с удовольствием помогу тебе - очень люблю Жизнь (во всех смыслах smile.gif ).
Ты покажи тут результат(ы) своих ночных бдений, и мы найдем ошибки или подумаем, как двигаться вперед.

Автор: Rush_ 7.12.2006 22:46

вот что у меня получилось Прикрепленный файл  RUSH_LIFE.PAS ( 3.97 килобайт ) Кол-во скачиваний: 995


вот нашел еще один вариант реализации, кто нибудь может мне объяснить как она работает, какие процедуры что выполняют, очень надо, плиз Прикрепленный файл  TVLIFE.PAS ( 10.93 килобайт ) Кол-во скачиваний: 877

Автор: Clerick 8.03.2007 15:22

Снова таже самая жизнь.
Помогите разобраться с небольшим кусокм проги, не хочет правильно обработать.


function sosedi (m,n:byte):byte;
var im,ip,jm,jp:byte;
begin
im:=m-1;
ip:=m+1;
jm:=n-1;
jp:=n+1;
if im=0 then im:=m;
if ip=m then ip:=0;
if jm=0 then jm:=n;
if jp=n then jp:=0;
sosedi:=a[m,jm]+a[m,jp]+a[ip,n]+a[ip,jm]+a[ip,jp]+a[im,jp]+a[im,jm]+a[im,n];
end;


При подсчете соседей для крайних справа и снизу клеток он выводит числа превышающие 8.. Например, 218.. В чем ошибка?

Автор: volvo 8.03.2007 16:19

Цитата
В чем ошибка?
Range-Check отключен? Вот результат... Был выход за пределы матрицы, и не пойман...

У тебя матрица A описана как [1 .. size, 1 .. size] или [0 .. size-1, 0 .. size-1]? Я к тому, почему ты в одном случае от нуля избавляешься:
  if im=0 then im:=m; { <--- Здесь, например }

а в другом - приравниваешь к нулю:
  if ip=m then ip:=0; { <--- Вот тут }

?

Лучше бы вот так делать (для случая, если матрица индексирована от ЕДИНИЦЫ):
  im:=m-1;
if im=0 then im:=m;
ip:=m+1;
if ip>size then ip:=1; { <--- size - размер матрицы }
jm:=n-1;
if jm=0 then jm:=size; { <--- size - размер матрицы }
jp:=n+1;
if jp>size then jp:=1;

Автор: Clerick 8.03.2007 17:45

Все, я разобрался! Матрица была от единицы. Теперь все нормально работает. Спасибо! smile.gif


Добавлено через 5 мин.
Еще вопрос! А как реализовать эту игру графически? Совсем не знаю как работает графика в Паскале. sad.gif

Автор: is propecia from budgetmedica re 6.11.2021 7:35

Cialis Informacion En Espanol