| Autor |
Beitrag |
fcg
      
Beiträge: 360
WinXP
D3 Prof, D6 Pers
|
Verfasst: Do 05.06.03 21:42
hi @ all
Ich möchte mit DephiX eine Art Minigolf proggen. Eigentlich ja soweit kein Problem. Nur bei der Darstellung / Erstellung des Spielfelder haperts bei mir. Ich habe folggende Datei:
Quelltext 1: 2: 3: 4: 5: 6:
| xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxx xx xxxxx g x xxxx x xxx x |
Dabei sollen Alle X Banden seien (Collidieren) und das g soll das Loch darstellen. Wie bekommen ich diesen Code einer textdate nun Sinnvoll in mein Spiel??
thÄnxX
fcg
_________________ .: Wer für alles offen ist, kann nicht ganz dicht sein! :.
|
|
Phobeus
      
Beiträge: 1280
Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
|
Verfasst: Do 05.06.03 22:32
Hand aufs herz... warum den als Txt-Datei und nicht als binär Datei? Wie Du es am besten machst? Du gehst jede reihe durch und schreibst für jedes x in einem 2D-Array eine 1 ... ansonsten läßt Du eine 0 stehen.
feld : array[0..w,0..b] of Byte;
hö?
Phobeus
_________________ "Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 06.06.03 14:25
ich hatte mal das gleich versucht und habe es geschaft (siehe sokobahn 1.5 bzw. Brekout  )
wenn du willst gibe ich dir den code....
@Phobeus
Binär hatt den nachteiel das man nicht einfach mal ebend die datei ändern kann ohne ein exteren programm zu starten bzw. zu schreiben
und zum teste würde ich das auch liber in einer Text datei packen 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
umpani
      
Beiträge: 389
|
Verfasst: Fr 06.06.03 18:42
Du solltest die Textdatei als Array einlesen:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| Var Karte: array[1..40,1..100] of string[1];
procedure einlesen; var datei:textfile; i,y:integer; zeile:string; begin assignfile(datei,'karte.txt'); reset(datei); y := 1; repeat readln(datei,zeile); for i := 1 to length(zeile) {nicht größer als 40} do begin karte[i,y] := copy(zeile,i,1); end; inc(y); until eof(datei); closefile(datei);
end; |
Jetzte ist die Textdatei 1:1 im Array vorhanden.
(Achtung, es könnten kleine Syntaxfehler im Code sein. Ich habe ihn nur aus dem Kopf hingeschrieben)
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Fr 06.06.03 20:24
ich habe es per stringliste gelöst:)
und da sieht der code so aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Sokubahn 1.0: Level Datei LevelOptionen { Music:00,01,02,03,04,06,07,08,09,10,11,12,13 TexturIndex:0,0,0,3,1 MapSize:40 Grafik_File:~texturen01.grf LevelOptionen }
Draw_Karte { ################ # .. # # # # S # # # # # # # # # ################ Draw_Karte } |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
fcg 
      
Beiträge: 360
WinXP
D3 Prof, D6 Pers
|
Verfasst: Mo 09.06.03 17:52
@mim: kannst mir den code mal bitte zuschicken..?
philipp@fcgservice.net
thÄnxX
fcg
_________________ .: Wer für alles offen ist, kann nicht ganz dicht sein! :.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mo 09.06.03 19:02
hier ist der code habe:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117:
| procedure TSokubahn.LoadFileMap(pFileName:String); function GetDefaultDir(Str,de:String): String; var LevelVerzeichnis:String; begin LevelVerzeichnis:=ExtractFileDir(pFileName); if Pos('.',str) > 0 then if Pos('~',str) > 0 then result:=getexedir + 'default\image\' + GetToken(str,'~',2) else result:=LevelVerzeichnis + 'image\' + str else if Pos('~',str) > 0 then result:=getexedir + 'default\image\' + GetToken(str,'~',2) + de else result:=LevelVerzeichnis + 'image\' + str + de ; end; var x,y,i:Integer; Level:TStringList; str,str2,TextIndex:String; LevelVerzeichnis:String; begin LevelVerzeichnis:=ExtractFileDir(pFileName); Level:=TStringList.Create;
if FileExists( pFileName ) = True then Level.LoadFromFile(pFileName) else begin ShowMessage('Level Datei: "' + pFileName + '"' + ' nicht gefunden !' ); Exit; end;
with Level do begin if Strings[0] <> LevelHeader then begin ShowMessage('Keine Sokubahn 1.0 Level Datei'); Exit; end; for i:=IndexOf('LevelOptionen {')+1 to Indexof('LevelOptionen }')-1 do begin Str:=UpperCase(Trim(GetToken(Strings[i],':',1))); Str2:=UpperCase(Trim(GetToken(Strings[i],':',2)));
if Str = UpperCase('Music') then GameSound:=TSound.create(Str2,LevelVerzeichnis + '\Music\', '.mid',None);
if Str = UpperCase('TexturIndex') then TextIndex:=Str2; if Str = UpperCase('MapSize') then SetMapSize(640 div StrToInt(Str2)-1,384 div StrToInt(Str2)-1,StrToInt(Str2) );
if Str = UpperCase('Grafik_File') then GLXImageList.Items.LoadFromFile(GetDefaultDir( str2,'.grf') )
end; ZielIndex:=StrToInt(GetToken( TextIndex,',',4)); for y:=indexof('Draw_Karte {')+1 to IndexOf('Draw_Karte }')-1 do begin for x:=0 to MapX+1 do begin str:=Strings[y];
if (str[x] = '#') and (Map[x-1,y-indexof('Draw_Karte {')-1].typ = None) then begin Map[x-1,y-indexof('Draw_Karte {')-1].typ:=wand; Map[x-1,y-indexof('Draw_Karte {')-1].tex:=StrToInt(GetToken(TextIndex,',',1)); Continue; end else begin if (upperCase(Str[x]) = 'R') and (Map[x-1,y-indexof('Draw_Karte {')-1].typ = None) then begin Randomize; Map[x-1,y-indexof('Draw_Karte {')-1].typ:=wand; Map[x-1,y-indexof('Draw_Karte {')-1].tex:=Random(3); Continue; end else begin if (Str[x] <> '') and (str[x] in ['0'..'9']) and (Map[x-1,y-indexof('Draw_Karte {')-1].typ = None) then begin Map[x-1,y-indexof('Draw_Karte {')-1].typ:=wand; Map[x-1,y-indexof('Draw_Karte {')-1].tex:=StrToInt(str[x]); Continue; end end; end;
if str[x] = '-' then begin if Map[x-1,y-indexof('Draw_Karte {')-1].typ = None then begin Map[x-1,y-indexof('Draw_Karte {')-1].typ:=Kasten;
Map[x-1,y-indexof('Draw_Karte {')-1].Tex:=StrToInt(GetToken(TextIndex,',',2)); Continue; end; end;
if str[x] = '.' then begin if Map[x-1,y-indexof('Draw_Karte {')-1].typ = None then begin Map[x-1,y-indexof('Draw_Karte {')-1].typ2:=Ziel; Map[x-1,y-indexof('Draw_Karte {')-1].Tex2:=StrToInt(GetToken(TextIndex,',',3)); Continue; end; end;
if str[x] = 'S' then begin if StartPositionen = '' then StartPositionen:= StartPositionen + IntToStr(x-1) + ',' + IntToStr(y-indexof('Draw_Karte {')-1) else StartPositionen:= StartPositionen + '|' +IntToStr(x-1) + ',' + IntToStr(y-indexof('Draw_Karte {')-1); Continue; end;
end; end; end; Player.x:=PlayerRandomPos(StartPositionen).x; Player.y:=PlayerRandomPos(StartPositionen).Y; Player.Tex:=StrToInt(GetToken(TextIndex,',',4));
GameSound.PlayMusikFile(10); end; |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
fcg 
      
Beiträge: 360
WinXP
D3 Prof, D6 Pers
|
Verfasst: Mo 09.06.03 19:34
jo danke. werde mich mal da durcharbeiten...
fcg
_________________ .: Wer für alles offen ist, kann nicht ganz dicht sein! :.
|
|
|