Buenas tardes compañeros!!
Hace mucho que no me paso por aquí, porque estoy liado con los estudios y bueno no tengo mucho tiempo…
Resulta que en los estudios ( Ing Informática ), me han mandado elaborar Arkanoid en C++. Por quien no sepa a que me refiero, es el típico juego de una raqueta muros y pelotita, e ir rompiendo estos.
Durante todo el curso he ido elaborando, pero me he topado con un gran problema que no sé como solventar. Lo describo a continuación:
Tengo una classe, la cual me controla absolutamente todo sobre el rebote de la pelota contra un muro. En esta clase he implementado todo lo relacionado con el rebote, pero hay una cosa del rebote que no sé como implementar. Cuál? Pues el rebote lateral, no sé como hacerlo. No sé como decirle que cuando de en el lateral de un muro, rebote. ME ES IMPOSIBLE.
Alguien podria ayudarme?
Os dejo el código de la clase, creo que será suficiente jaja
[code]#include “Paret.h”
#include “Joc.h”
Paret::Paret()
{
}
Paret::~Paret()
{
}
void Paret::init() //FUNCIÓ QUE INICIALITZA EL MUR
{
srand(time(NULL)); //FUNCIÓ QUE FA QUE L’ALEATORI VAGI VARIANT CADA COP QUE S’OBRE EL JOC
for (int i = 0; i < MAXMAONSX1; i++) {
for (int j = 0; j<MAXMAONSY1; j++) {
RESISTMAO*[j] = 1+rand()%(3-1); //FUNCIÓ QUE AGAFA VALORS ALEATORIS ENTRE 0 i 2 PER PODER DEFINIR LA RESISTENCIA DEL MAÓ (ESTATMAO)
}
};
_paret.Create("data/maoVermell.png"); //S'UTILITZA PER PINTAR ELS MURS DE COLOR VERMELL I RESISTÈNCIA 1
_paret1.Create("data/maoGroc.png");//S'UTILITZA PER PINTAR ELS MURS DE COLOR GROC I RESISTÈNCIA 2
}
void Paret::draw() //FUNCIÓ QUE DIBUIXA EL MUR
{
for (int i = 0; i < MAXMAONSX1; i++) {
int j = 0;
do {
if (RESISTMAO*[j] == 1) {
_paret.Draw(INIPANTALLAX1 + iMIDAMAO1, INIPANTALLAY1 + jMIDAMAOY); //DIBUIXA EL MAO DE RESISTENCIA 1 (passant-li els valors de x i y)
}
if (RESISTMAO*[j] == 2) {
_paret1.Draw(INIPANTALLAX1 + iMIDAMAO1, INIPANTALLAY1 + jMIDAMAOY); //DIBUIXA EL MAO DE RESISTENCIA 2 (passant-li els valors de x i y)
}
j++;
} while (j < MAXMAONSY1);
}
}
void Paret::rebotParet(Bola &bolaJoc, int &punts) { //FUNCIÓ QUE CONTROLA EL SUMATORI DE PUNTS I TRENCAMENT D’AQUESTS QUAN TOQUEM EL MARGE SUPERIOR
{
for (int i = 0; i < MAXMAONSY1;i++) //PER TRACTAR LES FILES
{
int j = 0; //PER TRACTAR LES COLUMNES
do{
if ((bolaJoc.getY() == INIPANTALLAY + (MIDAMAOY + MIDAMAOY*i)) && (RESISTMAO[j]* > 0))
{
if (((bolaJoc.getX() <= INIPANTALLAX + (MIDAMAO)*(j + 1) && bolaJoc.getX() >= INIPANTALLAX + (MIDAMAO*j))))
{
if (bolaJoc.getDirY() < 0) //AIXÒ FARÀ QUE NO REBOTI ANANT CAP AVALL
{
if (RESISTMAO[j]* > 0) // SI LA RESISTENCIA DEL MAO ES MES GRAN QUE 0:
{
if (RESISTMAO*[j] == 1) // SI ES TRACTA D'UN MAO VERMELL (RESIST ==1), I EL TRENQUEM, SUMEM PUNTS I LI RESTEM LA RESISTENCIA
punts++;
RESISTMAO[j]*--;
}
bolaJoc.changeDirY(); // CANVIA LA DIRECCIÓ DE LA PILOTA QUAN TOCA EL MUR
}
}
}
j++;
} while (j < MAXMAONSX1);
}
if (bolaJoc.getY() <= INIPANTALLAY) // UN COP LA PILOTA ARRIBA AL MUR SUPERIOR, PER NO SORTIR DE LA PANTALLA HA DE CANVIAR LA DIRECCIÓ
bolaJoc.changeDirY();
}
}
[/code]*******