rafal92909 Posted November 3, 2010 Report Share Posted November 3, 2010 witam wszystkich napisałem oto taka grę w statki tylko chciałem żeby po skończonej grze zawsze zapisywał się wynik do pliku tekstowego a przy uruchomieniu gry pytał czy wczytać grę czy zagrać nowa. I w sumie wszystko już działa tylko jest problem z tym zapisywaniem i wczytywaniem... program p1; uses crt; type T2W=array [0..11,0..11] of integer; var x,y,i,j,w:integer; Tk,Tg:T2W; n:char; p,p2:file of integer; procedure ZERUJ(var T:T2W); var i,j:integer; begin for i:=0 to 11 do for j:=0 to 11 do T[i,j]:=0; end; procedure PISZT2(m,n:integer;T:T2W); var i,j:integer; begin writeln(); for i:=1 to n do begin for j:=1 to m do begin case T[i,j] of 1..4: write('x'); 7: begin textcolor(green); write('-'); textcolor(white); end; 8,0:write('.'); 5: begin textcolor(red); write('*'); textcolor(white); end; end; end; writeln(); end; end; procedure los4(var T:T2W); var k,x,y,i,j:integer; begin k:=random(2); if k=0 then begin x:=random(7)+1; y:=random(10)+1; for i:=x-1 to x+4 do for j:=y-1 to y+1 do T[i,j]:=8; for i:=0 to 3 do T[x+i,y]:=4; end else begin x:=random(10)+1; y:=random(7)+1; for i:=x-1 to x+1 do for j:=y-1 to y+4 do T[i,j]:=8; for i:=0 to 3 do T[x,y+i]:=4; end; end; procedure los3(var T:T2W); var k,x,y,i,j:integer; begin k:=random(2); case k of 0:begin repeat x:=random(8)+1; y:=random(10)+1; until (T[x,y]=0) and (T[x+1,y]=0) and (T[x+2,y]=0); for i:=x-1 to x+3 do for j:=y-1 to y+1 do T[i,j]:=8; for i:=0 to 2 do T[x+i,y]:=3; end; 1:begin repeat x:=random(10)+1; y:=random(8)+1; until (T[x,y]=0) and (T[x,y+1]=0) and (T[x,y+2]=0); for i:=x-1 to x+1 do for j:=y-1 to y+3 do T[i,j]:=8; for i:=0 to 2 do T[x,y+i]:=3; end; end; end; procedure los2(var T:T2W); var k,x,y,i,j:integer; begin k:=random(2); case k of 0:begin repeat x:=random(9)+1; y:=random(10)+1; until (T[x,y]=0) and (T[x+1,y]=0); for i:=x-1 to x+2 do for j:=y-1 to y+1 do T[i,j]:=8; for i:=0 to 1 do T[x+i,y]:=2; end; 1:begin repeat x:=random(10)+1; y:=random(9)+1; until (T[x,y]=0) and (T[x,y+1]=0); for i:=x-1 to x+1 do for j:=y-1 to y+2 do T[i,j]:=8; for i:=0 to 1 do T[x,y+i]:=2; end; end; end; procedure los1(var T:T2W); var x,y,i,j:integer; begin repeat x:=random(10)+1; y:=random(10)+1; until (T[x,y]=0); for i:=x-1 to x+1 do for j:=y-1 to y+1 do T[i,j]:=8; T[x,y]:=1; end; begin randomize; textcolor(white); writeln('Chcesz wczytac zapisana gre? T/N'); readln(n); case n of 'n','N':begin clrscr; writeln('Tablica gracza 1: '); ZERUJ(Tg); los4(Tg); los3(Tg); los3(Tg); los2(Tg); los2(Tg); los2(Tg); los1(Tg); los1(Tg); los1(Tg); los1(Tg); writeln(); writeln(); writeln('Tablica komputera: '); ZERUJ(Tk); los4(Tk); los3(Tk); los3(Tk); los3(Tk); los2(Tk); los2(Tk); los2(Tk); los1(Tk); los1(Tk); los1(Tk); los1(Tk); repeat clrscr; writeln('Tablica gracza 1: '); PISZT2(10,10,Tg); writeln(); writeln('Tablica komputera: '); writeln(); PISZT2(10,10,Tk); writeln(); writeln('Podaj 1 wspolrzedna'); readln(y); writeln('Podaj 2 wspolrzedna'); readln(x); case Tk[x,y] of 1..4:Tk[x,y]:=5; 8,0:Tk[x,y]:=7; end; x:=random(9)+1; y:=random(9)+1; case Tg[x,y] of 1..4:Tg[x,y]:=5; 8,0:Tg[x,y]:=7; end; writeln('Tablica gracza 1: '); PISZT2(10,10,Tg); writeln('Tablica komputera: '); writeln(); PISZT2(10,10,Tk); writeln ('Czy chcesz jeszcze raz? T/N'); n:=upcase(readkey); until (upcase(n)='N'); end; 't','T':begin clrscr; assign(p,'C:\statkig.txt'); reset(p); for i:=1 to 10 do begin for j:=1 to 10 do begin read(p,w); Tg[i,j]:=w; end; end; close(p); assign(p2,'C:\statkik.txt'); reset(p2); for i:=1 to 10 do begin for j:=1 to 10 do begin read(p,w); Tk[i,j]:=w; end; end; close(p2); repeat clrscr; writeln('Tablica gracza 1: '); PISZT2(10,10,Tg); writeln(); writeln('Tablica komputera: '); writeln(); PISZT2(10,10,Tk); writeln(); writeln('Podaj 1 wspolrzedna'); readln(y); writeln('Podaj 2 wspolrzedna'); readln(x); case Tk[x,y] of 1..4:Tk[x,y]:=5; 8,0:Tk[x,y]:=7; end; x:=random(9)+1; y:=random(9)+1; case Tg[x,y] of 1..4:Tg[x,y]:=5; 8,0:Tg[x,y]:=7; end; writeln('Tablica gracza 1: '); PISZT2(10,10,Tg); writeln('Tablica komputera: '); writeln(); PISZT2(10,10,Tk); writeln ('Czy chcesz jeszcze raz? T/N'); n:=upcase(readkey); until (upcase(n)='N'); end; end; assign(p,'C:\statkig.txt'); rewrite(p); for i:=1 to 10 do begin for j:=1 to 10 do begin read(w); Tg[i,j]:=w; write(p,w); end; writeln(); end; close(p); assign(p2,'C:\statkik.txt'); rewrite(p2); for i:=1 to 10 do begin for j:=1 to 10 do begin read(w); Tk[i,j]:=w; write(p,w); end; writeln(); end; close(p2); end. czy mógłby ktoś "rzucić okiem" i powiedzieć co jest nie tak ze nie chce mi poprawnie zapisać do pliku? Link to comment Share on other sites More sharing options...
Adam27 Posted November 3, 2010 Report Share Posted November 3, 2010 Po pierwsze: naucz się pisać kod tak, żeby dało się go zrozumieć - rób przynajmniej wcięcia. Po drugie: po co wklejasz cały program, skoro wiesz, że problem jest tylko z zapisywaniem do pliku? Po trzecie: ustawiłeś sobie breakpointa i sprawdziłeś, czy wszystko idzie tak jak powinno? Jak sam odkryjesz błąd, więcej się nauczysz. Po czwarte: Pascal nie jest do pisania gier. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link to comment Share on other sites More sharing options...
jozekkg Posted November 4, 2010 Report Share Posted November 4, 2010 Proponuję stworzyć jeden plik, w którym zapiszesz tablice TK i TG. var p : file of T2W; begin {...} write(p,tk); write(p,tg); {...} end. ; Jeszcze tylko jedna uwaga - Zawsze mnie uczono, że rozszerzenie .txt jest zarezerwowane dla plików tekstowych. No ale ja już wapniak jestem Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.