Помощь - Поиск - Пользователи - Календарь
Полная версия: Life
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
renesko1
У меня вопрос.
Сначало надо проверить умрет ли клетка или надо сначало оживить от нее соседние клетки ?
andriano
Цитата(renesko1 @ 22.04.2008 21:48) *

У меня вопрос.
Сначало надо проверить умрет ли клетка или надо сначало оживить от нее соседние клетки ?

Это одно и то же. Поведение клетки на текущем шаге зависит исключительно от состояния на предыдущем.
При программной реализации обычно используют два поля - каждое для своего шага.
renesko1
Спасибо тогда скоро уже доделаю. smile.gif
renesko1
Как проверить правильность раьоты(я реализовал начальный ввод живых клеток с пом. стрелок)
те комбинации и тд.?

Добавлено через 19 мин.
+ для новой надо 3 или от 3 и больше.
andriano
Ну, во-первых, функционирование клеточного автомата можно проверить полным перебором: для одной клетки и ее полного окружения - 512 возможных комбинаций.
Кроме того, существует целый ряд устойчивых, пульсирующих и перемещающихся комбинаций. Можно восроизвести их.
Надо только почитать материалы об этой игре.
renesko1
Цитата(andriano @ 23.04.2008 23:31) *

Ну, во-первых, функционирование клеточного автомата можно проверить полным перебором: для одной клетки и ее полного окружения - 512 возможных комбинаций.
Кроме того, существует целый ряд устойчивых, пульсирующих и перемещающихся комбинаций. Можно восроизвести их.
Надо только почитать материалы об этой игре.


512 возможных комбинаций.
Колво комбинаций зависит от размера поля ?

Статические фигуры я посмотрел : работают.
Так же при n(size) < 15 во сновном клетки после пару поколений быстро образуют статические фигуры.
andriano
Одна клетка окружена 8-ю соседними клетками. Следовательно, вокруг нее возможно 256 комбинаций. Кроме того, сама она может находиться в 2-х состояний. Итого: клетка вместе со своим окружением может находиться в 512 различных состояниях, которые все можно проверить полным перебором.

Можно искусственно создать в поле ту или иную комбинацию и посмотреть, как она будет себя вести.
А размер 15 клеток (по одному измерению?) - маловато. Что-то интересное можно увидеть, когда по каждой координате количество клеток измеряется сотнями.
renesko1
размер 15 клеток\
Нет ты не так меня понял, размер ограничен моей фантазией и мощностью комп. smile.gif
Спасибо за помощь.
andriano
15 клеток это как? 3х5?
Что же касается мощности компа, то, помнится, поле 640х480 вполне себе резво бегало на 486.
renesko1
Это квадрат 15+15 ;
renesko1
Я поигрался и всем советую сделать или поигратся.
Здесь игра + ссылки на сайты где есть примеры интересных фигур + Unit ( он реализует список с ключом и 2
коорд x y(коряво правда)).
Спс andriano за помощь еще раз. smile.gif
--> Нажмите для просмотра прикрепленного файла
+ у меня вопрос как сделать что бы не вышебало когда все клетки умирают ?

ps
1 поколение надо задать самому + первая клетка появляется автоматом посередке.
andriano
Честно говоря, немного озадачило управление. Есть 2 окна: консольное и графическое. Что-то делать с графическим можно только тогда, когда его загораживает консольное. Странно это.
Еще.
При каждом запуске расставлять клетки - довольно утомительно. Желательно задать вопрос: а нужно ли оно пользователю, и если он не горит желанием возиться с клетками, разбросать из ДПСЧ.
Когда все клетки умирают, очевидно, надо выводить надпись "Game Over".
renesko1
Когда умирает колония у меня к списку применяется днструктор, потом при обращение к списку возникает
ошибка и выход .
**************
2 окна тк не знаю как сделать что б на одном все было.(это вопрос)
*******************
в приципе можно оформить меню :
сами или случайно.

ps

отключил рисование сетки и увеличил размер до 200 и уменьшил размер клетки гораздо интереснее.
andriano
Я не смотрел реализацию, но зачем там списки?
Я как-то даже не могу с ходу придумать, как их можно ам применить.

Обычно возникают проблемы, как сделать второе окно, а не как от него избавиться.
Кстати, как делаешь?
renesko1

program Life;
uses graph,crt,unitlinkedList ;
const
grDriver : integer = Detect ;
....
var
grMode : integer ;
......
....
....
......
begin
InitGraph (grDriver, grMode, '') ;



**********************
я до этого делал программу где нужен список с ключом и x, y
Решил воспользоватся.
Заношу Coord. клеток в 1 список,обрабатывая его, заношу кандндатов на смерть в 2 список,
кандидатов на появление в 3 .
Потом умертвляю живых, воскрешаю мертвых, оставляю жить остальных.
ps
Догадываюсь, что не самый оптимальный способ реализации, но все таки он работает. smile.gif
Вопрос еще в силе.
andriano
Если вопрос о списках - то выбросить.
Зачем делать два прохода - на одном выбирать кандидатов, на другом - смотреть, что с ними делать.
Нодо делать сразу на месте: просмотрел клетку - сделал с ней то, что нужно, смотришь следующую...
renesko1
А если кпримеру я посмотрел клетку около нее новая клетка, и при просмотре других клеток в этом поколение
новая клетка не должна поддерживать жизнь старых,те она должна быть, но не должна учитыватся в просмотре на "смерть" клеток этого поколения.
//
Я сделал так : занашу коорд. в список новых клеток и присваиваю в массиве этой клетке значение отличное от зн. мертвых и живых клеток.
Потом из списка новых клеток копирую в список клеток и меняю знач. в массиве на зн. живой клетки.
andriano
Быстрее и удобнее сделать так:
1. Выделить в памяти два массива, каждый из которых описывает целиком поле.
2. В первом массиве тем или иным образом разбросать клетки.
3. Вывести содержимое первого массива на экран.
4. По содержимому первого массива рассчитать клетки второго массива.
5. Поменять местами указатели на первый и второй массивы.
6. цикл на шаг 3.
renesko1
В следующий раз сделаю так.
Я думал о массивах, но решил, что придется смотреть каждую клетку(что дольше по времени), но судя по твоим
постам твой способ, действительно, лучше.
Код

Что же касается мощности компа, то, помнится, поле 640х480 вполне себе резво бегало на 486.

К стати как насчет ликвидации проблемы о 2 окнах?
+я реализовал случайное заполнение с зад. плотностью и решил сделать расстановку стандартных фигур
(считывание из текстового файла)
andriano
Дольше по сравнению с чем?
По идее мы говорим о 2-3 соседях, т.е. средний процент заполлнения поля - 20-40%. При этом можно не проверять ТОЛЬКО те клетки, в близи которых клеток нет вообще. А таких зон совсем мало, если они вообще есть. Т.е. сэкономить на проверке не всех клеток вряд ли удастся.

Честно говоря, проблему о 2 окнах не понял. Что мешает работать в одном окне, как это принято во всех программах?

Кстати, поле у тебя "прямоугольник", "цилиндр" или "тор"? Т.е. есть ли замыкание по краям? Если нет, то ты практически сразу потеряешь все подвижные фигуры.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.