MisterShady Profil : Jeune recrue | Bonjour à tous,
Je me suis lancé dans la programmation en C avec la libraire SDL pour les graphismes. Je tente de faire un jeu du type Morpion, dont vous connaissez probablement le principe.
Seulement j'ai un problème. Le morpion est affiché (ses cases et la fenetre du jeu) mais lorsque je clique sur les cases, il ne se passe rien (le cercle n'apparait pas, signe que la case est cochée, elle reste vide) alors que j'ai l'impression d'avoir tout bien fait. Comme si les clics de la souris n'étaient pas pris en compte alors que j'ai fait ca bien (^^).
Voici mon code :
Code :
- #include <SDL/SDL.h>
- #include <stdio.h>
- #include <stdlib.h>
- // Surfaces et rectangle
- SDL_Rect rect, rect2, rect3, rect4, rect5, rect6, rect7, rect8, rect9;
- SDL_Surface *Screen, *vide, *rond, *croix;
- int cochecase[10]={0,0,0,0,0,0,0,0,0};
- int MouseX;
- int MouseY;
- SDL_Event event;
- int main (int argc, char **argv)
- {
- SDL_Init (SDL_INIT_VIDEO);
- Screen = SDL_SetVideoMode (300, 300, 32, SDL_SWSURFACE|
- SDL_DOUBLEBUF);
- SDL_WM_SetCaption ("Morpion !", NULL);
- void affichage()
- {
- SDL_FillRect(Screen, NULL, 0);
-
- rect2.x = (Screen->w / 3);
- rect2.y = (Screen->h / 3)- (rect.w);
-
- rect3.x = (Screen->w / 3)+ (rect.h);
- rect3.y = (Screen->h / 3)- (rect.w);
-
- rect4.x = (Screen->w / 3)- (rect.h);
- rect4.y = (Screen->h / 3);
-
- rect5.x = (Screen->w / 3);
- rect5.y = (Screen->h / 3);
-
- rect6.x = (Screen->w / 3) + (rect.h);
- rect6.y = (Screen->h / 3);
-
- rect7.x = (Screen->w / 3) - (rect.h);
- rect7.y = (Screen->h / 3)+ (rect.w);
-
- rect8.x = (Screen->w / 3);
- rect8.y = (Screen->h / 3)+ (rect.w);
-
- rect9.x = (Screen->w / 3) + (rect.h);
- rect9.y = (Screen->h / 3) + (rect.w);
- vide=SDL_LoadBMP("vide.bmp" );
- rond=SDL_LoadBMP("cercle.bmp" );
- croix=SDL_LoadBMP("croix.bmp" );
- if(cochecase[1]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect);
- if(cochecase[1]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect);
- if(cochecase[1]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect);
- if(cochecase[2]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect2);
- if(cochecase[2]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect2);
- if(cochecase[2]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect2);
- if(cochecase[3]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect3);
- if(cochecase[3]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect3);
- if(cochecase[3]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect3);
- /*case 4*/
- if(cochecase[4]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect4);
- if(cochecase[4]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect4);
- if(cochecase[4]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect4);
- if(cochecase[5]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect5);
- if(cochecase[5]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect5);
- if(cochecase[5]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect5);
- if(cochecase[6]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect6);
- if(cochecase[6]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect6);
- if(cochecase[6]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect6);
- /*case 7*/
- if(cochecase[7]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect7);
- if(cochecase[7]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect7);
- if(cochecase[7]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect7);
- if(cochecase[8]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect8);
- if(cochecase[8]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect8);
- if(cochecase[8]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect8);
- if(cochecase[9]==0)
- SDL_BlitSurface(vide,NULL,Screen,&rect9);
- if(cochecase[9]==1)
- SDL_BlitSurface(rond,NULL,Screen,&rect9);
- if(cochecase[9]==2)
- SDL_BlitSurface(croix,NULL,Screen,&rect9);
- SDL_Flip(Screen);
- }
- void getMousePosition(void)
- {
- SDL_PumpEvents();
- SDL_GetMouseState(&MouseX, &MouseY);
- MouseX=event.motion.x;
- MouseY=event.motion.y;
- return;
- }
- while (1)
- {
- if (SDL_PollEvent (&event) && event.type==SDL_QUIT)
- break;
-
- switch(event.type)
- {
- case SDL_MOUSEBUTTONDOWN:
-
- if ((event.button.x < 100) && (event.button.y < 100))
- {
- cochecase[1]==1;
- }
-
- if ((event.button.x < 100) && (event.button.y > 200))
- {
- cochecase[7]==1;
- }
-
- if ((event.button.x < 100) && (event.button.y < 200) &&
- (event.button.y >100))
- {
- cochecase[4]==1;
- }
-
- if ((event.button.x > 100) && (event.button.x < 200) &&
- (event.button.y < 200) && (event.button.y >100))
- {
- cochecase[5]==0;
- }
-
- if ((event.button.x > 100) && (event.button.x < 200) &&
- (event.button.y < 100))
- {
- cochecase[2]==0;
- }
-
- if ((event.button.x > 100) && (event.button.x < 200) &&
- (event.button.y > 200))
- {
- cochecase[8]==0;
- }
-
- if ((event.button.x > 200) && (event.button.y > 200))
- {
-
- cochecase[9]==0;
- }
- if ((event.button.x > 200) && (event.button.y < 100))
- {
- cochecase[3]==0;
-
- }
-
- if ((event.button.x > 200) && (event.button.y > 100) &&
- (event.button.y < 200))
- {
- cochecase[6]==0;
-
- }
- case SDL_MOUSEMOTION:
- getMousePosition();
- break;
- }
-
- affichage();
- }
- SDL_FreeSurface(Screen);
- SDL_FreeSurface(vide);
- SDL_FreeSurface(rond);
- SDL_FreeSurface(croix);
-
-
- return 0;
- }
|
Par ailleurs la variable "cochecase" sert à informer le programme sur le fait qu'une case soit cochée ou non, ainsi on ne peut cocher deux fois la même. Enfin pour l'instant on ne peut rien cocher puisque ca ne fonctionne pas ^^
De plus, l'IA n'est pas encore programmée.
Merci par avance pour votre précieuse aide !
Amicalement,
MisterShady. |