Die Methode Read der StreamReader-Klasse arbeitet nunmal ein wenig anders. In der MSDN kann man sich schön die Beschreibung der Klasse und ihrer Methoden anschauen:
msdn.microsoft.com/d...io.streamreader.aspx
Grundlegend: Wenn ich das jetzt richtig sehe, nutzt du 9 Variablen, um den aktuellen Spielstatus festzuhalten.
Diese werden in deiner Speicher-routine einfach direkt in einer Datei hintereinander geschrieben.
Ergo wird der Inhalt deiner Datei (Annahme: jedes Feld kann 0, 1 oder 2 als Zustand haben) in etwa so aussehen:
"010012201"
Eine Möglichkeit das Ganze nun wieder einzulesen und aufzudröseln wäre, erst einmal die ganze Datei in einem Rutsch zu lesen und dann die Einzelpositionen den Variablen im Spiel zuzuordnen
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:
| string dateiinhalt; StreamReader datei = new StreamReader("C:\savegame.sav", System.Text.Encoding.Default); string dateiInhalt = datei.ReadToEnd(); datei.Close();
int x=1; int y=1; for (int i=0; i < dateiInhalt.length(); i++) { int wert = GetNumericValue( dateiInhalt[i] );
switch(y) { case 1: switch(x) { case 1: iHelp11 = wert; break; case 2: iHelp12 = wert; break; case 3: iHelp13 = wert; break; } break;
case 2: switch(x) { case 1: iHelp21 = wert; break; case 2: iHelp22 = wert; break; case 3: iHelp23 = wert; break; } break;
case 3: switch(x) { case 1: iHelp31 = wert; break; case 2: iHelp32 = wert; break; case 3: iHelp33 = wert; break; } break; }
if (x < 3) x++; else { x = 1; y++; } } |
Geschickter wäre es natürlich, du nutzt zur Datenhaltung nicht 9 einzelne Variablen, sondern ein zweidimensionales
ARRAY.
Dann kannst du direkt auf die Indexpositionen zugreifen und sparst dir ein wenig Arbeit (und gewinnst ein wenig Übersicht). Der ganze switch-case Bereich schrumpf dann auf etwas in der Form:
C#-Quelltext
1:
| meinArray[x,y] = wert; |
Anderer Weg wäre es, Zeichen für Zeichen zu lesen:
Methode Read erwartet drei Parameter: Ein Zielbuffer, eine Startposition ab der gelesen wird und die Menge der zu lesenden Zeichen.
Denkbar wäre demenstprechend:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| char c; datei.read(c,i,1); iHelp11 = GetNumericValue( c ); i++;
datei.read(c,i,1); iHelp12 = GetNumericValue( c ); i++;
datei.read(c,i,1); iHelp13 = GetNumericValue( c ); i++;
datei.read(c,i,1); iHelp21 = GetNumericValue( c ); i++;
.... |
Was sich aber noch zusammenkürzen lässt.