Ouais , j´ai lu ca dans le sommaire de mon bouquin , mais je suis pas encore rendu jusqu´ici
nan , je voulais dire , j´ai un
et je fait mon tableau comme ca en réalite
int Plateau[NombreCases][NombreCases]
ce qui me permettrait de faire varier la taille facilement
Bon , a+ , merci beaucoup a toutes vos réponses , de toute manière c´est pas fini , parceque l´ai ca m´a l´air bien compliqué , et meme si je me suis un peu documente , je compte repasser bientot ^^
le mieux est d´utiliser un tableau simple :
int plateau [ sizex * sizey ];
Si tu veux acceder a l´element {x,y} :
int value = plateau[ x + y*sizex ];
Bon voila mon code pour le debut dans pong il fonctionnait bien avant(la balle bougais,sa gerais les collisions) mais la rien se passe je comprends pas.Est ce que vous pouvais m´aider
/ /#include < fmod.h>
/ /#pragma comment(lib,"libfmod.a")
using namespace std;
/ *
SDL_Rect balleR, Raquette1, Raquette2;
/ *
SDL_Surface *screen, *balle, *raquette1, *raquette2;
/ *
SDL_Event event;
/ *
/ /FSOUND_STREAM *Backround;
/ /FSOUND_SAMPLE *Bounce;
/ *
short Vitesse_du_jeu=3;//Pour la vitesse de déplacement des objets
signed short B_DirectionX=1;//Pour la direction tion de la balle sur l´axe X. 1="gauche" -1="droite"
signed short B_DirectionY=-1;//Pour la direction tion de la balle sur l´axe Y.
short int Niveau_Difficulte;//0="facile" 1="normal" 2="difficile" 3="immbatable".
bool Done=false;//Boucle pour le jeu
short Raquette1X=Raquette1.x;
short Raquette1Y=Raquette1.y;
short Raquette2X=Raquette2.x;
short Raquette2Y=Raquette2.y;
short BalleX;
short BalleY;
short Rendez_vous;
Uint8 *keys;//Pour les touches.
/ *
void Initialisation();
void Chargement();
void Joueur();
void Ennemie();
void Balle();
void Affiche();
void Victoire();
int main(int argc,char* argv[])
{
short i;
srand(time(NULL));
/***L´initialisation***/
Initialisation();
Chargement();
Raquette1X=0;
Raquette1Y=0;
Raquette2X=465;
Raquette2Y=0;
balleR.x=230;
balleR.y=150;
BalleX=balleR.x;
BalleY=balleR.y;
//FSOUND_Stream_Play(1, Backround);
/***La boucle de jeu***/
while(!Done)
{
while(i<Vitesse_du_jeu)
{
Joueur();
Ennemie();
Balle();
i++;
}
Affiche();
//Victoire();
}
return 0;
}
void Initialisation()
{
//FSOUND_Init(44100, 2, 0);
atexit(SDL_Quit);
screen=SDL_SetVideoMode(480, 320, 8, SDL_HWSURFACE|SDL_DOUBLEBUF);
SDL_WM_SetCaption("Pong en SDL de inconnu[pure] ou pandamark", NULL);
SDL_ShowCursor(0);
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
}
void Chargement()
{
balle=SDL_LoadBMP("balle.bmp");
raquette1=SDL_LoadBMP("computer.bmp");
raquette2=SDL_LoadBMP("computer.bmp");
SDL_SetColorKey(balle, SDL_SRCCOLORKEY, SDL_MapRGB(balle->format, 255, 0, 255));
Raquette1.w=raquette1->w;
Raquette1.h=raquette1->h;
Raquette2.w=raquette2->w;
Raquette2.h=raquette2->h;
//Bounce=FSOUND_Sample_Load(FSOUND_FREE, " bounce.wav", 0, 0);
//Backround=FSOUND_Stream_OpenFile("Music.mp3", FSOUND_LOOP_NORMAL, 0);
//FSOUND_SetVolume(0, 150);
//FSOUND_SetVolume(1, 150);
}
void Joueur()
{
while(SDL_PollEvent(&))
{
switch(event.type)
{
case SDL_QUIT:
exit(1);
break;
}
}
keys=SDL_GetKeyState(NULL);
if(keys[SDLK_UP])
{
if(Raquette1Y>0)Raquette1Y--;
}
if(keys[SDLK_DOWN])
{
if(Raquette1Y<270)Raquette1Y++;//270
}
if(keys[SDLK_ESCAPE])exit(1);
}
void Ennemie()
{
short i=rand()%50;
short j=rand()%20;
short Rendez_vous;
if(i!=0 && B_DirectionX==-1)
{
if((Raquette2Y+i)>((BalleY+j)))
{
if(Raquette2Y>0)Raquette2Y--;
}
if((Raquette2Y+i)<(BalleY+j))
{
if(Raquette2Y<270)Raquette2Y++;
}
}
}
void Balle()
{
if(B_DirectionX==1)
{
BalleX--;
if(BalleX==0)B_DirectionX=-1;
}
if(B_DirectionX==-1)
{
BalleX++;
if(BalleX==460)B_DirectionX=1;
}
if(B_DirectionY==-1)
{
BalleY--;
if(BalleY==0)B_DirectionY=1;
}
if(B_DirectionY==1)
{
BalleY++;
if(BalleY==300)B_DirectionY=-1;
}
if((BalleX)==(Raquette1X+Raquette1.w) && BalleY>=Raquette1Y && BalleY<=(Raquette1Y+Raquette1.h))
{
B_DirectionX=-1;
//FSOUND_PlaySound(0, Bounce);
}
else if((BalleX)==(Raquette1X+Raquette1.w) && BalleY+20>=Raquette1Y && BalleY+20<=(Raquette1Y+Raquette1.h))
{
B_DirectionX=-1;
//FSOUND_PlaySound(0, Bounce);
}
if((BalleX+20)==(Raquette2X) && BalleY>=Raquette2Y && BalleY<=(Raquette2Y+Raquette2.h))
{
B_DirectionX=1;
//FSOUND_PlaySound(0, Bounce);
}
if((BalleX+20)==(Raquette2X) && BalleY+20>=Raquette2Y && BalleY+20<=(Raquette2Y+Raquette2.h))
{
B_DirectionX=1;
//FSOUND_PlaySound(0, Bounce);
}
}
void Affiche()
{
Raquette1.y=Raquette1Y;
Raquette1.x=Raquette1X;
Raquette2.y=Raquette2Y;
Raquette2.x=Raquette2X;
balleR.x=BalleX;
balleR.y=BalleY;
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
SDL_BlitSurface(raquette1, NULL, screen, &1);
SDL_BlitSurface(raquette2, NULL, screen, &2);
SDL_BlitSurface(balle, NULL, screen, &);
SDL_Flip(screen);
}
bonjours, avez vous un site sur les variable C++ c´est trop complexe :/ merci d´avance
bon y´a toujours le site de JYY et puis http://bigbozoid.free.fr
Il me semble que tu as mis ta fonction affiche en dehors de ta boucle while donc des images ne peuvent pas bouger.
j´ai fait un tutorial d´un site de prog tout simple
/ ///////////////////:
void Display();
void Reshape(int,int);
void Idle();
void Init();
void Creer_Cube();
int id_cube=0;
int angle=0;
int main( int argc, char *argv[ ])_
{
glutInit(&,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); / / mode double buffering + z-buffer
glutInitWindowSize(WIDTH,HEIGHT);
glutInitWindowPosition(0,0);
glutCreateWindow("Scène 3D Animée");
Init();
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutIdleFunc(Idle);
glutMainLoop();
return 0;
}
void Init()
{
glEnable(GL_DEPTH_TEST);
Creer_Cube();
}
void Creer_Cube()
{
id_cube=glGenLists(1);
glNewList ( id_cube,GL_COMPILE);
glBegin(GL_QUADS);
glColor3d(1,0,0);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,1,1);
glColor3d(0,1,0);
glVertex3i(1,1,-1);
glVertex3i(1,-1,-1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(0,0,1);
glVertex3i(1,1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glVertex3i(1,1,-1);
glColor3d(0,1,1);
glVertex3i(-1,1,1);
glVertex3i(-1,-1,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,1,-1);
glColor3d(1,1,0);
glVertex3i(-1,1,-1);
glVertex3i(-1,1,1);
glVertex3i(1,1,1);
glVertex3i(1,1,-1);
glColor3d(1,0,1);
glVertex3i(-1,-1,-1);
glVertex3i(-1,-1,1);
glVertex3i(1,-1,1);
glVertex3i(1,-1,-1);
glEnd();
glEndList();
}
void Idle()
{
angle+=5;
if ( angle>360) angle=0;
glutPostRedisplay();
}
void Display()
{
glClearColor(0,0,0,0); / / selectionne la couleur noire ( qui est celle par défaut)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(10,15,15,0,0,0,0,1,0);
glCallList(id_cube);
glPushMatrix();
glRotated(angle,0,1,0);
glTranslatef(0,0,-5);
glScaled(0.5,0.5,0.5);
glCallList(id_cube);
glPopMatrix();
glPushMatrix();
glRotated(angle,0,1,0);
glTranslatef(0,0,5);
glRotated(angle,0,1,0);
glScaled(0.5,0.5,0.5);
glCallList(id_cube);
glPopMatrix();
glutSwapBuffers();
glFlush();
}
void Reshape(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION); / / Choisit la matrice de projection
glLoadIdentity();
gluPerspective(45.0,(float) w/h,1.,100.);
glMatrixMode(GL_MODELVIEW); / / on revient sur la matrice MODELVIEW
glLoadIdentity();
}
/ ********************************/
Bon alors l´enuis a la compilation c´est ça :
In function `int main(int, char**)´:
opengl_anim.c:23: error: syntax error before `{´ token
opengl_anim.c:24: error: syntax error before `{´ token
opengl_anim.c:26: error: ISO
C++ forbids declaration of `glutInitDisplayMode´ with no type
opengl_anim.c:26: error: `
int glutInitDisplayMode´ redeclared as different kind of symbol
glut.h:484: error: previous
declaration of `void glutInitDisplayMode(unsigned int)´
opengl_anim.c:28: error: ISO
C++ forbids declaration of `glutInitWindowSize´ with no type
opengl_anim.c:28: error: `
int glutInitWindowSize´ redeclared as different kind of symbol
etc...y´en a 38 en tout.
Bon j´aimerai bien savoir ou est le problèm.
J´ai DevC++.
merci d´avance
beuh pk ya personne ki aide en delphi ![]()
parce que y´a marqué " aide en C/C++" sur le topic et pas " aide en delphi"
jejej>> ah! tu parlais d´agrandir statiquement... je pensais que tu parlais d´agranissement dynamique. on est d´accord dans ce cas.
MAKO:
regarde ta ligne 23 :
tu a mis : double buffering + z-buffer
par hasard c´est pas : double buffering + z-buffer ;
tu as oublié le " ;"
enfin je pense,pour ce qui est de l´opengl je connais pas donc je pourrais pas t´aider a ce niveau.
int main( int argc, char *argv[ ])_
et la ya pas le " _" en plus.
jul -> J´pense plutôt que c´est la suite de son commentaire qui est parti à la ligne grâce à notre cher JV.com ![]()
Ah oui effectivement,j´avais pas vu lol.
juste pour le fun : le " f" de printf, veut dire quoi ? function ?
J´en reviens aux pointeurs ![]()
dans mon bouquin, l´auteur dit " une fois initialisé, p permet d´aller aux différents éléments du tableau"
pour avoir une idée de ce à quoi correspond le p :
int Tab[50000]; / / j´exagère un peu
int* p;
p = &[0];
est-ce que ça veut dire que si on fait directement
p = &[3];
ça va pas marcher ?
f veut dire " formated" c´est a dire, en français " mise en forme"
Sinon, si tu fais p=&[3] tu pointes sur le 4e élément du tableau ( car 0 comtpe)
de ce fait,
p[0] = Tab[3];
p[6] = Tab[9];
p[x] = Tab[x+3];
donc ça marche, mais rien de tel pour t´embrouiller les pédales ![]()
Ouais c´est bien ce que je pensais que ça marchais vu que quand j´ai essayé de compiler ça allait.
Le truc que je comprenais pas sur l´arithmétique des pointeurs avec le fait que quand c´est un int ça se déplace de 2 octets, j´ai maintenant pigé grâce à mon bouquin ( pour une fois c´est un tuto sur le net qui m´avait embrouillé ^^)
pour un int, tu decales de sizeof(int) quand tu fais ++
pour un float, tu decales de sizeof(float)
pour un double, tu decales de sizeof(double)
pour un truc, tu decales de sizeof(truc)
))
Sinon, un int fait 2 octets sous les vieux compilos, mais 4 sous les récents ; -p
Mais bref, tu as compris le principe ![]()
bon voila j´ai fini mon pong mais il est pas super donc je le metterais pas sur internet,donc voila puis je suis passer au casse brique. mais j´ai plusiere probleme dont je comprends rien de rien.
Voila le code(c´est seulement l´introduction au jeu):
/ *
SDL_Surface *screen, *intro, *fin, *backround, *raquette, *briqueR[10], *briqueG[10], *briqueB[10], *briqueS[10], *balle;
/ *
SDL_Rect Backround, BalleR, BriqueR[10], BriqueG[10], BriqueB[10], BriqueS[10];
/ *
FSOUND_SAMPLE *sound1;//Son pour collisions balle/raquette
FSOUND_SAMPLE *sound2;//Son pour collisions balle/brique
/ *
FSOUND_STREAM *Backround_Musique;//Musique de fonds
/ *
SDL_Event event, Debut;
/ *
Uint8 *keys, *debut;
/ *
short score=0;//Le score est à 0;
short vie=3;//On commence avec trois vies(balles).
short BalleX, BalleY;//Position de la balle.
short RaquetteX, RaquetteY;//Position de la raquette.
short BriqueRX[10], BriqueRY[10];//Position
short BriqueGX[10], BriqueGY[10];//des
short BriqueBX[10], BrqiueBY[10];//briques
short BriqueSX[10], BrqiueSY[10];//
short Balle_Vitesse=1;//La vitesse de la balle en pixel.
short Vitesse=1;//La vitesse du jeu.
short BriqueR_Vie[10];//La
short BriqueG_Vie[10];//vie
short BriqueB_Vie[10];//des
short BriqueS_Vie[10];//briques
short Niveau;//Numero du niveau.5 prévus ![]()
bool Continue_Game;
bool Playing_Game;
/ *
void Initialisation();
void Introduction();
void Chargement();
void Chargement_Niveau();//Fontions pour initialiser le niveau et pour continuer le jeu.
void Balle();
void Joueur();
void Affiche();
void Victoire();
SDL_Surface *LoadBmp(const char *filename);//Du tutorial de [DmX]
int main(int argc, char *argv[])
{
short i;//Pour la vitesse de la balle.
short j;//Pour la vitesse du jeu.
Initialisation();
Chargement();
Introduction();
/ /while(Continue_Game)
/ /{
/ /Chargement_Niveau();
/ /Boucle principale
/ /while(Playing_Game)
/ /{
/ /while(j<=Vitesse)
/ /{
/ /void Balle();
/ /void Joueur();
/ /j++;
/ /}
/ /void Affiche();
/ /void Victoire();
/ /}
/ /}
return 0;
}
void Initialisation()
{
/ /Pour SDL
atexit(SDL_Quit);
screen=SDL_SetVideoMode(480, 360, 24, SDL_DOUBLEBUF|SDL_HWSURFACE);
SDL_WM_SetCaption("Casse brique par pandamark ou inconnu[pure]", NULL);
SDL_ShowCursor(0);
/ /Pour fmod
FSOUND_Init(44100, 4, 0);
}
void Chargement()
{
int g;
/ /Des images
intro=LoadBMP("images/intro.bmp");
raquette=LoadBMP("images/raquette.bmp");
balle=LoadBMP("images/balle.bmp");
for(g=0;g<10;g++)
{
briqueR[g]=LoadBMP("images/briqueR.bmp");
briqueG[g]=LoadBMP("images/briqueR.bmp");
briqueB[g]=LoadBMP("images/briqueR.bmp");
briqueS[g]=LoadBMP("images/briqueR.bmp");
}
/ /de la musique et des sons
sound1=FSOUND_Sample_Load(FSOUND_FREE, " sons/bounce1.midi", 1, 0, 1);
sound2=FSOUND_Sample_Load(FSOUND_FREE, " sons/bounce2.midi", 0, 0, 1);
Backround_Music=FSOUND_Steam_OpenFile("sons/music
.midi", FSOUND_LOOP_NORMAL, 0);
}
void introduction()
{
bool done;
SDL_BlitSurface(intro, NULL, screen, NULL);
SDL_Flip(screen);
debut=SDL_GetKeyState(NULL);
while(!done)
{
while(SDL_PollEvent(&))
{
switch(Debut.type)
{
case SDL_KEYDOWN:
if(debut[SDLK_ESCAPE])done=true;
break;
}
}
}
SDL_Delay(3000);
}
SDL_Surface *LoadBMP(const char *filename)
{
SDL_Surface *temp, *image;
temp=SDL_LoadBMP(filename);
image=SDL_DisplayFormat(temp);
SDL_FreeSuface(temp);
return image;
}
Voici les erreurs:
121 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
implicit declaration of function `int LoadBMP(...)´
121 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
assignment to `SDL_Surface *´ from `int´ lacks a cast
122 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
assignment to `SDL_Surface *´ from `int´ lacks a cast
et sa ce repete tout le long de la fonction chargement.
136 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
`Backround_Music´ undeclared ( first use this function)
136 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
implicit declaration of function `int FSOUND_Steam_OpenFile(...)´
168 C:\Documents and Settings\Thierry\Bureau\Petit programme\casse-brique.cpp
implicit declaration of function `int SDL_FreeSuface(...)´
Voila c´est long mais je ne peux pas regler sa tout seul.
normal :
( je te traite que la 1ere erreur)
au moment ou tu arrives ligne 122, il lit un " LoadBMP", et, a cet endroit, il ne la connait pas...
Met la fonction au dessus.
( ou alors sinon, prototype la :
en haut, juste apres les #include, tu mets :
SDL_Surface *LoadBMP(const char *filename);
sans rien d´autre :
ce qui veut dire " je vais, plus bas, faire une fonction LoadBMP, donc si tu vois que je l´appelle, tu ne gueule pas, tu verras plus tard"