Anonymní profil tomas147 – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil tomas147 – Programujte.comAnonymní profil tomas147 – Programujte.com

 

Příspěvky odeslané z IP adresy 193.87.93.–

tomas147
C / C++ › upravenie hry v C++
11. 12. 2015   #207244

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 ?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý