Casse Brique Besoin URGENT d'aide

cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008 - 3 juin 2005 à 16:44
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008 - 10 juin 2005 à 18:33
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

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
4 juin 2005 à 09:51
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
0
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008
10 juin 2005 à 15:10
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
0
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008
10 juin 2005 à 18:31
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
0
cs_paulina82 Messages postés 19 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 27 avril 2008
10 juin 2005 à 18:33
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();



}
0
Rejoignez-nous