Casse Brique Besoin URGENT d'aide

Signaler
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008
-
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008
-
Bonjour

Je dois programmer un casse brique en opengl,mais je n'y comprend
rien.Est ce que vous avez des exemples de programmation pour que je
puisse y arriver s'il vous plait.

C'est très urgent,alors s'il vous plait aidez moi

Je vous remercie d'avance

4 réponses

Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
Bonjour,
tout d'abord qu'est-ce que tu ne comprend pas:
->le casse-brique ?
->OpenGL ?
->les deux ?

Si c'est un problème avec OpenGL, il y a sur internet plein de tuto sur OpenGL en 2D et comment déciner des carré(avec ou sans texture) .

Si c'est un problème de casse-brique voilà une ébauche en C++

->Une classe "Ball":
-Vecteur position
-Vecteur direction
-Entier rayon

->Une classe "Brick"
-Boolean exists
-Vecteur position(en haut gauche)
-Vecteur taille(longeur/largeur)
-virtual Callback "OnCollide"

->Une classe "MyBrick" dérivée de "Brick" qui représente la brique que l'on déplace
-Callback "OnTouch"

Maintenant la boucle du moteur(en gros)

#deifne PLAY_BRICK 20

Ball ball;
Brick **bricks; // allocation dynamique à cause de la classe dérivée
int points;
unsigned long elapsed;

... GameLoop...
{
InitOpenGL();
InitGame();

elapsed=MyGetElapsedTime();

while(!EndGame())
{
if(!OnPause())
{
if(BallOutOfBounds())
{
// replacer la balle, mettre sur pause...
continue;
}

for(int i=0;i<(PLAY_BRICK+1);i++)
{
if(BallCollide(brick[i])
brick[i]->OnTouch(); // le callback fera l'action appropriée:
// si c'est la brique spécial il renvoit la balle sinon il se détruit .
// grâce à ce système on peut créer des brique spécial(bonus, + de vie...)
}
}

unsigned long elapsed2=MyGetElapsedTime();
BallUpdate(float(elapsed2-elapsed)/1000);
elapsed=elapsed2;
Display();
}
Release();
return ...;
}

voilà maintenant il faut implémenter la collision entre un rectangle et un cercle:
test avec chaque côté de la distance entre le côté et le centre du cercle: si <= à rayon cercle: collision !!!

il faut implémenter les classe et programmer les callback pour faire l'action convenu .

Si tu programme en C, rempplacer les classe par des structrure: la classe MyBrick disparait et tu fais pointer la fonction de callback de une brique sur une fonction spéciale:

void MyBrickTouch(void); // comportement brique spéciale
void BrickTouch(void);// comportement par défaut

typedef void (*CallbackFunc)(void);

typedef struct _brick
{
Vector pos,size;
CallbackFunc callback;
.....
}brick;

Voilà si tu as encore des problème n'hésite pas .

A m a u r y
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008

Salut!

Merci pour ta réponse .En fait, mon problème c'est opengl,est ce que tu
n'aurais pas un code compréhensible pour les débutant s'il te plait ,tu
me sauverai la vie car c'est une question de vie ou de mort.

A bientot j'espère
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008

Bonjour,

Est ce que quelqu'un pourrait me dire comment résoudre mon
problème:j'ai écris une fonction keyboard pour que la barre de mon
casse brique se déplace,mais en appuyant les touches,rien ne bouge . Est ce que quelqu'un pourrait me dire d'où provient l'erreur?

Merci beaucoup davance
Messages postés
19
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
27 avril 2008

voila le code qui ne fonctionne pas (je n'ai recopié que ce qui avait en rapport avec les touches du clavier)

float x_b=0.0;

float y_b=0.0;





static void keyboard(unsigned char k,int x,int y){

switch(k){

case 'q':

case 'Q':

case 27:

glutLeaveMainLoop();

break;

case 'd': x_b-=0.2;

break;

case 'm': x_b+=0.2;

break;

}

}



void barre(){

glColor3f(1.0,1.0,1.0);

glBegin(GL_POLYGON);

glVertex2f(-0.25,-0.8);

glVertex2f(0.25,-0.8);

glVertex2f(0.25,-0.9);

glVertex2f(-0.25,-0.9);

glEnd();

}





static void display(void){

glClear(GL_COLOR_BUFFER_BIT);

glCallList(CARRE);

glTranslatef(x_b,y_b,0.0);

barre();

glLoadIdentity();

glColor3f(1.0,0.0,1.0);

glTranslatef(0.0 ,-0.75,0.0);

glutSolidSphere(0.05,50,50);

glFlush();



}