Kód: Vybrať všetko
unit ZooUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, ComCtrls, Menus;
type
TPocet= 1..100;
TZvieratko = class
meno: string;
foto: string;
popis: string;
lok: string;
druh: string;
x, y: integer;
priatelia: set of TPocet; //array[TPocet]of TZvieratko;
constructor Create();//(m,f,p,l,d: string; x1,y1: integer);
end;
TZoo = class
private
z: array[TPocet] of TZvieratko;
mapa,dvojka: TImage;
pocet: integer; //pocet zvieratiek
sfile: string;
public
constructor Create(image, image2: TImage; subor: string);
procedure Kliknutie(x,y: integer; PraveTlacidlo: boolean);
procedure ZobrazZvieratko(ktore: integer);
procedure PridajZvieratko(x,y: integer; meno, foto, popis, lok, druh: string; cislo:integer);
procedure Nacitaj(subor: string);
procedure PridajPriatela(komu:integer; priatelia:string);
procedure Uloz(subor: string);
procedure Vykreli;
function JeZvieratko(x, y:integer): integer;
end;
implementation
{TZvieratko}
constructor TZvieratko.Create();//(m,f,p,l,d: string; x1,y1: integer);
begin
meno:= 'm';
foto:= 'f';
popis:= 'p';
lok:= 'l';
druh:= 'd';
x:= 0;
y:= 0;
priatelia:=[];
end;
{TZoo}
//ahoj zoo
constructor TZoo.Create(image, image2: TImage; subor: string);
var
i: integer;
begin
dvojka:= image2;
mapa:= image;
for i := Low(TPocet) to High(TPocet) do
z[i] := nil;
pocet:= 0;
sfile:= subor;
Nacitaj(subor);
PridajZvieratko(10,10,'papagaj','papagaj.jpg','hmmm','afrika','vtak',1);
Uloz(sfile);
Vykreli;
end;
//tuk tuk na mapke
procedure TZoo.Kliknutie(x,y:integer; PraveTlacidlo: boolean);
var
a: integer;
begin
a:= JeZvieratko(x,y);
if PraveTlacidlo then
begin
if a <> 0 then
ZobrazZvieratko(a);
end
else
begin
if a = 0 then
//PridajZvieratko(x,y) otori sa nieco a prida sa zvieratko
else
ShowMessage('Tu už zvieratko žije. Skús pridať nové zvieratko kúsok od neho.');
end;
end;
//info o zvieratku
procedure TZoo.ZobrazZvieratko(ktore: integer);
begin
//
end;
//nove zvieratko
procedure TZoo.PridajZvieratko(x,y: integer; meno, foto, popis, lok, druh: string; cislo:integer);
begin
if z[cislo]= nil then
z[cislo]:= TZvieratko.Create();
z[cislo].x:= x;
z[cislo].y:= y;
z[cislo].meno:= meno;
z[cislo].foto:= foto;
z[cislo].popis:= popis;
z[cislo].lok:= lok;
z[cislo].druh:= druh;
end;
//a zvieratko sa zrodilo
procedure TZoo.Nacitaj(subor: string);
var
f: TFileStream;
meno, foto, popis, lok, druh, priat: string;
x,y: integer;
i: integer;
j:integer;
begin
if FileExists(subor) then //ak zvieratka uz na mape su
begin
pocet:= 0;
f:= TFileStream.Create(subor, fmOpenRead);
f.Position:= 0;
while f.Position < f.Size do
begin
inc(pocet);
f.Read(x, sizeOf(integer));
f.Read(y, sizeOf(integer));
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(meno[j], sizeof(char));
//f.Read(meno, i);
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(foto[j], sizeof(char));
//f.Read(foto, i);
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(popis[j], sizeof(char));
//f.Read(popis, i);
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(lok[j], sizeof(char));
//f.Read(lok, i);
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(druh[j], sizeof(char));
//f.Read(druh, i);
PridajZvieratko(x,y,meno, foto, popis, lok, druh, pocet);
f.Read(i, sizeOf(integer));
for j:= 1 to i do
f.Read(priat[j], sizeof(char));
//f.Read(priat, i);
PridajPriatela(pocet, priat);
end;
end
else //ak nie su
begin
f:= TFileStream.Create(subor, fmCreate);
end;
f.Free;
end;
procedure TZoo.PridajPriatela(komu:integer; priatelia:string);
var
i: integer;
s: string;
begin
i:= 1;
s:='';
while i <= length(priatelia) do
begin
if priatelia[i] = ',' then
begin
z[komu].priatelia:= z[komu].priatelia + [strtoint(s)];
s:= '';
end
else
s:= s+ priatelia[i];
inc(i);
end;
end;
//ulozenie so suboru
procedure TZoo.Uloz(subor: string);
var
i,j: integer;
k: integer;
f: TFileStream;
priat: string;
begin
if not FileExists(subor) then
f:= TFileStream.Create(subor, fmCreate)
else
f:= TFileStream.Create(subor, fmOpenReadWrite);
for i := Low(TPocet) to High(TPocet) do
if z[i] <> nil then
begin
priat:= '';
f.Write(z[i].x, sizeof(integer));
f.Write(z[i].y, sizeof(integer));
k:= length(z[i].meno);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (z[i].meno[J], sizeof(char));
//f.Write(z[i].meno, k);
k:= length(z[i].foto);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (z[i].foto[J], sizeof(char));
//f.Write(z[i].foto, k);
k:= length(z[i].popis);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (z[i].popis[J], sizeof(char));
//f.Write(z[i].popis, k);
k:= length(z[i].lok);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (z[i].lok[J], sizeof(char));
//k:= length(z[i].lok);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (z[i].druh[J], sizeof(char));
//f.Write(z[i].druh, k);
for j:= low(TPocet) to high(TPocet) do
begin
if (j in z[i].priatelia) then
begin
priat:= priat + inttostr(i) + ',';
end;
end;
k:= length(priat);
f.Write(k, sizeof(integer));
for j:= 1 to k do
f.write (priat[J], sizeof(char));
//f.Write(priat, k);
end;
f.Free;
end;
procedure TZoo.Vykreli;
var
i: integer;
x,y: integer;
m: TBitmap;
begin
m:= TBitmap.Create;
m.LoadFromFile('mapa.bmp');
mapa.Canvas.Draw(0,0,m);
for i := Low(TPocet) to High(TPocet) do
if z[i] <> nil then
begin
x:= z[i].x;
y:= z[i].y;
mapa.Canvas.MoveTo(x-5, y-5);
mapa.Canvas.Brush.Color:= clred;
mapa.Canvas.pen.Color:= clYellow;
mapa.Canvas.Ellipse(x-5, y-5, x+5, y+5);
//tu bude este linteto priatelia
end;
end;
//hmm, zije tam zviera???
function TZoo.JeZvieratko(x,y:integer):integer;
var
i:integer;
begin
Result:= 0;
for i := Low(TPocet) to High(TPocet) do
if z[i] <> nil then
begin
if (z[i].x <= (x+5)) and (z[i].x >= (x-5)) and (z[i].y <= (y+5)) and (z[i].y >= (y-5)) then
Result:= i;
end;
end;
end.
tu je uplne cely.. a ak chcete,t ak tu je aj cely program