logo2
Fizyka Chemia Matematyka strona główna   FIZYKA ZADANIA WZORY TEORIA ROZWIĽZANIA ZADAŃ   FIZYKA GIMNZAJUM ZADANIA WZORY TEORIA   CHEMIA ZADANIA WZORY TEORIA ROZWIĽZANIA ZADAŃ   MATEMATYKA WZORY ZADANIA ROZWIĽZANIA ZADAŃ   HISTORIA HISTORIA W PIGUŁCE NA TELEFON   JĘZEYK POLSKI EPOKI LITERACKIE   MODELARSTWO SZKUTNICZE SZKUTNICTWO ŻAGLOWCE HISTORYCZNE   TWORZENIE GIER 2D W DELPHI  

 
Tworzenie gier: SAPER
 
saper tworzenie gier  tworzenie gier
Pobierz kod SAPER

Opisywana gra została utworzona w Delphi7. Zasady gry są znane i myślę, że nie trzeba ich przytaczać. Najciekawszym elementem gry z punktu widzenia oprogramowania jest odsłanianie niezaminowanych pól.
saper tworzenie gier
 
Przygotowanie formatki
 
Formatka powinna zawierać komponenty:
 


 
saper tworzenie gier 2
 
Opis klasy TPlansza
 

 
Czytelniku, jeżeli nie znasz programowania obiektowego, to masz kłopot. Tego musisz nauczyć się sam, czy to z książki, czy z kursów. Polecam forum www.unit1.pl
 
Deklaracja klasy znajduje się w dołączonym kodzie do artykułu tu jedynie opiszę wybrane jej metody
 
constructor Create(AOwner:TComponent;AParent:TWinControl;ALeft,ATop:integer;
ABMP:TBitmap;AColor:TColor);virtual;

 
Tym konstruktorem tworzymy obiekt TPlansza który jest zmodyfikowanym potomkiem TImage . Podczas tworzenia podmieniamy standardowe metody obsługi kliknięcia i zwolnienia klawisza myszki. Konkretnie robimy to tu:
 
constructor TPlansza.Create(AOwner:TComponent;AParent:TWinControl;ALeft,ATop:integer;ABMP:TBitmap;AColor:TColor);
begin
inherited Create(AOwner);
{...}
Parent:=AParent;
OnMouseDown:=MouseDown;
OnMouseUp :=MouseUp;
{...}
end;

 
Procedury MouseDown i MouseUp oprogramowujemy pod kątem akcji związanych z grą i nie będę tu ich opisywać, w kodzie programu znajduje się komentarz do wybranych linii. Podczas tworzenia obiektu TPlansza tworzymy zmienną bmp typu TBitmap. Zmienna ta będzie przechowywać pobrane obrazy klatek pól, min. W momencie gdy cała plansza zostanie narysowana to wyświetlimy ją na ekranie procedurą TPlansza.RysujPlansze w przypadku rozpoczynania rozgrywki. Podczas trwania gry stan planszy zmienia się, gdy klikamy myszką w określony obszar. Naturalnym pomysłem jest zmiana wyglądu planszy tylko w tym obszarze. W kodzie programu znajdziesz Czytelniku procedurę BitBlt. Użycie tej procedury pozwala wkleić fragment bitmapy w określony obszar. Skoro TPlansza jest potomkiem TImage wykorzystamy to tak
 
przykładowo:
 
BitBlt(Picture.Bitmap.Canvas.Handle,k*KafelW,w*KafelH,KafelW,KAfelH,BMP.Canvas.Handle,32,0,srcCopy);

 
dla
 
k:=3;
w:=4;
KafelW:=16;
KafelH:=16;

 
Kafel obszar x:=3*16= 48, y:=4*16=64 zostanie wklejony fragment bitmapy metoda srcCopy z pozycji x:=32, y:=0;
 
saper tworzenie gier 3
 
Następnie należy odświeżyć stan planszy- czyli nasz obraz. Komponent TImage posiada metodę odświeżająca rysowanie- Repaint. I to jest cała tajemnica rysowania. Nie przerysowujemy całej planszy gry a jedynie ten obszar, w którym doszło do zmiany grafiki. To podejście ma znaczenie przy dużych światach gry.
 
Losowe budowanie planszy
 
Kod programu zawiera tablicę plansz typu: początkujący, średnio zaawansowany, ekspert
 
Mapa:array[0..2,0..2]of byte=
((10,10,10),
(16,16,40),
(30,16,99)
);

 
Przykładowo poziom ekspert to (30,16,99) czyli: 30 kolumn, 16 wierszy i 99 min. Teraz jedynie należy wylosować pozycję min i zapamiętać wynik w odpowiedniej kolumnie i wierszu. Cały układ wylosowanej planszy pamiętany jest w tej tablicy:
 
PoleMinowe:array of array of tKafel;
 
gdzie tKafel to typ rekordowy
 
tKafel=record
zaminowane:boolean;
sprawdzone:boolean;
StanPola:tStanPola;
end;

 
Losowanie min odbywa się
 
//losuj miny
wylosowano:=0;
while wylosowano<Mapa[ord(tPoziom(fPoziom)),2]do begin
k:=Random(Mapa[ord(tPoziom(fPoziom)),0]);
w:=Random(Mapa[ord(tPoziom(fPoziom)),1]);
if not PoleMinowe[w,k].zaminowane then begin
inc(wylosowano);
PoleMinowe[w,k].zaminowane:=true;
end;
end;

 
Tablica PoleMinowe[w,k] przechowuje informacje o stanie pola związanego z miną i nie decyduje o rysowaniu planszy w sposób bezpośredni. Plansza wyjściowo zawsze jest rysowana z jednego elementu graficznego

 
gry/saper/saper5
 
który jest wycinany z poniższego graficznego zasobu

 
saper tworzenie gier 4
 
W zależności jak toczy się gra na plansze są odpowiednio wklejane inne fragmenty zasobu ja do tego celu użyłem wcześniej wymienionej procedury BitBlt
 
W tej tablicy również dzieje się rozgrywka na zasadzie pamiętania i sprawdzania stanu pola. Aby odczytać, w którym polu kliknięto wystarczy współrzędne kursora myszy odpowiednio podzielić przez szerokość lub wysokość kafla. Kolumnę odczytamy
 
x div 16 a wiersz y div 16.
 
Wynik sprawdzenia stanu pola decyduje o losach gry i odbywa się to w tym zdarzeniu
 
procedure TPlansza.MouseDown(Sender:TObject; Button: TMouseButton; Shift: TShiftState;X, Y: Integer);
 
Proszę sprawdzić w kodzie programu.
 
Odkrywanie obszaru niezaminowanego
 
Każde wewnętrzne pole gry ma po ośmiu sąsiadów, pola skrajne odpowiednio mniej. W grze należy sprawdzić z iloma minami sąsiaduje dane pole. Sąsiadów danego pola możemy przeglądać na przykład zgodnie z ruchem wskazówek zegara odpowiednio przesuwając indeks wiersz i kolumny względem indeksu aktualnego pola. Skoki indeksów wygodnie jest zapisać w dwuwymiarowej tablicy
 
const kierunek:array[0..7,0..1] of ShortInt= ((-1,-1),(0,-1),( 1,-1), (-1, 0), ( 1, 0), (-1, 1),(0, 1),( 1, 1));

 
Funkcji, która to wykonuje
 
function TPlansza.IleMinSasiednich(aK,aW:integer):byte;
 
Wynikiem jej działania jest ilość min z którymi sąsiaduje dane pole. Jednocześnie zostaje podjęta decyzja o zmianie koloru czcionki. Oczywiście wynik jej działania ma wpływ na odkrywanie obszaru niezaminowanego.
 
Ta procedura
 
procedure TPlansza.OdkryjPustePola(aK,aW,n:integer);
 
jest odpowiedzialna za odkrywanie terenu i wywoływana jest rekurencyjnie. Proszę prześledzić ciało tej procedury w dołączonym źródle.
 
Koniec
 

Nowosć

Układ okresowy pierwistków chemicznych
Układ okresowy  na telefon, tablet, smartfon
Darmowa aplikacja
Okręty- bitwa morska
okręty gra sieciowa
Darmowa aplikacja na Androida
Kalkulator jednostek fizycznych
przelicznik jednostek fizycznych  na telefon, tablet, smartfon
Darmowa aplikacja
Znaki drogowe.
znaki drogowe na telefon, tablet, smartfon
Darmowa aplikacja na Androida
Saper (512x512 pól)
Saper (512x512 pól)
Darmowa gra logiczna
The Friends of Mine
The Friends of Mine
Darmowa gra logiczna

MACHO. KAMIENNA LEGENDA
MACHO. KAMIENNA LEGENDA game for android
MACHO. STONE LEGEND
Game 2d for Android

Geometria. Wzory
geometri kalkulator wzory figur bryl

Alkomat
Alkomat na androida
Zobacz obliczenia zadań:
Zbiór zadań z fizyki K Chyla Zbiór zadań z fizyki 1 W Mroszczyk, J. Salach
Zbiór zadań z chemii zakres podstawowy K Pazdro Zbiór zadań z chemii zakres rozszerzony K Pazdro
 

epomoce.pl
Fizyka
Fizyka- zadania 1
Fizyka- zadania 2
Zadania dostęp www
Fizyka- wzory
Fizyka- teoria
Chemia
Zadania zak. roz.
Zadania zak. podst.
Zadania dostęp www
Chemia-teoria

Matematyka
Język polski
Historia (pigułka)
Historia (rozszerzona)
Fizyka- gimnazjum
Fizyka zadania- gimnazjum
Fizyka- gimnazjum teoria
Znaki drogowe
 
Matematyka wzory zadania gimnazjum
programowanie
koga
grafika2D


 


2008-2012 ©www.ePomoce.pl

FIZYKA, CHEMIA, MATEMATYKA, HISTORIA, JĘZYK POLSKI. Rozwiazania zadań z fizyki, rozwiazania zadań z chemii, zadania z fizyki, zadania z chemii