Я тут впервые... так что сильно не ругайте, если не в ту тему залез...
Пишу пошаговую статегию., и возникла одна проблема уже вторую неделю долблю...
Созданно два двумерных массива для хранения информации;
я обхожу каждую ячейку, и если она занята, то выполняю для неё некий "скрипт" а результаты записываю во второй массив, и вывожу на экран;
потом одновляю первый массив...
а проблема такая текущая ячейка на окружением упрвляет нормально, а вот в зависимости от окружения управляется только по направлению обхода массива...
В примере должен получиться симметричный крести, но данные о длинне линии на второй ячейке теряются...
Помогите, уже терпение испоряеся...
Зарание спасибо!
Прикрепленные файлы
mir.zip ( 104.69 килобайт )
Кол-во скачиваний: 327
Я тут еще немного поработал - максимально упростил прогу... может понятнее будет...
Fizika.rar ( 1.05 килобайт )
Кол-во скачиваний: 599
Глюк остался...
Когда обращение к Pered[X, 1] - это задание типа поля для обработки на следующем проходе, я называю это типом организма; Pered[1, 0] := 40 - это яркий красный цвет текущей клетки, я спользую FPC...
А преобразования такие: текущая клетка выполняет те или иные действия в зависимости от значения поля Pered[1, 1], в своём поле она устанавливает собственный цвет Pered[1, 0] или значение счётчика Pered[1, 2],
а когда обращение к Pered[X, 1], где Х = 1..6 - это установка типа соседней клетки...
Это своего рода программа по развертки нейросети, но пока олько развертки...
Добавлено через 4 мин.
Извеняюсь одна опечатка
Опять упс...
Свой тип клетка менять не может, поэтому Х=2..5...
Ну, раз не хочешь говорить какие именно преобразования (то, что КАКИЕ-ТО - это я вижу, вот эти КАКИЕ-ТО у тебя неправильные) - ищи в них ошибку сам. Здесь тебе помочь нельзя, не зная, что ты пытаешься сделать.
Следствие: у тебя на третьем проходе по матрице при i = 147 клетка "вниз" заполняется значением "6", это прекращает работу с теми клетками, которые находятся ниже нее, потому что уже на следующем шаге все, что находится ниже - обнуляется, и потом вообще не обрабатывается.
Какова причина этого? Я не знаю, тебе лучше знать, ты программируешь что-то, делиться своими задумками не хочешь, тебе и править код. Так правь...
Система влияя на соседние клктки должна развиваться...
Как ещё объяснить увы незнаю...
После того как, клетка принимает значение 6 развитие должно остановиться - это правильно, но получает она это значение, если у вышестоящей счетчик обнуляется, а это должно случиться только через 147 циклов, ещё странность, рас её значение 6, то она должна быть красного цвета, а она чёрного...
Собственно если подробно:
case Pered[1,1] of
1 : отображает свой цвет, устанавливает начальное значение счётчика, устанавливает значение клеток окружения
2 : отображает свой цвет, устанавливает счётчик dec(снизу), если счетчик - 0 то устанавливает 6 тип верхней ячейки иначе опять же второй тип сверху
3..5 : тоже что и 2-тип только по своему направлению
6 : только устанавливает свой цвет
""(кстати, цвет №40 - это что, по-твоему?)""
Как я понял имеется ввиду :
http://insidecpp.ru/antipatterns/magic_numbers/
TriuS-Strannik удачи.
renesko1 спасибо за ссылку...в принципе конкретно это я знал, просто в данном случае так действительно легче - просто я сильно упростил программу - функция Translatiya принадлежала другому объекту, и читала "скрипты" - потом я прописал их в код...
Собственно вышеуказанная функция работает правильно...
Ошибка пороисходит где-то пр передачи данных из буферной переменной Pered[] в SPole или при обновлении: PPole:=SPole... скорее всего второе, но как это проверить...
Вот пример решения:
Pered[Eta ]:=PPole[x ,y ];
Pered[Verh ]:=PPole[x+1,y ];
Pered[Pravo]:=PPole[x ,y+1];
if GOST <> 0 then
begin
Pered[Niz ]:=SPole[x-1,y ];
Pered[Levo ]:=SPole[x ,y-1]
end
else
begin
Pered[Niz ]:=PPole[x-1,y ];
Pered[Levo ]:=PPole[x ,y-1]
end;
Trans^.Ustanovka(@Pered);
str(nom^,t);
t:='fv'+t;
Trans^.Translatiya(t);
SPole[x ,y ]:=Pered[Eta ];
if GOST <> 0 then
begin
SPole[x+1,y ]:=Pered[Verh ];
SPole[x ,y+1]:=Pered[Pravo];
SPole[x-1,y ]:=Pered[Niz ];
SPole[x ,y-1]:=Pered[Levo ]
end
else
begin
SPole[x+1,y ,Tip]:=Pered[Verh ,Tip];
SPole[x ,y+1,Tip]:=Pered[Pravo,Tip];
SPole[x-1,y ,Tip]:=Pered[Niz ,Tip];
SPole[x ,y-1,Tip]:=Pered[Levo ,Tip]
end