Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Сохранение класса в файл...   Найти похожие ветки 

 
Подкрадуха ©   (2004-05-27 20:33) [0]

Уважаемый, ALL, подскажи, как лучше сохранять класс в файле? Причем, так, что бы невозможно было подправить этот файл в

блокноте?
Вот пример...
-----------------
unit User;

interface

type
 THero = class(TObject) // TObject??? или от какого лучше наследовать?
   Nick: String;
   PSW:  String;
   imeshok: Integer; // количество мешков
   armor1: TStringList; // количество оружия1 у героя (в мешке)
   armor2: TStringList; // количество оружия2 у героя (в мешке)
   ...
   function CheckStrike(strike1: Integer; block1: Integer; strike2: Integer; block2: Integer; var hp1: Integer; var hp2:

Integer): PChar;
   function SaveHero(nick: String): boolean;
   function ReadHero(nick: String): boolean;
 end;

implementation

function CheckStrike(strike1: Integer, block1: Integer, strike2: Integer, block2: Integer, var hp1: Integer, var hp2:

Integer): PChar;
begin
 ...
 hp1:=...HELTS1...; // тут присваиваются новые хелсы герою1
 hp2:=...HELTS2...; // тут присваиваются новые хелсы герою2
 Result:="text boya s komentariyami";
end;

function SaveHero(nick: String): boolean;
begin
 // подскажите как лучше реализовать, исходя из того, что параметры героя не поля записи, а класса?
end;

function ReadHero(nick: String): boolean;
begin
 // подскажите как лучше реализовать, исходя из того, что параметры героя не поля записи, а класса?
end;

end.
-------------------
Желательно было бы, чтобы сохранять в какой-нить файл своего формата, чтобы этот файл не возможно было править в блокноте?
З.Ы. Писал по памяти - исходники на работе, возможно где и ошибся.


 
Mim1 ©   (2004-05-27 20:55) [1]

Я как понимаю вам надо сохранять не класс а эземпляр обьекта этого класса, для этого просто отнаследоваться от tcomponent и использовать методы writecomponent класса tstream для сохранения в поток. Если нужно шифоровать то воспользуйтесь каким нибудь алгоритмом шифрования. Рекомендую поискать на торри какой нибудь tcryptedstream.


 
Подкрадуха ©   (2004-05-27 21:11) [2]

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


 
Mim1 ©   (2004-05-27 21:23) [3]


uses classes;

type  
  tt = class(tcomponent)
 private
   fstrprop:string;
 protected  
 public
 published
   property strprop:string write fstrprop read fstrprop;
end;

дальше, сохранение

var t:tt;
begin
 t:= tt.create(nil);
 t.strprop := "Mim1";
 with tfilestream.create("c:\123.x",fmCreate) do
   try
     writecomponent(t);
   finally
     free;
   end;
 t.free;
end;

чтение

var t:tt;
begin
 t:= tt.create(nil); //  t:= tt.newinstance;
 with tfilestream.create("c:\123.x",fmopenread) do
   try
     readcomponent(t);
   finally
     free;
   end;
 showmessage(t.strprop);
 t.free;
end;

initialization
 classes.registerclass(tt);
finalization
 classes.unregisterclass(tt);
end.


Вообщем способ сложноват, может кто что попроще придумает.
Сохраняются только Published свойства.
Писал прям сюда, так что могут быть разного рода ошибки.


 
Подкрадуха ©   (2004-05-27 21:25) [4]

Спасибо, буду разбираться.


 
Mim1 ©   (2004-05-27 21:52) [5]

Вообщет сохраняться в поток могут наследники tpersistent но у потока нет метода (или есть?) writepersistent а есть writecomponent. Полюс ко всему компоненты умеют регистрироваться в палитре, слать друг другу приветы перед смертью, и еще много разного.


 
TUser ©   (2004-05-27 21:52) [6]

Вообще-то я нокогда игрушки не делал, но подозреваю, что THero надо наследовать совсем не от TObject, а создать свою (и довольно сложную) структуру классов. И THero будет объектом не самого высокого уровня.


 
Подкрадуха ©   (2004-05-27 22:27) [7]

На С было бы проще...
Создал бы класс Battle и Stuff и унаследовал бы Hero от них обоих :(
Привыкаю к делфи просто, ведь там вроде нет множественного наследования пока?


 
Palladin ©   (2004-05-27 22:37) [8]

И что же бы из себя представляли эти два класса Battle и Stuff?


 
Подкрадуха ©   (2004-05-28 05:44) [9]

Если [6] верно, то на С это было бы проще, но топик не про достоинства и недостатки.
Спасибо, еще раз, всем.


 
Digitman ©   (2004-05-28 09:46) [10]


> Создал бы класс Battle и Stuff и унаследовал бы Hero от
> них обоих :(
> Привыкаю к делфи просто, ведь там вроде нет множественного
> наследования пока?


ничто не мешает воспользоваться для этого механизмом предоставления и реализацией классом более чем одного интерфейса

IBattle = interface
... методы Battle
end;

IStuff = interface
... методы Stuff
end;

THero = class(TInterfacedObject, IBattle, IStuff)
... методы Battle
... методы Stuff
end;

var
 Hero: THero;
 Battle: IBattle;
 Stuff: IStuff;

..
 Hero := THero.Create;
 Battle := Hero as IBattle;
 Stuff := Hero as IStuff;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
14-1085176317
lak
2004-05-22 01:51
2004.06.13
http://www.artlebedev.ru


14-1085503543
Piter
2004-05-25 20:45
2004.06.13
Пиринговые сети


3-1085006232
Bes
2004-05-20 02:37
2004.06.13
"соединение" нескольких баз...


1-1085918049
kalmykovser
2004-05-30 15:54
2004.06.13
Как заглушить нажатие клавиши Win (vk_rwin or vk_lwin)


1-1085943680
Gestapo
2004-05-30 23:01
2004.06.13
UNICODE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский