Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací

Jednoduchá hra PingPong v C#

C# .NET Objektově orientované programování Zdrojákoviště Jednoduchá hra PingPong v C#

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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ženo 380x (48.3 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Hru pro vás napsal Verquido
Avatar
Jak se ti líbí článek?
8 hlasů
Autor se věnuje programování a webům.
Aktivity (2)

 

 

Komentáře
Zobrazit starší komentáře (21)

Avatar
Verquido
Redaktor
Avatar
Verquido:29.10.2015 20:56

Teď nějak nechápu, tu milisekundu ještě tisícem? :D to nevím, ale je to možný :D

Odpovědět 29.10.2015 20:56
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
nalimleinad
Člen
Avatar
Odpovídá na Verquido
nalimleinad:29.10.2015 20:58

Přesně tak jsem to myslel, aby jsi z toho měl mikrosekundu :D Ale říkám, jen hádám :P

 
Odpovědět 29.10.2015 20:58
Avatar
Verquido
Redaktor
Avatar
Odpovídá na nalimleinad
Verquido:29.10.2015 21:01

Někdy to vyzkouším :D

Odpovědět  +2 29.10.2015 21:01
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Neaktivní uživatel:12.12.2016 18:30

Všetko som urobil správne a stále to nefunguje :(

Odpovědět 12.12.2016 18:30
Neaktivní uživatelský účet
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Verquido:13.12.2016 7:48

Tak tam máš někde možná nějakou chybičku. Co ti přesně nejde?

Odpovědět 13.12.2016 7:48
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Verquido
Neaktivní uživatel:13.12.2016 8:15

Ked spustím (f5) tak sa mi tam zobrazí len palka a lopta a nedá sa s nou hýbať

Odpovědět 13.12.2016 8:15
Neaktivní uživatelský účet
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Verquido:15.12.2016 7:49

A máš přidaný a zapnutý časovač? Pošli kód :)

Odpovědět 15.12.2016 7:49
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Neaktivní uživatel:15.12.2016 8:37

Mám ho pridaný aj interval nastavnený . A zapnutý to myslíš ...?

Odpovědět 15.12.2016 8:37
Neaktivní uživatelský účet
Avatar
Verquido
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Verquido:16.12.2016 16:20

jo, jak říkám pošli kód a třeba z toho něco vyčtu :)

Odpovědět 16.12.2016 16:20
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Anastázia Pook:2. prosince 16:26

Chcela som sa spýtať, že ako zobrazim ten naprogramovany kod? Keď som si to stiahla tak ide to, len potrebovala by som ten kód.

 
Odpovědět 2. prosince 16:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 31. Zobrazit vše