diff --git a/c/gtk3/mouse-maze/maze.png b/c/gtk3/mouse-maze/maze.png
new file mode 100644
index 0000000..ee691d5
Binary files /dev/null and b/c/gtk3/mouse-maze/maze.png differ
diff --git a/c/gtk3/mouse-maze/maze2.png b/c/gtk3/mouse-maze/maze2.png
new file mode 100644
index 0000000..48084a9
Binary files /dev/null and b/c/gtk3/mouse-maze/maze2.png differ
diff --git a/c/gtk3/mouse-maze/mousemaze.c b/c/gtk3/mouse-maze/mousemaze.c
new file mode 100644
index 0000000..32d06d7
--- /dev/null
+++ b/c/gtk3/mouse-maze/mousemaze.c
@@ -0,0 +1,72 @@
+#include <gtk/gtk.h>
+
+gboolean play = FALSE;
+GtkWidget *image;
+GtkWidget *label;
+
+
+gboolean motion(GtkWidget *widget, GdkEventMotion *event, gpointer data) {
+  if (play) {
+    int x = (int)event->x;
+    int y = (int)event->y;
+    
+    GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(image));
+    guchar *pixels = gdk_pixbuf_get_pixels(pixbuf);
+    int stride = gdk_pixbuf_get_rowstride(pixbuf);
+    guint pixel = *(guint*)(pixels + y*stride + sizeof(guint)*x);
+    
+    if (pixel == 0xff000000) {
+      gtk_label_set_text(GTK_LABEL(label), "You looooze");
+      play = FALSE;
+    } else
+    if (pixel == 0xff00ffff) {
+      gtk_label_set_text(GTK_LABEL(label), "You WIN!!!");
+      play = FALSE;
+    }
+  }
+  return TRUE;
+}
+
+void clicked(GtkButton *button, gpointer data) {
+  gtk_label_set_text(GTK_LABEL(label), "Play");
+  play = TRUE;
+}
+
+void activate(GtkApplication* app, gpointer data) {
+  GtkWidget *window = gtk_application_window_new(app);
+  gtk_container_set_border_width(GTK_CONTAINER(window), 10);
+  
+  GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
+  gtk_container_add(GTK_CONTAINER(window), hbox);
+  
+  GtkWidget *event_box = gtk_event_box_new();
+  g_signal_connect(event_box, "motion-notify-event", G_CALLBACK(motion), NULL);
+  gtk_widget_add_events(event_box, GDK_POINTER_MOTION_MASK);
+  gtk_container_add(GTK_CONTAINER(hbox), event_box);
+  
+  // required image format is 8-bit RGBA
+  image = gtk_image_new_from_file("maze.png");
+  gtk_container_add(GTK_CONTAINER(event_box), image);
+
+  GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add(GTK_CONTAINER(hbox), vbox);
+  
+  GtkWidget *button = gtk_button_new_with_label("Start");
+  g_signal_connect(button, "clicked", G_CALLBACK(clicked), NULL);
+  gtk_widget_set_size_request(button, 150, 20);
+  gtk_container_add(GTK_CONTAINER(vbox), button);
+  
+  label = gtk_label_new("--");
+  gtk_container_add(GTK_CONTAINER(vbox), label);
+
+  gtk_widget_show_all(window);
+}
+
+int main(int argc, char **argv) {
+  GtkApplication *application = gtk_application_new(NULL, 0);
+  g_signal_connect(application, "activate", G_CALLBACK(activate), NULL);
+  int status = g_application_run(G_APPLICATION(application), argc, argv);
+  g_object_unref(application);
+  return status;
+}
+