Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 76 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Morpion en C avec SDL, besoin d'aide !

 
n°15141
MisterShad​y
Profil : Jeune recrue
Posté le 02-11-2005 à 19:22:49  profilanswer
 

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 :
  1. #include <SDL/SDL.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. // Surfaces et rectangle
  5. SDL_Rect rect, rect2, rect3, rect4, rect5, rect6, rect7, rect8, rect9;
  6. SDL_Surface *Screen, *vide, *rond, *croix;
  7. int cochecase[10]={0,0,0,0,0,0,0,0,0};
  8. int MouseX;
  9. int MouseY;
  10. SDL_Event event;
  11. int main (int argc, char **argv)
  12. {
  13.   SDL_Init (SDL_INIT_VIDEO);
  14.   Screen = SDL_SetVideoMode (300, 300, 32, SDL_SWSURFACE|
  15. SDL_DOUBLEBUF);
  16.   SDL_WM_SetCaption ("Morpion !", NULL);
  17. void affichage()
  18. {
  19. SDL_FillRect(Screen, NULL, 0);
  20.    
  21.    rect2.x = (Screen->w / 3);
  22.    rect2.y = (Screen->h / 3)- (rect.w);
  23.  
  24.    rect3.x = (Screen->w / 3)+ (rect.h);
  25.    rect3.y = (Screen->h / 3)- (rect.w);
  26.  
  27.    rect4.x = (Screen->w / 3)- (rect.h);
  28.    rect4.y = (Screen->h / 3);
  29.  
  30.    rect5.x = (Screen->w / 3);
  31.    rect5.y = (Screen->h / 3);
  32.  
  33.    rect6.x = (Screen->w / 3) + (rect.h);
  34.    rect6.y = (Screen->h / 3);
  35.  
  36.    rect7.x = (Screen->w / 3) - (rect.h);
  37.    rect7.y = (Screen->h / 3)+ (rect.w);
  38.  
  39.    rect8.x = (Screen->w / 3);
  40.    rect8.y = (Screen->h / 3)+ (rect.w);
  41.  
  42.    rect9.x = (Screen->w / 3) + (rect.h);
  43.    rect9.y = (Screen->h / 3) + (rect.w);
  44. vide=SDL_LoadBMP("vide.bmp" );
  45. rond=SDL_LoadBMP("cercle.bmp" );
  46. croix=SDL_LoadBMP("croix.bmp" );
  47. if(cochecase[1]==0)
  48. SDL_BlitSurface(vide,NULL,Screen,&rect);
  49. if(cochecase[1]==1)
  50. SDL_BlitSurface(rond,NULL,Screen,&rect);
  51. if(cochecase[1]==2)
  52. SDL_BlitSurface(croix,NULL,Screen,&rect);
  53. if(cochecase[2]==0)
  54. SDL_BlitSurface(vide,NULL,Screen,&rect2);
  55. if(cochecase[2]==1)
  56. SDL_BlitSurface(rond,NULL,Screen,&rect2);
  57. if(cochecase[2]==2)
  58. SDL_BlitSurface(croix,NULL,Screen,&rect2);
  59. if(cochecase[3]==0)
  60. SDL_BlitSurface(vide,NULL,Screen,&rect3);
  61. if(cochecase[3]==1)
  62. SDL_BlitSurface(rond,NULL,Screen,&rect3);
  63. if(cochecase[3]==2)
  64. SDL_BlitSurface(croix,NULL,Screen,&rect3);
  65. /*case 4*/
  66. if(cochecase[4]==0)
  67. SDL_BlitSurface(vide,NULL,Screen,&rect4);
  68. if(cochecase[4]==1)
  69. SDL_BlitSurface(rond,NULL,Screen,&rect4);
  70. if(cochecase[4]==2)
  71. SDL_BlitSurface(croix,NULL,Screen,&rect4);
  72. if(cochecase[5]==0)
  73. SDL_BlitSurface(vide,NULL,Screen,&rect5);
  74. if(cochecase[5]==1)
  75. SDL_BlitSurface(rond,NULL,Screen,&rect5);
  76. if(cochecase[5]==2)
  77. SDL_BlitSurface(croix,NULL,Screen,&rect5);
  78. if(cochecase[6]==0)
  79. SDL_BlitSurface(vide,NULL,Screen,&rect6);
  80. if(cochecase[6]==1)
  81. SDL_BlitSurface(rond,NULL,Screen,&rect6);
  82. if(cochecase[6]==2)
  83. SDL_BlitSurface(croix,NULL,Screen,&rect6);
  84. /*case 7*/
  85. if(cochecase[7]==0)
  86. SDL_BlitSurface(vide,NULL,Screen,&rect7);
  87. if(cochecase[7]==1)
  88. SDL_BlitSurface(rond,NULL,Screen,&rect7);
  89. if(cochecase[7]==2)
  90. SDL_BlitSurface(croix,NULL,Screen,&rect7);
  91. if(cochecase[8]==0)
  92. SDL_BlitSurface(vide,NULL,Screen,&rect8);
  93. if(cochecase[8]==1)
  94. SDL_BlitSurface(rond,NULL,Screen,&rect8);
  95. if(cochecase[8]==2)
  96. SDL_BlitSurface(croix,NULL,Screen,&rect8);
  97. if(cochecase[9]==0)
  98. SDL_BlitSurface(vide,NULL,Screen,&rect9);
  99. if(cochecase[9]==1)
  100. SDL_BlitSurface(rond,NULL,Screen,&rect9);
  101. if(cochecase[9]==2)
  102. SDL_BlitSurface(croix,NULL,Screen,&rect9);
  103.    SDL_Flip(Screen);
  104. }
  105. void getMousePosition(void)
  106. {
  107.    SDL_PumpEvents();
  108.    SDL_GetMouseState(&MouseX, &MouseY);
  109.    MouseX=event.motion.x;
  110.    MouseY=event.motion.y;
  111.    return;
  112. }
  113.    while (1)
  114.    {
  115.       if (SDL_PollEvent (&event) && event.type==SDL_QUIT)
  116.       break;
  117.        
  118.    switch(event.type)
  119.     {
  120.      case SDL_MOUSEBUTTONDOWN:
  121.          
  122.       if ((event.button.x < 100) && (event.button.y < 100))
  123.       {
  124.                    cochecase[1]==1;
  125.       }
  126.      
  127.       if ((event.button.x < 100) && (event.button.y > 200))
  128.       {       
  129.                    cochecase[7]==1;
  130.       }
  131.      
  132.       if ((event.button.x < 100) && (event.button.y < 200) &&
  133. (event.button.y >100))
  134.       {
  135.                   cochecase[4]==1;
  136.       }
  137.      
  138.       if ((event.button.x > 100) && (event.button.x < 200) &&
  139. (event.button.y < 200) && (event.button.y >100))
  140.       { 
  141.                    cochecase[5]==0;
  142.       }
  143.      
  144.       if ((event.button.x > 100) && (event.button.x < 200) &&
  145. (event.button.y < 100))
  146.       {
  147.                    cochecase[2]==0;
  148.       }
  149.      
  150.       if ((event.button.x > 100) && (event.button.x < 200) &&
  151. (event.button.y > 200))
  152.       {
  153.                    cochecase[8]==0;           
  154.       }
  155.      
  156.       if ((event.button.x > 200) && (event.button.y > 200))
  157.       {
  158.                  
  159.                    cochecase[9]==0;
  160.       }
  161.       if ((event.button.x > 200) && (event.button.y < 100))
  162.       {
  163.                    cochecase[3]==0;
  164.        
  165.       }
  166.      
  167.       if ((event.button.x > 200) && (event.button.y > 100) &&
  168. (event.button.y < 200))
  169.       {
  170.                    cochecase[6]==0; 
  171.                
  172.       }
  173.      case SDL_MOUSEMOTION:
  174.       getMousePosition();
  175.       break;
  176.     }
  177.    
  178.       affichage();
  179. }
  180.    SDL_FreeSurface(Screen);
  181.    SDL_FreeSurface(vide);
  182.    SDL_FreeSurface(rond);
  183.    SDL_FreeSurface(croix);
  184.      
  185.      
  186.    return 0;
  187. }


 
 
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.


Aller à :
Ajouter une réponse