Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Eine komplette Map in einer Datei unterbringen?

  Alt 4. Sep 2004, 18: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] = 'Rthen
          CreateStein(x,(i-z),random2(-1,3))
        else
          if str[x+1] = 'Kthen
            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)
  Mit Zitat antworten Zitat