Vytvorte jednoduchú verziu hry, podobnú hre z cvičenia, avšak namiesto jednej lopty sa na začiatku hry budú pohybovať 3 lopty zhora nadol. Lopta sa nebude odrážať, ale po dopade na spodnú hranu hracej plochy zmizne a znovu sa objaví na hornej hrane (s tou istou x súradnicou). Po trafení lopta zmizne. Ak do 5 sekúnd nebudú trafené všetky lopty, tak pribudne ďalšia lopta, potom ďalšia ....Maximálny počet lôpt na hracej ploche môže byť obmedzený.
#include "Ihrisko.h"
Ihrisko::Ihrisko(int xplocha, int yplocha,
int wplocha, int hplocha) :
Vykresovac(xplocha, yplocha, wplocha, hplocha),
aPredmet(new Predmet(aX, aY, aW, aH, 65, 65, "ball.bmp"))
{
}
Ihrisko::~Ihrisko()
{
if (aPredmet)
delete aPredmet;
}
void Ihrisko::vykresliSa(SDL_Surface *surface)
{
int farbaIhriska = SDL_MapRGB(surface->format, 0, 127, 0);
SDL_Rect rect;
rect.x = aX;
rect.y = aY;
rect.w = aW;
rect.h = aH;
SDL_FillRect(surface, &rect, farbaIhriska);
aPredmet->vykresliSa(surface);
}
bool Ihrisko::zasah(int x, int y)
{
if (aPredmet->zasah(x, y))
{
delete aPredmet;
//aPredmet = NULL;
aPredmet = new Predmet(aX, aY, aW, aH, 65, 65, "ball.bmp");
if (aPredmet)
return true;
}
return false;
}
void Ihrisko::posun()
{
aPredmet->pohniSa(aX, aY, aW, aH);
}
#include <cstdlib>
#include <ctime>
#include "Predmet.h"
const int MAXDELTA = 7;
Predmet::Predmet(int xplocha, int yplocha,
int wplocha, int hplocha, int w, int h,
const char *cestaObrazok) :
Vykresovac(0, 0, w, h)
{
srand(unsigned(time(NULL)));
aObrazok = SDL_LoadBMP(cestaObrazok);
aX = generujNahodneCislo(xplocha, xplocha + wplocha - aW);
aY = generujNahodneCislo(yplocha, yplocha + hplocha - aH);
aDeltaX = generujNahodneCislo(1, MAXDELTA) - MAXDELTA / 2;
aDeltaY = generujNahodneCislo(1, MAXDELTA) - MAXDELTA / 2;
}
Predmet::~Predmet()
{
SDL_FreeSurface(aObrazok);
}
void Predmet::vykresliSa(SDL_Surface *surface)
{
SDL_Rect rectObrazok = { 0, 0, aW, aH };
SDL_Rect rectCiel = { aX, aY, 0, 0 };
SDL_BlitSurface(aObrazok, &rectObrazok, surface, &rectCiel);
}
bool Predmet::zasah(int x, int y)
{
return aX <= x && x <= aX + aW && aY <= y && y <= aY + aH;
}
int Predmet::generujNahodneCislo(int minValue, int maxValue)
{
return rand() % (maxValue - minValue) + minValue;
}
void Predmet::pohniSa(int xplocha, int yplocha,
int wplocha, int hplocha)
{
aX += aDeltaX;
aY += aDeltaY;
if ((aX<=xplocha) || (aX +aW >=wplocha+xplocha))
aDeltaX = -aDeltaX;
if ((aY <= yplocha) || (aY +aH >=hplocha+yplocha))
aDeltaY = -aDeltaY;
aX += aDeltaX;
aY += aDeltaY;
}
nevedeli by ste to upraviť pomocou vektora alebo pola ?