0.25

Закрытые или заброшенные проекты, не состоявшие в Клубе, но имевшие ветку на форуме.

Модератор: Jolly Roger

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Харука-тян » 04 дек 2009, 17:51

Терпеть не могу переписывать код. Потому, что это бесполезно. С другой стороны, когда всё собрано из костылей - это не дело. Но при полном переписывании есть большая вероятность повторного переноса костылей в новую версию, а при частичном - из костылей строится мостик между новым кодом и старым. Что делать и как дальше быть?
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Maelstrom » 04 дек 2009, 18:49

Терпеть не могу переписывать код. Потому, что это бесполезно.
Тогда зачем переписываешь?
Айв кнгенгах Йог-Сотот

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Jolly Roger » 04 дек 2009, 19:06

Код переписывать таки очень даже полезно.
Только по кускам, убивая костыли по одному или парами. :roll:
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Аватара пользователя
Эльф
Сообщения: 115
Зарегистрирован: 12 июл 2007, 16:39

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Эльф » 04 дек 2009, 23:22

А где конкретно костыли?

Если какая-то функция написана через задницу, но работает, то черт с ней, я щитаю.

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

Аватара пользователя
MyParanoya
Сообщения: 159
Зарегистрирован: 01 дек 2009, 19:13

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение MyParanoya » 04 дек 2009, 23:38

я конечно пафосный гей-кодер, но вмешаюсь)
зачем оставлять через жопу то, что сделано только для себя и имеет целью повышения навыка в т.ч.?
ведь потом будет соблазн все остальное делать через жопу)

Аватара пользователя
Эльф
Сообщения: 115
Зарегистрирован: 12 июл 2007, 16:39

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Эльф » 05 дек 2009, 01:32

Ну не знаю, я всегда пишу не для скилов, а чтобы реализовать интересную идею и заодно сбросить Бискапа с парахода современности, лол.

Я вот не 100% не смог бы написать 7drl или yet another adom, просто потому, что не нашел бы мотивации их делать.

И мне интереснее написать неработающий кусок, чем переписывать работающий, но неэстетично написанный.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Maelstrom » 05 дек 2009, 06:45

зачем оставлять через жопу то, что сделано только для себя и имеет целью повышения навыка в т.ч.?
Открою тебе страшную тайну: не все задрачивают код до посинения, чтобы что-то там повысить. Некоторые хотят сделать рогалик :)
Айв кнгенгах Йог-Сотот

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Харука-тян » 24 дек 2009, 21:38

Кто-нибудь знает, как в фрипаскале можно взять адрес переменной?
такая конструкция не работает:

Код: Выделить всё

pItem := addr(TItem.Create());
такая тем более

Код: Выделить всё

pItem := @(TItem.Create());
что делать?
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Максим Кич » 24 дек 2009, 22:06

Харука-тян писал(а):Кто-нибудь знает, как в фрипаскале можно взять адрес переменной?
такая конструкция не работает:

Код: Выделить всё

pItem := addr(TItem.Create());
такая тем более

Код: Выделить всё

pItem := @(TItem.Create());
что делать?
Если тебе нужен указатель на переменную, то для класса TItem, это будет:

var pItem:TItem;

//bla-bla-bla

pItem := TItem.Create();

И есть смысл работать именно с классами, не влезая в pointer-ы.
Dump the screen? [y/n]

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Харука-тян » 24 дек 2009, 22:27

Максим Кич писал(а):pItem := TItem.Create();
Конструктор TItem возвращает TItem, и доказать компилятору, что это совместимые типы, я не могу :(
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Максим Кич » 24 дек 2009, 22:46

Харука-тян писал(а):
Максим Кич писал(а):pItem := TItem.Create();
Конструктор TItem возвращает TItem, и доказать компилятору, что это совместимые типы, я не могу :(
Если ты пытаешься совместить в одной переменной несовместимые типы — ты скорее всего делаешь изначально что-то не то. А если речь идёт об экземплярах класса, то ты наверняка делаешь что-то не то.

Давай ты всё-таки расскажешь свой коварный замысел, потому что вне контекста сложно себе представить, в чём проблема и как её решать.
Dump the screen? [y/n]

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Харука-тян » 24 дек 2009, 22:49

С этим я уже справилась. Теперь затыкаю утечки памяти :lol: Проверяю память в ячейке сразу после выставления - всё в порядке. Обращаюсь к этой ячейке из другой процедуры - ошибка. Я дура? #-o

Код: Выделить всё

//создание предмета
TMap.AddItem(itemID:string; x,y: byte);
var
  itm: TItem;
begin
  itm := TItem.Create; //В ячейку карты x,y записывается
  PutItem(addr(itm), x, y); //указатель на созданный предмет
end;

TMap.PutItem(itm: pItem);
begin
  Map[x,y].Item := itm;
end;

TMap.DrawCell(x,y:byte);
begin
  if Map[x,y].Item<>nil then //и тут ошибка обращения. указатель не nil, но и не на предмет.
    Output.DrawChar(x,y+3, Map[x,y].Item^.Color, Map[x,y].Item^.Picture);
  //как такое может быть?
end;
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Максим Кич » 24 дек 2009, 23:29

А ты уверена, что проблема не с этим:

Код: Выделить всё

Map[x,y].Item^.Color, Map[x,y].Item^.Picture
Что есть Color и Picture, и зачем так сурово к ним обращаться?
Dump the screen? [y/n]

Аватара пользователя
Харука-тян
Мастер
Сообщения: 544
Зарегистрирован: 29 ноя 2006, 00:23
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Харука-тян » 24 дек 2009, 23:33

Проблема не с этим. Color и Picture - цвет и символ для отрисовки предмета. У меня только что получилось заставить игру не вылетать, и теперь я вижу вместо валяющегося на земле предмета пустоту. После выполнения "look', пустота превращается в синюю в. А должна быть зелёная [. Чертовщина какая-то...

Причина такой суровости заключается в том, что все предметы имеют ссылки previtm и nextitm на предыдущий и следующий премет в инвентаре/на земле. Это список с двусторонней связкой. И он у меня как-то не так получился. Хныыыык...
"Женщина верит, что дважды два будет пять, если хорошенько поплакать и устроить скандал" (© Дж. Элиот).
ИзображениеИзображение

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Re: ランセラン : リロード (Lanceran : Reload)

Сообщение Максим Кич » 24 дек 2009, 23:58

Харука-тян писал(а):Проблема не с этим. Color и Picture - цвет и символ для отрисовки предмета. У меня только что получилось заставить игру не вылетать, и теперь я вижу вместо валяющегося на земле предмета пустоту. После выполнения "look', пустота превращается в синюю в. А должна быть зелёная [. Чертовщина какая-то...

Причина такой суровости заключается в том, что все предметы имеют ссылки previtm и nextitm на предыдущий и следующий премет в инвентаре/на земле. Это список с двусторонней связкой. И он у меня как-то не так получился. Хныыыык...
С моей досужей точки зрения, корень твоих бед в том, что ты пытаешься принудительно работать с указателями там, где они и так уже есть. Не глядя на код могу сразу сказать, что он может быть переписан без единой «птички^».
Dump the screen? [y/n]

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 42 гостя