Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа над RPG


Страницы:   1 2 3 4

TButton ©   (2003-04-06 20:52:00) 

собсна вопросов возникает куча определенного ответа на них у меня покамест нету.
например
-как реализовать шмотки. создать record в котором собраны все возможные параметры или как-то еще.
-как реализовать разл. воздействие на чара. Например отравление или наркотики (сначала +++ потом ------)
-как лучше реализовать самого чара.

и подобные. если у кого есть мысли - пишите, обсудим.


TButton   (2003-04-25 19:50:00) [21]

2 neuro
Как тебе сказать, это - концептуально новая РПГ, без левелов...


neuro   (2003-04-25 17:40:00) [22]

Под экспу отведи long integer =) и где level?


TButton   (2003-04-22 21:19:00) [23]

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


cyborg   (2003-04-22 11:52:00) [24]

В общем вот тебе мой совет, чтобы было меньше мороки делай обычные фиксированные массивы как ты и мыслишь :), всё равно ведь у тебя будет ограничение на носимые предметы.
А для данных неизвестных размеров пользуй GetMem FreeMem New Dispose.

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


TButton   (2003-04-22 07:14:00) [25]


unit Hero;

interface
uses things, skills;

type

THeroInfo = record
// характеристики
st:integer; // сила
dx:integer; // ловкость
iq:integer; // ум
en:integer; // endurance - выносливость
lk:integer; // удача
ws:integer; // мудрость
// свойства
hp:integer; // хиты (en+st)
dr:integer; // сопротивление удару (dx)
mn:integer; // mana (ws)
eb:integer; // expirience bonus (iq)
cc:integer; // critical chance (lk)
md:integer; // meele damage (st)
mw:integer; // max weight (st)
ap:integer; // action points (dx)
// persoonal
name:string[32];
blocked:boolean;
end;

THeroWear = record
helm,
amul,
body,
glov,
lhnd,
rhnd,
belt,
boot:TThing;
ring:array[1..6] of TThing;
end;

THero = object
// info
info:THeroInfo;
// wear
wear:THeroWear;
// inventory:
// things
things:array of TThing;
// potions
potions:array of TPotion;
// books
books:array of TBook;
papers:array of TPaper;
// skils
skills:TSkills;
exp:integer;
// resources
resources:TResources;
// additional
online:boolean;
offLineTime:integer; // unLoad hero after 1024 minutes of offLine
status:integer; // status - very usefull thing
minutes:byte; ( перечислены ранее)


unit Hero;

interface
uses things, skills;

type

THeroInfo = record
// характеристики
st:integer; // сила
dx:integer; // ловкость
iq:integer; // ум
en:integer; // endurance - выносливость
lk:integer; // удача
ws:integer; // мудрость
// свойства
hp:integer; // хиты (en+st)
dr:integer; // сопротивление удару (dx)
mn:integer; // mana (ws)
eb:integer; // expirience bonus (iq)
cc:integer; // critical chance (lk)
md:integer; // meele damage (st)
mw:integer; // max weight (st)
ap:integer; // action points (dx)
// persoonal
name:string[32];
blocked:boolean;
end;

THeroWear = record
helm,
amul,
body,
glov,
lhnd,
rhnd,
belt,
boot:TThing;
ring:array[1..6] of TThing;
end;

THero = object
// info
info:THeroInfo;
// wear
wear:THeroWear;
// inventory:
// things
things:array of TThing;
// potions
potions:array of TPotion;
// books
books:array of TBook;
papers:array of TPaper;
// skils
skills:TSkills;
exp:integer;
// resources
resources:TResources;
// additional
online:boolean;
offLineTime:integer; // unLoad hero after 1024 minutes of offLine
status:integer; // status - very usefull thing
minutes:byte; // every 4 minutes add 1 to status
public

end;

implementation

end.


это Hero... думаю достаточно... остальные классы (перечислены ранее) описывают разного рода шмотки...
и еще у меня трабла возникла когда я пытаюсь создать массив героев (pop:array of THero;), а потом присвоить какому-то элементу переменную типа THero - возникает внутренняя ошибка компилятора. насколько я понял это происходит из-за того что THero содержит динамические массивы и прога не знает сколька памяти выделять... вот сижу... мыслю чо мне с этим делать... есть вариант вернуться к истокам, когда на каждый тип шмоток было ограничение по количеству, т.е. размер массива был предопределен...


cyborg   (2003-04-21 19:11:00) [26]

1) И что, что potion это зелья, мне это ни о чём не говорит, я от тебя уже пол дня жду описание твоего Hero, а ты всё филосовствуешь.

2) Из этого следует, что файл закрывать необязательно?


TButton   (2003-04-21 18:33:00) [27]

potion зелья
books книги
papers свитки
info ( сила, ловкость...)

potion зелья
books книги
papers свитки
info инфа (сила, ловкость...)
wear надетые шмотки
things шмотки в кармане
skills навыки
...вот... помоему все...
а кстати я чот-не помню чтоб диабла чо-то проверяла, когда у меня вирусы по лабудили сэйвы... она помнится молча послала меня в ВЦ и все...


cyborg   (2003-04-21 17:29:00) [28]

То, что Hero - герой я понял, а вто что такое potions, books и прочие которым ты делаешь SetLength этого я незнаю.

Что значит обязалово, ты на 100% уверен что твой файл не будет испорчен, пустым или неправильно сделанным?


TButton   (2003-04-21 14:49:00) [29]

а Hero:THero ето собсна наш герой и есть...
а try...finaly это обязалово? в смысле я ведь проверяю файл на предмет существования...


cyborg   (2003-04-21 09:39:00) [30]

Покажи что такое hero без него непонятно зачем SetLength делается.

Сделай

Try
AssignFile(f,filename);
Reset(f,1);
...
Finally
CloseFile(f);
end;


TButton   (2003-04-20 23:45:00) [31]

я заранее прошу не бить меня по голове. это текст процедурки для загрузки персоонажа, если есть предложения по модернизации - пишите...

procedure THeroList.LoadHero(filename: string);
var
f:file;
header:TFileHeader;
hero:THero;
res:integer;
i,n:integer;
begin
if not fileExists(filename) then Exit;
AssignFile(f,filename);
Reset(f,1);
BlockRead(f,header,sizeOf(header),res);
if header.description<>"onLine hero save file" then
begin
CloseFile(f);
Exit;
end;
// loading info
BlockRead(f,hero.info,sizeOf(THeroInfo),res);
// loading wear
BlockRead(f,hero.wear,sizeOf(THeroWear),res);
// loadind inventory
// loading things
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.things,0);
for i:=1 to n do
begin
SetLength(hero.things,High(hero.things)+2);
BlockRead(f,hero.things[i-1],sizeOf(TThing),res);
end;
// loading potions
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.potions,0);
for i:=1 to n do
begin
SetLength(hero.potions,High(hero.potions)+2);
BlockRead(f,hero.potions[i-1],sizeOf(TPotion),res);
end;
// loading books
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.books,0);
for i:=1 to n do
begin
SetLength(hero.books,High(hero.books)+2);
BlockRead(f,hero.books[i-1],sizeOf(TBook),res);
end;
// loading papers
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.papers,0);
for i:=1 to n do
begin
SetLength(hero.papers,High(hero.papers)+2);
( f,hero.papers[i-1],sizeOf(TPaper)

я заранее прошу не бить меня по голове. это текст процедурки для загрузки персоонажа, если есть предложения по модернизации - пишите...

procedure THeroList.LoadHero(filename: string);
var
f:file;
header:TFileHeader;
hero:THero;
res:integer;
i,n:integer;
begin
if not fileExists(filename) then Exit;
AssignFile(f,filename);
Reset(f,1);
BlockRead(f,header,sizeOf(header),res);
if header.description<>"onLine hero save file" then
begin
CloseFile(f);
Exit;
end;
// loading info
BlockRead(f,hero.info,sizeOf(THeroInfo),res);
// loading wear
BlockRead(f,hero.wear,sizeOf(THeroWear),res);
// loadind inventory
// loading things
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.things,0);
for i:=1 to n do
begin
SetLength(hero.things,High(hero.things)+2);
BlockRead(f,hero.things[i-1],sizeOf(TThing),res);
end;
// loading potions
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.potions,0);
for i:=1 to n do
begin
SetLength(hero.potions,High(hero.potions)+2);
BlockRead(f,hero.potions[i-1],sizeOf(TPotion),res);
end;
// loading books
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.books,0);
for i:=1 to n do
begin
SetLength(hero.books,High(hero.books)+2);
BlockRead(f,hero.books[i-1],sizeOf(TBook),res);
end;
// loading papers
BlockRead(f,n,sizeOf(integer),res);
SetLength(hero.papers,0);
for i:=1 to n do
begin
SetLength(hero.papers,High(hero.papers)+2);
BlockRead(f,hero.papers[i-1],sizeOf(TPaper),res);
end;
// loading skills
BlockRead(f,hero.skills,sizeOf(TSkills),res);
// and something else
BlockRead(f,hero.exp,sizeOf(integer),res);
BlockRead(f,hero.resources,sizeOf(TResources),res);
BlockRead(f,hero.online,sizeOf(boolean),res);
BlockRead(f,hero.offLineTime,sizeOf(integer),res);
BlockRead(f,hero.status,sizeOf(integer),res);
BlockRead(f,hero.minutes,sizeOf(integer),res);
CloseFile(f);
end;


cyborg   (2003-04-19 17:30:00) [32]

Для типизованных файлов делаешь file of ..., для файлов в которых много чего хранится делаешь просто File и читаешь BlockRead(), пишешь BlockWrite().
Если у тебя файл из одинаковых данных, то делай типизованный, так удобней, если много чего в файле будет, то нетипизованный.


TButton   (2003-04-18 21:34:00) [33]

2 cyborg ©
угумс... значится сперва создаем переменную типа файл, открываем для записи, пишем общую инфу, пишем количество шмоток, перечисляем шмотки, пишем количество модификаторов, перечисляем модификаторы... а какой тип файла должен быть, т.е. file of...или просто file? и вообще это реально в файл писать переменные разных типов? и если да то как (если не затруднит разъяснить, просто раньше не сталкивался с такой проблемой)?


Плохой человек   (2003-04-17 22:38:00) [34]

Да, ещё можно попробовать FormSaver для сохранения вида формы помимо значений переменных.


cyborg   (2003-04-17 22:13:00) [35]

Верней адрес куда читать, ошибся, имел ввиду куда данные из файла писать. :)


cyborg   (2003-04-17 22:09:00) [36]


Var
FileStream : TFileStream;

...

FileStream := TFileStream.Create("FileName",fmOpenReadWrite);

FileStream.Seek(Номер позиции откуда читать,soFromBeginning);
FileStream.ReadBuffer(Адрес куда писать,Кол-во читаемых байт);

FileStream.Free;


Набери в Дельфи TFileStream и нажми Ctrl+F1 тебе расскажут.


TButton   (2003-04-17 21:01:00) [37]

2 cyborg ©
нет... ну я может тупой ;), но не до такой же степени, чтоб не знать как файлы сэйвить... я это к тому что процесс будет шибко геморойный... кстати, можно про TFileStream по подробнее...


Dabus   (2003-04-17 00:50:00) [38]

Вообще шмотки реально РЕАЛИЗОВАТЬ ЗА БАБКИ.
А как я вижу, во многих играх люди делают обычые таблицы и обычные базы данных. В коих всё и хранят.


cyborg   (2003-04-16 21:06:00) [39]

Главное, что ты должен понять, что Strings.SaveToFile(); - это не есть программирование, выходов у тебя даже два - либо TFileStream, либо File.

Ничего сложного нет, главное попробуй, а потом само понравится ;).


cyborg   (2003-04-16 20:59:00) [40]

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


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо