Guest User

Untitled

a guest
Nov 20th, 2018
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.12 KB | None | 0 0
  1. #include <gtk/gtk.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <string.h>
  6.  
  7. #define Colonne 10
  8. #define Ligne 10
  9. #define Mine 10
  10.  
  11. void mine();
  12. void tab();
  13. void nmbr();
  14. void aff2(GtkWidget * window, GtkWidget*table);
  15. static void destroy(GtkWidget *widget ,gpointer pointer) ;
  16. static gboolean delete_event(GtkWidget *widget,GdkEvent *event,gpointer pointer) ;
  17. static gboolean on_mouse_clic(GtkWidget *widget, GdkEvent *event, gpointer pointer);
  18.  
  19. struct s_data {
  20. GtkWidget *window;
  21. GtkWidget *table;
  22. };
  23.  
  24. int tdj[12][12] = {{0}};
  25. int tdv[12][12] = {{0}};
  26.  
  27. int main(int argc, char *argv[])
  28. {
  29. gtk_init(&argc, &argv) ;
  30. memset (tdj, 0, sizeof (tdj));
  31. memset (tdv, 0, sizeof (tdv));
  32. int l = 0;
  33. int c = 0;
  34. int test = 0;
  35. srand(time(NULL));
  36.  
  37. GtkWidget * window ;
  38. GtkWidget * table = NULL;
  39.  
  40. window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  41. gtk_window_set_title(GTK_WINDOW(window), "Fenetre");
  42. gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  43. gtk_window_set_default_size(GTK_WINDOW(window), 500, 500);
  44.  
  45. table=gtk_grid_new();
  46. gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(table));
  47.  
  48.  
  49. aff2(window, table);
  50.  
  51. struct s_data data;
  52. data.window = window;
  53. data.table = table;
  54.  
  55. gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
  56. g_signal_connect_after(G_OBJECT(window), "delete-event", G_CALLBACK(delete_event), NULL) ;
  57. g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL) ;
  58. g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(on_mouse_clic), &data) ;
  59.  
  60. gtk_widget_show_all(window) ;
  61. gtk_main() ;
  62. }
  63.  
  64. void mine() // Creer les coordonnés des mines et les place dans la tdj
  65. {
  66. int mx = 0;
  67. int my = 0;
  68. int i;
  69. for(i= 0; i<Mine; i++)
  70. {
  71. mx = (rand() % (10)) + 1;
  72. my = (rand() % (10)) + 1;
  73. if (tdj[mx][my]== 0)
  74. {
  75. tdj[mx][my] = -1;
  76. }
  77. else
  78. {
  79. i = i-1;
  80. }
  81. }
  82. }
  83.  
  84. void tab() //permet de compter le nombre de mines autour de chaque cases
  85. {
  86. int nb = 0;
  87. int xy = 0;
  88. int to = 1;
  89. while(xy<Ligne)
  90. {
  91. xy = xy +1;
  92. nb = 0;
  93. if (tdj[to][xy] != -1)
  94. {
  95. if (tdj[to-1][xy-1] == -1)
  96. nb=nb + 1;
  97. if (tdj[to][xy-1] == -1)
  98. nb=nb + 1;
  99. if (tdj[to+1][xy-1] == -1)
  100. nb=nb + 1;
  101. if (tdj[to-1][xy]==-1)
  102. nb=nb + 1;
  103. if (tdj[to+1][xy] ==-1 )
  104. nb=nb + 1;
  105. if (tdj[to-1][xy+1]==-1)
  106. nb=nb + 1;
  107. if (tdj[to][xy+1]==-1 )
  108. nb=nb + 1;
  109. if (tdj[to+1][xy+1]==-1 )
  110. nb=nb + 1;
  111.  
  112. tdj[to][xy] = nb;
  113. }
  114.  
  115. if (xy == Ligne && to != Colonne)
  116. {
  117. xy = xy -10;
  118. to = to +1;
  119. }
  120. }
  121. }
  122.  
  123. void aff2(GtkWidget * window, GtkWidget*table)
  124. {
  125. GtkWidget *image;
  126. int i,o;
  127. for(i = 1; i< Colonne+1 ; i++)
  128. {
  129. for(o = 1; o <Ligne+1; o++)
  130. {
  131. image = NULL;
  132.  
  133. if(tdv[i][o]== 0)
  134. image = gtk_image_new_from_file("cache.png");
  135.  
  136. if (tdv[i][o] == 2)
  137. image = gtk_image_new_from_file("mine.png");
  138.  
  139. if (tdv[i][o] == 1)
  140. {
  141. if(tdj[i][o] == 0)
  142. image = gtk_image_new_from_file("0.png");
  143. if(tdj[i][o] == 1)
  144. image = gtk_image_new_from_file("1.png");
  145. if(tdj[i][o] == 2)
  146. image = gtk_image_new_from_file("2.png");
  147. if(tdj[i][o] == 3)
  148. image = gtk_image_new_from_file("3.png");
  149. if(tdj[i][o] == 4)
  150. image = gtk_image_new_from_file("4.png");
  151. if(tdj[i][o] == 5)
  152. image = gtk_image_new_from_file("5.png");
  153. if(tdj[i][o] == 6)
  154. image = gtk_image_new_from_file("6.png");
  155. if(tdj[i][o] == 7)
  156. image = gtk_image_new_from_file("7.png");
  157. if(tdj[i][o] == 8)
  158. image = gtk_image_new_from_file("8.png");
  159. }
  160. gtk_grid_attach(GTK_GRID(table), image, i, o + 1, 1, 1);
  161. }
  162. }
  163. }
  164.  
  165. static void destroy(GtkWidget *widget, gpointer pointer) {
  166. exit(EXIT_SUCCESS) ;
  167. }
  168.  
  169. static gboolean delete_event(GtkWidget *widget,GdkEvent *event, gpointer pointer) {
  170.  
  171. return FALSE ; // Signal handler continue processing.
  172. }
  173.  
  174. static gboolean on_mouse_clic(GtkWidget *widget, GdkEvent *event, gpointer pointer)
  175. {
  176.  
  177. struct s_data *data = (struct s_data *)pointer;
  178.  
  179. int l, c;
  180. guint typeClic=event->button.button ;
  181. GdkEventButton *mouse_click = (GdkEventButton *) event ;
  182. l = mouse_click -> x / 50 +1;
  183. c = mouse_click -> y / 50;
  184.  
  185. fprintf(stdout,"Mouse clic detected at (%d, %d)\n", l, c );
  186.  
  187. if (typeClic ==1)
  188. {
  189. if ((tdj[l][c] != -1) && (tdv[l][c] != 2))
  190. {
  191. tdv[l][c] = 1;
  192. }
  193. }
  194.  
  195. if (typeClic ==3)
  196. {
  197. if(tdv[l][c] ==2)
  198. {
  199. tdv[l][c] = 0;
  200. }
  201. else if (tdv[l][c]==0)
  202. tdv[l][c] =2;
  203. }
  204. aff2(data->window, data->table);
  205.  
  206. return TRUE ; // Signal handler continue processing.
  207. }
Advertisement
Add Comment
Please, Sign In to add comment