Bombowiec - opis


Podrozdziały:

 

W tej grze sterujesz zrzucaniem bomb z bombowca na miasto. Jeśli idea ta powoduje u ciebie zahamowania moralne, to potraktuj tę grę jako ćwiczenia bezkrwawe - miasto jest opuszczone. Bombowiec zatacza nad miastem koła obniżając swój lot przy każdym okrążeniu. Gra kończy się zwycięstwem, jeśli uda ci się zbombardować wszystkie domy. Alternatywą jest katastrofa bombowca - ponieważ obniża on swój lot, zatem w końcu zderzy się z jednym z domów, który nie udało ci się zniszczyć w poprzednich przelotach.

Przy realizacji programu musimy zastosować inne rozwiązanie współpracy z graczem. W poprzednio opisanych grach program po prostu oczekiwał bezczynnie, aż gracz naciśnie jakiś klawisz. Tutaj tak nie można - bombowiec jest obiektem dynamicznym znajdującym się w ciągłym ruchu. Dlatego zasadniczą częścią programu będzie pętla, której kolejne obiegi wykonują się co zadaną jednostkę czasu - na przykład co 1/10 sekundy. W każdym obiegu sprawdzamy, czy gracz nacisnął jakiś klawisz. Jeśli tak, to odczytamy kod klawisza i odpowiednio zareagujemy. Jeśli nie, zostaną wykonane pozostałe zadania - ruch bombowca, spadanie bomby, wybuch budynku itp.

Sprawdzenie naciśnięcia klawisza uzyskamy przy pomocy funkcji KeyPressed, która skanuje bufor klawiatury i zwraca wartość true, jeśli znajduje się w nim kod klawisza, a false w przypadku przeciwnym. Zatem po otrzymaniu informacji o fakcie naciśnięcia klawisza, użyjemy funkcji ReadKey do odczytu jego kodu. Ponieważ dla klawiszy funkcyjnych kod należy odczytywać dwa razy, gdyż pierwszy odczyt daje w wyniku kod #0, odpowiedni fragment programu wygląda następująco:

 

...
  if KeyPressed then //sprawdzamy, czy naciśnięto klawisz
  begin
    repeat
      c := ReadKey;  //odczytujemy naciśnięty klawisz
    until c <> #0;   //to w przypadku klawisza funkcyjnego
    if c = ...       //przetwarzamy odczytany klawisz
    ...
  end;
  ...

 

Taka metoda pozwoli nam płynnie kontynuować wykonywanie obiegów pętli bez względu na to, czy użytkownik nacisnął lub nie nacisnął klawisz. Niezbędne opóźnienie dla pętli uzyskamy za pomocą procedury Delay(100).

 

 

Kolejnym problemem jest sposób reprezentacji miasta w pamięci komputera. Tak naprawdę musimy jedynie zapamiętywać wysokości poszczególnych budynków. Do tego celu nadaje się zwykła tablica liczb całkowitych. Każdy budynek będzie w osobnej kolumnie. Szerokość okienka konsoli wynosi 80 kolumn, jednakże pozostawimy puste po pięć kolumn na początku i końcu - zatem dla miasta pozostanie 70 kolumn. Budynki będą miały od 1 do 10 pięter. Trafienie bombą w budynek spowoduje wyzerowanie odpowiedniego elementu naszej tablicy. Tablica ta będzie również wykorzystywana do sprawdzenia, czy samolot uderzył w któryś z budynków. W tym celu wystarczy sprawdzić, czy dla pozycji samolotu wysokość budynku jest równa wysokości lotu. Jeśli tak, mamy katastrofę i gra oczywiście się kończy.

Przed rozpoczęciem gry tablicę należy odpowiednio zainicjować. Zrobimy to zerując wszystkie jej elementy, a następnie wypełniając komórki od 5 do 75 liczbami pseudolosowymi z zakresu od 1 do 10. Można to zrobić tak:

 

program bombowiec;
var
  miasto : array[1..80] of integer;
  i      : integer;
...
begin
  Randomize;
  ...
  for i := 1 to 80 do miasto[i] := 0;
  for i := 5 to 75 do miasto[i] := 1 + random(10);
  ...
end.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.