GTK+とC言語を使ったパズルゲーム作成の課題です。3x3等(製作者の任意)に分割したイメージをシャッフルして表示させ、クリックで交換しながら分割前のイメージに戻すというものです。イメージを取り込み表示させるまではできましたが、gdk_pixbuf_new_subpixbuf()を使って分割したイメージを配列に格納して・・・というヒントが与えられているにも関わらず、パズルを作成するにはどうしたらいいのか分かりません。とても難しいです。イメージはなんでも構わないのですが、とりあえず使ったものを添付いたします。
#include <gtk/gtk.h>
#include <stdlib.h>
#define IMAGE_FILE "thecat.png"
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *image;
GtkWidget *box;
GtkWidget *event;
GdkPixbuf *pixbuf;
GError *error = NULL;
/* load the image from a file */
pixbuf = gdk_pixbuf_new_from_file (IMAGE_FILE, &error);
/* create a window with title etc. */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION(app));
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_window_set_title (GTK_WINDOW (window), "Puzzlegame");
gtk_window_set_default_size (GTK_WINDOW (window), 500, 500);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
if (!pixbuf)
{
g_print ("error->core : %d\n", error->code);
g_print ("error->message :\n %s\n", error->message);
}
else
{
g_print ("%d x %d, %d\n",
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf),
gdk_pixbuf_get_rowstride (pixbuf));
image = gtk_image_new_from_pixbuf(pixbuf);
gtk_container_add (GTK_CONTAINER (window), box);
event = gtk_event_box_new();
gtk_box_pack_start (GTK_BOX (box), event, TRUE, TRUE, 10);
gtk_container_add (GTK_CONTAINER (event), image);
gtk_widget_show_all (window);
gtk_main ();
}
}
int
main (int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new (NULL, G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}