IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Jednoduchá hra PingPong v C#

Zde vám ukážu základy, jak si lze jednoduše vytvořit hru v jazyce C#. Nebudete ani potřebovat nějaké rozsáhlé znalosti, žádný speciální software (snad kromě Visual Studia) a dostanete se k dobrému výsledku.

Takže můžeme začít :)

Hra má velice jednoduchý vzhled, v podstatě nemusíme nic složitě malovat. Jednoduše si vystačíme s komponenty, které nám již Visual Studio nabízí.

Za prvé potřebujeme aby jsme měli hru na Celou obrazovku, neměli žádně okraje a nebyl vidět kurzor myši. Toho docílíme třemi řádky kódu.

cursor.Hide();                  // Schová kurzor
this.FormBorderStyle = FormBorderStyle.None;    // Vymaže okraje Formu
this.Bounds = Screen.PrimaryScreen.Bounds;  // Celá obrazovka

Když to vyzkoušíme tak vidíme, že máme všechno, čeho jsme chtěli docílit. Můžeme tedy jít dál. Jako další potřebujeme samotnou hrací plochu. Do Formu vložíme Panel z Toolboxu, a po vložení vyplníme celý Form pomocí Docku v Properties Panelu. Nyní si vytvoříme pálku a míček pomocí dvou PictureBoxů. Velikosti si dejte, jaké vám vyhovují (já budu mít míček 40x40 a pálku 100x20) a nastavte jim nějakou barvu pozadí (já zvolím míček Červený a pálku černou).

Dále budeme potřebovat Timer, kterým budeme aktualizovat hrací pole a nastavíme Interval na 1 milisekundu. Pak ho po načtení Formu zapneme.

timer1.Enabled = true;  // Zapne Časovač

Pak 2x klikneme na Timer a můžeme zapisovat kód.

První si nastavíme aby se pálka pohybovala pomocí kurzoru myši. Toho docílíme že nastavíme pozici pálky na pozici kurzoru, ale chceme pohybovat jen z leva do prava a naopak, takže pouze osu X. Dále jí přesuneme více ke spodnímu okraji.

palka.Left = Cursor.Position.X - (palka.Width / 2); // Střed pálky se bude pohybovat po ose X.
palka.Top = playground.Bottom - (playground.Bottom / 10);   // pálka bude u spodního okraje

Nyní si vytvoříme 3 veřejné proměnné. speed_Top, speed_Left, score.

public int speed_top = 3;   // proměná vertikální rychlosti
public int speed_left = 3;  // proměná horizontální rychlosti
public int score = 0;       // proměná dosaženého scóre.

Tak už bychom si mohli míček rozpohybovat. Uděláme to tak že do našeho časovače (Timeru) vložíme následující kód.

micek.Left += speed_left;   // Rozpohybuje míček po ose X.
micek.Top += speed_top;     // Rozpohybuje míček po ose Y.

Když nyní spustíme program, uvidíme, že se míček pohybuje šikmo. To je tím, že "jede" zároveň do prava i dolů. Naší pálkou ovšem jen projede. Ale my potřebujeme, aby se to od pálky odrazilo.

Za prvé musíme míčku říct, kdy se vlastně s pálkou srazil.

if (micek.Bottom >= palka.Top && micek.Bottom <= palka.Bottom && micek.Right >= palka.Left && micek.Right <= palka.Right)   // Nastavíme kdy bude kolize míčku s pálkou
{}

Dále musíme určit, co má míček udělat. Chtěli bychom, aby se odrazil a odražení se je vlastně jen změna směru.

speed_top = -speed_top;     // obrátí směr míčku nahoru

Teď nám lítá míček a dokonce se odráží od pálky. Ale jelikož nemáme spoluhráče tak potřebujeme aby se nám míček odrážel zpět od stěn. Takže si nastavíme kolize se stěnami.

if( micek.Left <= playground.Left)  // Když míček narazí na levou stěnu změní horizontální směr
    speed_left = -speed_left;

if ( micek.Right >= playground.Right)   // Když míček narazí na pravou směru změní horizontální směr
    speed_left = -speed_left;

if ( micek.Top <= playground.Top)   // Když míček narazí na horní stěnu změní vertikální směr
    speed_top = -speed_top;

Už máme skoro funkční hru. Teď když vyzkoušíme, tak to funguje, ale my chceme, aby se hra zastavila, když míček spadne pod pálku - tedy když se dotkne spodní stěny hracího pole. Opět nastavíme kolizi na stěnu. A při kolizi zastavíme časovač, čímž také zastavíme hru.

if (micek.Bottom >= playground.Bottom)
 {
    timer1.Enabled = false;     // Zastavíme časovač
    this.Close();           // Vypne hru
 }

Nyní když míček skončí pod pálkou, celá hra zastaví a vypne.

To jsou základy. Poté si do hry můžete přidat Skóre, Menu, Obtížnost, různé bloky na ničení atp. Pro ukázku, jak tato hra vůbec pracuje, to ale bohatě stačí :)

Přiložil sem soubor se svou verzí, jak by to mohlo vypadat. Tato hra je tak jednoduchá, že to ani nic víc nepotřebuje :)

Samozřejmě kdyby jste měli nějaké dotazy tak pište a rád poradím, když budu znát odpověď.


Galerie

Hra byla vytvořena v roce 2015.

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 593x (48.3 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Všechny články v sekci
Zdrojákoviště C# .NET - Objektově orientované programování
Článek pro vás napsal Verquido
Avatar
Uživatelské hodnocení:
8 hlasů
.
Aktivity