IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Life, Игра жизнь.
сообщение
Сообщение #1


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


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


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(renesko1 @ 22.04.2008 21:48) *

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

Это одно и то же. Поведение клетки на текущем шаге зависит исключительно от состояния на предыдущем.
При программной реализации обычно используют два поля - каждое для своего шага.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Спасибо тогда скоро уже доделаю. smile.gif


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


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

Добавлено через 19 мин.
+ для новой надо 3 или от 3 и больше.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


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


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Цитата(andriano @ 23.04.2008 23:31) *

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


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

Статические фигуры я посмотрел : работают.
Так же при n(size) < 15 во сновном клетки после пару поколений быстро образуют статические фигуры.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


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

Можно искусственно создать в поле ту или иную комбинацию и посмотреть, как она будет себя вести.
А размер 15 клеток (по одному измерению?) - маловато. Что-то интересное можно увидеть, когда по каждой координате количество клеток измеряется сотнями.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


размер 15 клеток\
Нет ты не так меня понял, размер ограничен моей фантазией и мощностью комп. smile.gif
Спасибо за помощь.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


15 клеток это как? 3х5?
Что же касается мощности компа, то, помнится, поле 640х480 вполне себе резво бегало на 486.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Это квадрат 15+15 ;


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Я поигрался и всем советую сделать или поигратся.
Здесь игра + ссылки на сайты где есть примеры интересных фигур + Unit ( он реализует список с ключом и 2
коорд x y(коряво правда)).
Спс andriano за помощь еще раз. smile.gif
--> Прикрепленный файл  life.rar ( 65.44 килобайт ) Кол-во скачиваний: 1557

+ у меня вопрос как сделать что бы не вышебало когда все клетки умирают ?

ps
1 поколение надо задать самому + первая клетка появляется автоматом посередке.

Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Честно говоря, немного озадачило управление. Есть 2 окна: консольное и графическое. Что-то делать с графическим можно только тогда, когда его загораживает консольное. Странно это.
Еще.
При каждом запуске расставлять клетки - довольно утомительно. Желательно задать вопрос: а нужно ли оно пользователю, и если он не горит желанием возиться с клетками, разбросать из ДПСЧ.
Когда все клетки умирают, очевидно, надо выводить надпись "Game Over".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


Когда умирает колония у меня к списку применяется днструктор, потом при обращение к списку возникает
ошибка и выход .
**************
2 окна тк не знаю как сделать что б на одном все было.(это вопрос)
*******************
в приципе можно оформить меню :
сами или случайно.

ps

отключил рисование сетки и увеличил размер до 200 и уменьшил размер клетки гораздо интереснее.


Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


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

Обычно возникают проблемы, как сделать второе окно, а не как от него избавиться.
Кстати, как делаешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +



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
Вопрос еще в силе.

Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Если вопрос о списках - то выбросить.
Зачем делать два прохода - на одном выбирать кандидатов, на другом - смотреть, что с ними делать.
Нодо делать сразу на месте: просмотрел клетку - сделал с ней то, что нужно, смотришь следующую...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


А если кпримеру я посмотрел клетку около нее новая клетка, и при просмотре других клеток в этом поколение
новая клетка не должна поддерживать жизнь старых,те она должна быть, но не должна учитыватся в просмотре на "смерть" клеток этого поколения.
//
Я сделал так : занашу коорд. в список новых клеток и присваиваю в массиве этой клетке значение отличное от зн. мертвых и живых клеток.
Потом из списка новых клеток копирую в список клеток и меняю знач. в массиве на зн. живой клетки.


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Быстрее и удобнее сделать так:
1. Выделить в памяти два массива, каждый из которых описывает целиком поле.
2. В первом массиве тем или иным образом разбросать клетки.
3. Вывести содержимое первого массива на экран.
4. По содержимому первого массива рассчитать клетки второго массива.
5. Поменять местами указатели на первый и второй массивы.
6. цикл на шаг 3.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


поиск
****

Группа: Пользователи
Сообщений: 347
Пол: Мужской
Реальное имя: nir

Репутация: -  2  +


В следующий раз сделаю так.
Я думал о массивах, но решил, что придется смотреть каждую клетку(что дольше по времени), но судя по твоим
постам твой способ, действительно, лучше.
Код

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

К стати как насчет ликвидации проблемы о 2 окнах?
+я реализовал случайное заполнение с зад. плотностью и решил сделать расстановку стандартных фигур
(считывание из текстового файла)

Сообщение отредактировано: renesko1 -


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


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

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

Кстати, поле у тебя "прямоугольник", "цилиндр" или "тор"? Т.е. есть ли замыкание по краям? Если нет, то ты практически сразу потеряешь все подвижные фигуры.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 19:42
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name