Skocz do zawartości

[PASCAL] Zapisywanie do pliku - Gra w statki


rafal92909

Polecane posty

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...