Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
FreePascal / Lazarus
|
Re: Eine komplette Map in einer Datei unterbringen?
4. Sep 2004, 19:02
ja ich machte das bei meinen spielen immer mit der procedure:
Delphi-Quellcode:
procedure TBO.LoadLevel(FileName:TFileName);
var
x,i,k,z:Integer;
Level:TStringList;
Key, Value, MusicExt,MusicDir,str:String;
begin
NewGame;
Level:=TStringList.Create;
if FileExists(FileName) = True then
Level.LoadFromFile(FileName)
else begin
ShowMessage('Level Datei: ' + #13 + FileName + #13 + 'Wurde nicht gefunden !');
Exit;
end;
with Level do begin
for i:=IndexOF('Level Optionen {')+1 to Count-1 do begin
if Level.strings[i] = '}' then break;
Key:=GetToken(Strings[i],'=',1);
Value:=Trim(GetToken(Strings[i],'=',2));
if Pos('MusicExt',Key) > 0 then MusicExt:=Value;
if Pos('MusicDir',Key) > 0 then MusicDir:=Value;
if Pos('MusicFiles',Key) > 0 then begin
MusikListe.Clear;
if MusicDir = '~' then MusicDir:='default\music\';
for k:=1 to NumToken( Value,',') do begin
if UpperCase(ExtractFileExt(GetToken(Value,',',k))) = '' then
MusikListe.Add( GetExeDir + MusicDir + GetToken(Value,',',k) + '.' + MusicExt )
else
MusikListe.Add( GetExeDir + MusicDir + GetToken(Value,',',k))
end;
end; // MusicFiles
if Pos('Bälle',Key) > 0 then begin
for k:=1 to StrToint(Value) do begin
ADD_BALL(random(MapX*MapS ),random(MapY*mapS ));
end;
end; // Bälle
if Pos('Gegner',Key) > 0 then begin
AddG(StrToInt(Value));
maxIG:=StrToInt(Value);
end;
if Pos('ImageDir',Key) > 0 then begin
if Pos('~',Value) > 0 then
ImageDir:=GetExeDir + 'default\image'
else begin
if FileExists(ExtractFileDir(FileName) + '\image\images.txt') then
ImageDir:=ExtractFileDir(FileName) + '\image'
else
ImageDir:=GetExeDir + 'default\image';
end;
end;
end; // Level Optionen
z:=0; i:=0; x:=0; str:='';
z:=IndexOF('Map {')+1;
Randomize;
for i:=z to Count-2 do begin
str:=strings[i];
for x:=0 to MapX do begin
if str[x+1] = 'R' then
CreateStein(x,(i-z),random2(-1,3))
else
if str[x+1] = 'K' then
CreateStein(x,(i-z),none)
else
CreateStein(x,(i-z),StrToInt(str[x+1]));
end;
end;
end;
Music.ClearMusik;
// for i:=0 to MusikListe.Count -1 do
// Music.AddMusik(MusikListe.Strings[i]);
// music.PlayMusik(MusikListe.strings[random(MusikListe.count-1)],-1);
// Music.TInit;
end;
du musst sie noch anpassen und die textdatei sieht dann so aus:
Zitat:
Level Optionen {
MusicExt = mid
MusicDir = ~
MusicFiles = 00,01,02,03,04,05,06,07,08,09
Bälle = 0
Gegner = 6
ImageDir = ~
}
Map {
104022030211234K222332321230321332141100
420320443031333K040330444231343440444242
114023130312141K012000201020233213432232
3332114300111132324421244222240243332041
2311241104304433222201314413341310233022
0032043440010244121404022134233143302341
1104312122212323034041030022404121404122
}
die zahelen sind textur indexes und stellen im moment auch nur ein objekt typ da um mehr objekttypen definieren zu können musst du einfach hinter den textur index einfach noch ne zahlschreiben und es bei der such mit berücksichtigen !!!
Michael Springwald MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
|