saper

SAPER - komputerowa gra, napisana w 1981 roku, polegająca na odkrywaniu pól na planszy w taki sposób, aby nie trafić na minę. Na każdym odkrytym polu napisana jest liczba min, które stykają się z odkrytym polem. I te proste zasady sprawiają, że gra stała się moim ulubionym sprawdzianem ze sprawnego i logicznego myślenia. Jednak oryginalną grę dostępną w systemach Windows da się oszukać! Aby zrobić z niej sprawdzian, musiałem napisać Sapera od nowa. W wersji dla Windows, to 1500 wierszy kodu i 30000 znaków.

Mój Saper „robi” dokładnie to samo, co oryginalny Saper, ale pozbawiony jest różnego rodzaju "ułatwień". Najważniejszy jest moduł, za pomocą którego uczeń pisze sprawdzian i wystawiona zostaje ocena.

Pierwsza wersja powstała w 1995 roku i została napisana w Turbo Pascalu na systemy MSDOS, a kolejne powstawały już w Borland Delphi na systemy MS Windows.

Przykładowy fragment programu odpowiada za losowe stawianie min i opisywanie wszystkich pól planszy

{losowanie ułożenia min}
procedure minuj(k,w,m:byte);
var
  x,y,i:byte;
begin
  randomize;
  for i:=1 to m do
    begin {tyle losuje aż trafi na puste pole}
      repeat
        x:=random(k);
        y:=random(w);
      until tablica[x,y]<>9;
      tablica[x,y]:=9;
    end;
end;

{opisanie pól niezaminowanych cyframi 0..8}
procedure opisz_miny(k,w:byte);
const
  sx:array[1..8] of shortint =(+1,+1,+1, 0,-1,-1,-1, 0);
  sy:array[1..8] of shortint =(+1, 0,-1,-1,-1, 0,+1,+1);
var
  x,y,i:byte;

  function czy_pole(x,y:byte):boolean;
  begin
    if (x<0) or (x>k-1) or
       (y<0) or (y>w-1)
      then czy_pole:=false
      else czy_pole:=true;
  end;

begin
  for x:=0 to k-1 do
    for y:=0 to w-1 do
      if tablica[x,y]<>9 then
        for i:=1 to 8 do
          if czy_pole(x+sx[i],y+sy[i]) then
            {jeśli obok pola mina to zwiększamy tablicę o jeden}
            if tablica[x+sx[i],y+sy[i]]=9 then
              inc(tablica[x,y]);
end;

Cały kod programu TUTAJ Saper do pobrania TUTAJ

Wacław Libront