Hra Had v DelphiX III. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Hra Had v DelphiX III.

hra_had

28. února 2001, 00.00 | Pokračování seriálu o tvorbě hry Had - tentokrát zobrazení potravy a události klavesnice. Chcete si naprogramovat vlastní hru v DelphiX? Nechte se inspirovat!



V dnešním díle si ukážeme, jak zobrazit potravu pro hada. Jak nastavit novou pozici potravy a trochu kolem klávesnice, abychom také měli jak ovládat hada, i když ve skutečnosti ještě pořád stojí.

Zobrazení potravy

Začneme tedy zobrazením potravy. Nejprve budeme potřebovat nějaký obrázek, který si nakreslíme v malování. Jako obvykle bude mít rozměry 8x8 pixelů. Nebudu popisovat, jak vypadá, jednodušší bude, pokud se podíváte na tento obrázek:


Uložte si jej a přidejte do DXImageList1.Items. Vlastnost name nastavte na zradlo. Samozřejmě nezapomeňte na průhlednost. Dále si musíme definovat proměnnou, ve které bude uložena pozice potravy. Pojmenujeme ji např. Zradlo a bude typu TPoint (Zradlo:TPoint). Dále si vytvoříme novou proceduru KresliZradlo, ve které pouze nakreslíme obrázek potravy na správnou pozici. Kompletní procedura bude vypadat nějak takto:


Procedure TForm1.KresliZradlo;
begin
 DXImageList1.Items.Find('zradlo').Draw
 (DXDraw1.surface,(Zradlo.x*8)+2,(Zradlo.y*8)+2,0);
end;


Nastavení nové pozice potravy

Potravu však nemůžeme kreslit bez toho, abychom si nastavili její pozici. Proto si vytvoříme ještě jednu proceduru - SetNewZradlo, ve které právě nastavíme novou pozici. Princip je jednoduchý - vytvoříme novou náhodnou pozici žrádla přes random a poté budeme zkoumat, zda se náhodou nenachází v ocasu hada. Pokud ne, je vše v pořádku a pokud ano, zavoláme proceduru znovu. V proceduře není žádně ošetření, kdyby tělo hada bylo přes celý displej, a proto by v tomto případě nastala nekonečná smyčka. Zde je výpis celé procedury:


Procedure TForm1.SetNewZradlo;
var i:integer;
    nemuze:boolean;
begin
 nemuze:=false;

 Zradlo.x:=Random(18);
 Zradlo.y:=Random(10);

 for i:=0 to DelkaHadu do
  begin
   if (Zradlo.x = Had[i].x) and (Zradlo.y = Had[i].y) then
    begin
     nemuze:=true;
    end;
  end;

 if nemuze then SetNewZradlo;
end;


Nyní ještě musíme do proc. Form1.OnCreate přidat SetNewZradlo, abychom skutečně novou pozici nastavili a do proc. DXTimer1.OnTimer přidáme řádek KresliZradlo, abychom potravu také viděli (řádek vložte mezi kreslení hada a flip). Dále jsem ještě přidal tlačítko, které zavolá proc. SetNewZradlo, abychom se mohli přesvědčit, že procedura doopravdy funguje. Ve výsledném projektu samozřejmě tlačítko umažeme. Zde je již náhled na vytvořený program:


Události klávesnice

V příštím díle si povíme něco o pohybu hada, a proto si již nyní vysvětlíme, jak jej ovládat. Jistě jste uhodli, že to bude přes klávesnici. K pohybu hada si tedy vytvoříme proměnnou smer, která bude nabývat čtyř hodnot - nahoru, dolu, doprava, doleva. Zápis bude vypadat nějak takto: Smer:(nahoru,dolu,doprava,doleva);
Pro pohyb budeme používat šipky na klávesnici, a proto je dobré vědět, jak jsou označeny. Klávesy s,d,f... jsou logicky označeny s,d,f... ale pro klávesy typu F1..F12, šipky, Numlockové klávesy a všechny ostatní se používá virtuální kód (vk). A v tom je celé to kouzlo. Pro šipky bude tedy označení vk_left, vk_right, vk_up, vk_down. Pro enter to nebude vk_enter, ale vk_return (pokud vzpomínáte na atari, tak tam také nebyla klávesa enter, ale return :) Pokud byste chtěli úplný výpis všech vk, spusťte Delphi nápovědu a dejte hledat "Virtual key codes" (pokud máte Microsoft klávesnici, můžete použít i např. vk_lwin, vk_rwin nebo vk_apps. Zajímavá je také vk_noname, což je vk rezervovaný pro klávesu která ještě neexistuje.


Tedy, vytvoříme proceduru Form1.OnKeyDown ve které se to bude všechno odehrávat. Jak jsem již napsal, budeme hada ovládat pomopcí šipek, ale také přes numlockové klávesy 4,8,6, a 2. Zdrojový kód je vcelku jednoduchý, proto myslim nepotřebuje dalších komentářů.


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

   if (key = vk_left) or (key = vk_numpad4) then  // pohyb doleva
    begin
     smer:=doleva;
    end;
   if (key = vk_right) or (key = vk_numpad6) then // pohyb doprava
    begin
     smer:=doprava;
    end;
   if (key = vk_up) or (key = vk_numpad8) then // pohyb nahoru
    begin
     smer:=nahoru;
    end;
   if (key = vk_down) or (key = vk_numpad2) then // pohyb dolu
    begin
     smer:=dolu;
    end;

end;


Program můžete spustit a následně zjistit, že se při stisknutí klávesy stejně nic neděje, jelikož ještě nemáme vytvořenou proceduru pro pohyb hada. Na tu si musíte počkat do příště.

Ještě si nakonec dovolím malou poznámku. Pokud jste již vytvořili nějaký program či hru v DelphiX (a věřím, že určitě ano), klidně i teprve alfa, či betaverzi, pošlete mi ji prosím na můj e-mail, rád bych si prohlédnu všechny Vaše výtvory. Děkuji.

Poznámka redakce: pokud se chcete o své výtvory podělit s ostatními, zašlete je i nám, rádi uveřejníme odkaz či jinak zajistíme jejich propagaci.


Download
ZDE si můžete stáhnout dnes vytvořený program a jeho zdrojáky (214 kB)

Odkazy
ZDE můžete navštívit stránku hry Had, a stáhnout si aktuální verzi i se všemi vylepšeními

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: