Skocz do zawartości

[Pascal] Problem z programem (gra)


foxu

Polecane posty

Witam! mam pewien problem z programem poniżej pracuje na Turbo Pascal 7 lecz przy kompilacji wyskakuje mi "Cannot run a unit", kiedy wstawiam zamiast "unit" - "program" widnieje Error: begin excepted

Jest ktoś wstanie pomóc? Z góry dziekuję!

 

 

unit Gra;

interface
 uses
   crt, dos;

 type
   _gracz = record
            nazwa: string[10];
            slowo: string[20];
            ilePkt: Integer;
          end;


 procedure GraSlowka;
 procedure clrscr;
 function dopiszWynikDoPliku (g1, g2: _gracz): String;
 function czyPoprawne(slowo: string): Boolean;
 function gramy: String;


implementation

(* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *)

 procedure clrscr;
 var i: integer;
 begin
   for i:=0 to 50 do writeln;
 end;

(* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *)

function dopiszWynikDoPliku (g1, g2: _gracz): string;
var
  plik: Text;
  Err: integer;
  tekst, pk1, pk2: string;
begin
  tekst := '';
  Assign(plik, 'wynik.txt');
  {$I- }
  Reset(plik);
  Err := IOResult;
  {$I+ }
  if {plik istnieje}
    Err = 0
  then
    Append(plik)
  else
    Rewrite(plik);
  str (g1.ilepkt, pk1);
  str (g2.ilepkt, pk2);
  tekst := g1.nazwa+ ' ('+ pk1 + ') - '+ g2.nazwa+ ' (' + pk2 + ')';
  writeln(plik, tekst);
  close(plik);
  dopiszWynikDoPliku := tekst;
end;

(* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *)

 function czyPoprawne(slowo: string): Boolean;
 var
   ok: Boolean;
   i: integer;
 begin
   i := 1;
   ok := length(slowo)>2;
   while ok and (i<=length(slowo))
   do
     begin
       ok := (slowo[i] in ['a'..'z']) or (slowo[i] in ['A'..'Z']);
       inc(i);
     end;
   czyPoprawne := ok;
 end;

(* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *)

 function gramy: String;
 var
   g: array [0..1] of _gracz;
   nazwa: string[10];
   znak, lit1, lit2, litakt: char;
   kontyn, pierwsze, slowoOk: Boolean;
   nrg: integer; {numer aktywnego gracza}
 begin
   znak := 't';
   nrg := 0;

   write('Podaj nazwe pierwszego gracza: ');
   readln(nazwa);
   if nazwa = '' then nazwa := 'Gracz 1';
   g[0].nazwa := nazwa;
   g[0].slowo := '';
   g[0].ilePkt := 0;

   write('Podaj nazwe drugiego gracza: ');
   readln(nazwa);
   if nazwa = '' then nazwa := 'Gracz 2';
   g[1].nazwa := nazwa;
   g[1].slowo := '';
   g[1].ilePkt := 0;

   writeln;
   lit1 := '0';
   lit2 := '0';
   litakt := '0';
   kontyn := true;
   pierwsze := true;
   while kontyn do
   begin
     repeat
       begin
         slowoOk := false;
         while not slowoOk
         do
           begin
             write('* ', g[nrg].nazwa, ': ');
             readln(g[nrg].slowo);
             slowoOk := czypoprawne(g[nrg].slowo);
             if not slowoOk
             then writeln('Blad. Podane slowo jest niepoprawne.');
           end;
         litakt := g[nrg].slowo[1];
         if not ((litakt = lit1) or (litakt = lit2) or pierwsze)
         then writeln('Blad. Slowo powinno zaczynac sie na litere: ', lit1, ' lub ', lit2, '.');
       end
     until ((litakt = lit1) or (litakt = lit2)) or pierwsze;
     {spytanie drugiego gracza o akceptacje }
     writeln;
     writeln(g[nrg].nazwa, ' podal slowo: ', g[nrg].slowo);
     write('Zaakceptowac? [Tak/Nie/Koniec]: ');
     readln(znak);
     while not (znak in ['t', 'T', 'n', 'N', 'k', 'K'])
     do begin
       writeln;
       writeln('Nieprawidlowa opcja; wpisz t/T jesli akceptujesz slowo, wpisz n/N jesli nie akceptujesz;');
       write('Jesli chcesz zakonczyc gre wpisz k/K: ');
       readln(znak);
     end;
     if (znak = 't') or (znak = 'T')
     then {slowo zaakceptowane}
       begin
         if pierwsze then pierwsze := false; {aby nie sprawdzac poprawnosci pierwszego slowa}
         inc(g[nrg].ilePkt); {dodanie pktu pierwszemu}
         {zmiana pierwszej i ostatniej litery}
         lit1 := g[nrg].slowo[1];
         lit2 := g[nrg].slowo[length(g[nrg].slowo)];
         dec(nrg);
         nrg := abs(nrg);
       end
     else if (znak = 'n') or (znak = 'N')
     then {slowo odrzucone}
       begin
         inc(g[abs(nrg-1)].ilePkt); {dodanie pktu drugiemu}
       end
     else if (znak = 'k') or (znak = 'K')
     then
       begin
         kontyn := false;
       end;
     writeln;
   end; {koniec rozgrywki}
   gramy := dopiszWynikDoPliku(g[0], g[1]);
 end;


(* --- * --- * --- * --- * --- * --- * --- * --- * --- * --- * --- *)

 procedure GraSlowka;
 var
   kontyn: Boolean;
   opcja: char;
   wynik: String;
 begin
   wynik := '';
   kontyn := true;
   while kontyn do
   begin
     writeln('***   Wybierz akcje:   ***');
     writeln('1 - Nowa gra');
     writeln('2 - Wyswietl ostatni wynik');
     writeln('3 - Zakoncz');
     write('wybor: ');
     readln(opcja);
     writeln;
     if opcja = '1'
     then
       begin
         clrscr;
         wynik := gramy;
       end
     else
       if opcja = '2'
       then
         begin
           if wynik = ''
           then writeln('Brak wynikow - jeszcze nie odbyla sie zadna rozgrywka.')
           else
             begin
                writeln('***   Wynik ostatniej rozgrywki:   ***');
                writeln(wynik);
             end;
             readln;
         end
       else
         if opcja = '3'
         then kontyn := false
         else
           begin
             writeln('Blad! Nieznana opcja!');
             readln;
           end;
     clrscr;
   end;
 end;

end.

Link do komentarza
Udostępnij na innych stronach

Wejdź sobie na pierwszy lepszy kurs Pascala i poczytaj podstawy, bo Pascal to nie Delphi, a z tego, co tu widzę, to skopiowałeś kod z Delphi. Najważniejsze błędy:

* unitów się nie kompiluje, tylko programy

* nie używaj słówek "interface" i "implementation", zamiast "implementation" wpisz "begin"

* procedury i funkcje definiuje się przed słówkiem "begin" bezpośrednio przy ich deklaracji

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

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

×
×
  • Utwórz nowe...