Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <gtk/gtk.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #include <string.h>
- #define Colonne 10
- #define Ligne 10
- #define Mine 10
- void mine();
- void tab();
- void nmbr();
- void aff2(GtkWidget * window, GtkWidget*table);
- static void destroy(GtkWidget *widget ,gpointer pointer) ;
- static gboolean delete_event(GtkWidget *widget,GdkEvent *event,gpointer pointer) ;
- static gboolean on_mouse_clic(GtkWidget *widget, GdkEvent *event, gpointer pointer);
- struct s_data {
- GtkWidget *window;
- GtkWidget *table;
- };
- int tdj[12][12] = {{0}};
- int tdv[12][12] = {{0}};
- int main(int argc, char *argv[])
- {
- gtk_init(&argc, &argv) ;
- memset (tdj, 0, sizeof (tdj));
- memset (tdv, 0, sizeof (tdv));
- int l = 0;
- int c = 0;
- int test = 0;
- srand(time(NULL));
- GtkWidget * window ;
- GtkWidget * table = NULL;
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW(window), "Fenetre");
- gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size(GTK_WINDOW(window), 500, 500);
- table=gtk_grid_new();
- gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(table));
- aff2(window, table);
- struct s_data data;
- data.window = window;
- data.table = table;
- gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
- g_signal_connect_after(G_OBJECT(window), "delete-event", G_CALLBACK(delete_event), NULL) ;
- g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL) ;
- g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(on_mouse_clic), &data) ;
- gtk_widget_show_all(window) ;
- gtk_main() ;
- }
- void mine() // Creer les coordonnés des mines et les place dans la tdj
- {
- int mx = 0;
- int my = 0;
- int i;
- for(i= 0; i<Mine; i++)
- {
- mx = (rand() % (10)) + 1;
- my = (rand() % (10)) + 1;
- if (tdj[mx][my]== 0)
- {
- tdj[mx][my] = -1;
- }
- else
- {
- i = i-1;
- }
- }
- }
- void tab() //permet de compter le nombre de mines autour de chaque cases
- {
- int nb = 0;
- int xy = 0;
- int to = 1;
- while(xy<Ligne)
- {
- xy = xy +1;
- nb = 0;
- if (tdj[to][xy] != -1)
- {
- if (tdj[to-1][xy-1] == -1)
- nb=nb + 1;
- if (tdj[to][xy-1] == -1)
- nb=nb + 1;
- if (tdj[to+1][xy-1] == -1)
- nb=nb + 1;
- if (tdj[to-1][xy]==-1)
- nb=nb + 1;
- if (tdj[to+1][xy] ==-1 )
- nb=nb + 1;
- if (tdj[to-1][xy+1]==-1)
- nb=nb + 1;
- if (tdj[to][xy+1]==-1 )
- nb=nb + 1;
- if (tdj[to+1][xy+1]==-1 )
- nb=nb + 1;
- tdj[to][xy] = nb;
- }
- if (xy == Ligne && to != Colonne)
- {
- xy = xy -10;
- to = to +1;
- }
- }
- }
- void aff2(GtkWidget * window, GtkWidget*table)
- {
- GtkWidget *image;
- int i,o;
- for(i = 1; i< Colonne+1 ; i++)
- {
- for(o = 1; o <Ligne+1; o++)
- {
- image = NULL;
- if(tdv[i][o]== 0)
- image = gtk_image_new_from_file("cache.png");
- if (tdv[i][o] == 2)
- image = gtk_image_new_from_file("mine.png");
- if (tdv[i][o] == 1)
- {
- if(tdj[i][o] == 0)
- image = gtk_image_new_from_file("0.png");
- if(tdj[i][o] == 1)
- image = gtk_image_new_from_file("1.png");
- if(tdj[i][o] == 2)
- image = gtk_image_new_from_file("2.png");
- if(tdj[i][o] == 3)
- image = gtk_image_new_from_file("3.png");
- if(tdj[i][o] == 4)
- image = gtk_image_new_from_file("4.png");
- if(tdj[i][o] == 5)
- image = gtk_image_new_from_file("5.png");
- if(tdj[i][o] == 6)
- image = gtk_image_new_from_file("6.png");
- if(tdj[i][o] == 7)
- image = gtk_image_new_from_file("7.png");
- if(tdj[i][o] == 8)
- image = gtk_image_new_from_file("8.png");
- }
- gtk_grid_attach(GTK_GRID(table), image, i, o + 1, 1, 1);
- }
- }
- }
- static void destroy(GtkWidget *widget, gpointer pointer) {
- exit(EXIT_SUCCESS) ;
- }
- static gboolean delete_event(GtkWidget *widget,GdkEvent *event, gpointer pointer) {
- return FALSE ; // Signal handler continue processing.
- }
- static gboolean on_mouse_clic(GtkWidget *widget, GdkEvent *event, gpointer pointer)
- {
- struct s_data *data = (struct s_data *)pointer;
- int l, c;
- guint typeClic=event->button.button ;
- GdkEventButton *mouse_click = (GdkEventButton *) event ;
- l = mouse_click -> x / 50 +1;
- c = mouse_click -> y / 50;
- fprintf(stdout,"Mouse clic detected at (%d, %d)\n", l, c );
- if (typeClic ==1)
- {
- if ((tdj[l][c] != -1) && (tdv[l][c] != 2))
- {
- tdv[l][c] = 1;
- }
- }
- if (typeClic ==3)
- {
- if(tdv[l][c] ==2)
- {
- tdv[l][c] = 0;
- }
- else if (tdv[l][c]==0)
- tdv[l][c] =2;
- }
- aff2(data->window, data->table);
- return TRUE ; // Signal handler continue processing.
- }
Advertisement
Add Comment
Please, Sign In to add comment