Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Battaglia Navale - BATNAV.PAS

BATNAV.PAS

Caricato da: AndRyu
Scarica il programma completo

  1. program navalwar; { AndRyu, le navi sono da uno con possibilit… di barare }
  2. uses crt;
  3. const max=8;
  4. type dimens=1..max;
  5.      cell=array[dimens,dimens] of char;
  6. var  colp,occ:cell;
  7.      di:integer;
  8. label 1;
  9. procedure diff;
  10.           begin
  11.           repeat
  12.                 clrscr;
  13.                 write('Quale limite di spari vuoi mettere? (16/40) ');
  14.                 readln(di);
  15.           until (di>15) and (di<41)
  16.           end;
  17. procedure tab(c:cell);
  18. var i,j:integer;
  19. procedure orizz; {Sottoprocedura, trattini orizzontali}
  20. var i:integer;
  21.         begin
  22.         for i:=1 to 2*max+1 do
  23.             write(' Ä');
  24.         writeln;
  25.         end;   {Procedura Tabella}
  26.           begin
  27.           clrscr;
  28.           textcolor(green);
  29.           writeln('          BATTAGLIA NAVALE');
  30.           textcolor(yellow);
  31.           writeln;
  32.           write(' ');
  33.           for i:=1 to max do
  34.               write('  ',i,' ');
  35.           writeln;
  36.           textcolor(white);
  37.           orizz;
  38.           for i:=1 to max do
  39.               begin
  40.               textcolor(blue);
  41.               write(i);
  42.               textcolor(white);
  43.               write(' |');
  44.               for j:=1 to max do
  45.                   begin
  46.                   case c[i,j] of
  47.                        '*','Û':textcolor(red);
  48.                        'o':textcolor(3);
  49.                   end;
  50.                   write(c[i,j]);
  51.                   textcolor(white);
  52.                   write(' | ');
  53.                   end;
  54.               writeln;
  55.               end;
  56.           orizz
  57.           end;
  58. procedure baro;
  59. var ris:char;
  60.           begin
  61.           repeat
  62.                 clrscr;
  63.                 write('Sei un baro? (s/n) ');
  64.                 readln(ris);
  65.           until (ris='s') or (ris='n');
  66.           writeln;
  67.           if ris='s' then
  68.              begin
  69.              tab(occ);
  70.              readln
  71.              end
  72.           end;
  73. procedure navi(var c:cell); {Procedura Navi, assegna le posizioni}
  74. var i,j,t:integer;
  75.           begin
  76.           randomize;
  77.           t:=0;
  78.           repeat
  79.                 i:=random(max)+1;
  80.                 j:=random(max)+1;
  81.                 if c[i,j]<>'Û' then
  82.                    begin
  83.                    c[i,j]:='Û';
  84.                    t:=t+1
  85.                    end
  86.           until t=2*max;
  87.           end;
  88. procedure chiedi; {Procedura Chiedi, quale settore bombardare?}
  89. var i,j,c,t:integer;
  90.     sogg:string;
  91. label 2;
  92. procedure colrig(var n:integer; var sogg:string); {Sottoprocedura Richiesta Colonna/Riga}
  93. begin
  94.      repeat
  95.            write(sogg);
  96.            readln(n)
  97.      until (n>0) and (n<=max)
  98. end;
  99. function vinto:boolean; {Sottoprocedura di controllo Vittoria}
  100. label 1;
  101. var i,j,c:integer;
  102.     begin
  103.     c:=0;
  104.     vinto:=false;
  105.     for i:=1 to max do
  106.         for j:=1 to max do
  107.          if (occ[i,j]='Û') and (colp[i,j]='*') then
  108.             begin
  109.             c:=c+1;
  110.             if c=max*2 then
  111.                begin
  112.                vinto:=true;
  113.                goto 1;
  114.                end
  115.             end;
  116.   1:end;
  117. procedure colpito(a,b:integer); {Sottoprocedura di controllo Colpito}
  118.         begin
  119.         if occ[a,b]='Û' then
  120.            begin
  121.            colp[a,b]:='*';
  122.            write('Hai colpito una nave!');
  123.            end
  124.         else
  125.            begin
  126.            colp[a,b]:='o';
  127.            write('Hai fatto un buco nell''acqua!');
  128.            end;
  129.         readln;
  130.         end;
  131.           begin   {Procedura Chiedi!}
  132.           t:=0;
  133.           repeat
  134.         2:tab(colp);
  135.           writeln;
  136.           writeln('In quali cordinate vuoi sparare? (tentativi rimasti=',di-t,') ');
  137.           sogg:='Colonna: ';
  138.           colrig(j,sogg);
  139.           sogg:='Riga: ';
  140.           colrig(i,sogg);
  141.           writeln;
  142.           if (colp[i,j]='o') or (colp[i,j]='*') then
  143.              begin
  144.              writeln('Hai gi… colpito questa cella!');
  145.              readln;
  146.              goto 2;
  147.              end
  148.           else
  149.              colpito(i,j);
  150.           t:=t+1;
  151.           until vinto or (t=di);
  152.           writeln;
  153.           if vinto then
  154.              writeln('Hai vinto!! Hai effettuato ',t,' spari.')
  155.           else
  156.              writeln('Hai perso!! Hai effettuato ben ',t,' spari.');
  157.           writeln;
  158.           write('Premi invio per vedere la soluzione.');
  159.           readln;
  160.           tab(occ);
  161.           readln
  162.           end;
  163.         { ---->>> Main <<<---- }
  164. begin
  165.      diff;
  166.      navi(occ);
  167.      baro;
  168.      chiedi
  169. end.