Hra ESCAPA
Založení nového projektu
Spustíme Visual Studio
File - New - Project...
Visual C++ - Windows Forms Application - vybereme adresář - pojmenujeme HraEscapa
Vytvoříme uživatelské rozhraní hry
Formuláři nastavíme vlastnost Text na Escapa, Size 500; 300
Na Panelu nástrojů (ToolBox) vybereme ovládací prvky (Controls), postupně přetáhneme na formulář a nastavíme jim vlastnosti (Properties).
ovládací prvek |
vlastnost |
hodnota |
Panel |
Name
BackColor
Dock
|
pnlHraciPlocha
White
Top
|
Button |
Name
BackColor
Size
Text |
btnHrac
LightBlue
40;40
Vámi zvolený text |
Button |
Name
Text
Anchor |
btnStart
START
Bottom, Left |
Timer |
Enabled
Interval |
false
100 |
Spustíme aplikaci a vyzkoušíme, že se změnou velikosti okna se hrací plocha bude měnit a vzdálenost od dolního okraje formuláře zůstane stejná (díky nastavení vlastnosti Anchor).
Hráči pnlHrac přidáme reakci na pohyb myši MouseMove
- Pokud je stisknuto pravé tlačítko myši posuneme tlačítkem btnHrac tak, aby střed tlačítka byl v místě kurzoru myši.
- Po změně umístění tlačítka testujeme, zda jsme nenarazili do některé ze 4 stěn hrací plochy.
- Pokud ano, vypíšeme hlášku a
- posuneme tlačítkem zpět doprostřed hrací plochy.
private: System::Void btnHrac_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{ //pohyb pouze při stisknutém levém tlačítku
if (e->Button == System::Windows::Forms::MouseButtons::Left)
{
btnHrac->Left += e->X - btnHrac->Width/2;
btnHrac->Top += e->Y - btnHrac->Height/2;
if (btnHrac->Left < 0||
btnHrac->Right > pnlHraciPlocha->Width ||
btnHrac->Top < 0 ||
btnHrac->Bottom > pnlHraciPlocha->Bottom)
{
MessageBox::Show( "Prohrál jsi... ha ha ha ha" );
btnHrac->Left = pnlHraciPlocha->Width /2 - btnHrac->Width/2;
btnHrac->Top = pnlHraciPlocha->Height /2 - btnHrac->Height/2;
}
}
}
Vytvoříme nepřátele
- Do konstruktoru přidáme kód pro vytvoření 4 nepřátel
for (int i = 0; i < 4; i++)
{
Button ^tlacitko = gcnew Button();
tlacitko=(gcnew System::Windows::Forms::Button());
tlacitko->Size = System::Drawing::Size(50,50);
tlacitko->Left = 50 + (i / 2) * pnlHraciPlocha->Width /2;
tlacitko->Top = 50 + (i % 2) * pnlHraciPlocha->Height / 2;
tlacitko->BackColor=System::Drawing::Color::Blue;
pnlHraciPlocha->Controls->Add(tlacitko);
}
Nepřátele rozpohybujeme
- Do třídy přidáme deklaraci směrů pohybu
int *smerX; // pole na haldě
int *smerY;
- Pole inicializujeme v konstruktoru (jak se budou nepřátele pohybovat)
smerX = new int[4];
smerY = new int[4];
smerX[0] = 5; smerX[1] = -5;smerX[2]= 5; smerX[3]= -5;
smerY[0] = 5; smerY[1] = 5; smerY[2]=-5; smerY[3]= -5;
- Přidáme kód události Tick časovače timer1 - rozpohybujeme hráče
Button^ tl; for (int i = 0; i < 4; i++)
{
tl = (System::Windows::Forms::Button^)
pnlHraciPlocha->Controls[i+1];
tl->Left += (int)smerX[i];
if (tl->Left > pnlHraciPlocha->Width -tl->Width || tl->Left < 0)
smerX[i] = -(int)smerX[i];
tl->Top += (int)smerY[i];
if (tl->Top > pnlHraciPlocha->Bottom - tl->Height ||tl->Top < 0)
smerY[i] = -(int)smerY[i];
}
- Přidáme reakci na klik tlačítka btnStart (rozběhnutí - zastavení)
timer1->Enabled = !timer1->Enabled;
- Přidáme kontrolu kolizí do události Timer
int delka, vyska;
if (tl->Left < btnHrac->Left)
delka = btnHrac->Left + btnHrac->Width - tl->Left;
else delka = tl->Left + tl->Width - btnHrac->Left;
if (tl->Top < btnHrac->Top)
vyska = btnHrac->Top + btnHrac->Height - tl->Top;
else vyska = tl->Top + tl->Height - btnHrac->Top;
if (delka < btnHrac->Width + tl->Width &&
vyska < btnHrac->Height + tl->Height)
{
timer1->Enabled =false;
}
Vytvoříme metodu Prohra
Metodu budeme volat v případě kolize hráče s nepřítelem nebo naražení hráčem na hranu hrací plochy
private: void Prohra()
{
timer1->Enabled =false;
MessageBox::Show("Prohrál jsi... ha ha ha ha");
btnHrac->Left = pnlHraciPlocha->Width /2 - btnHrac->Width/2;
btnHrac->Top = pnlHraciPlocha->Height /2 - btnHrac->Height/2;
btnStart->Focus();
}