原标题:如何用c语言和GTK写一个扔色子的程序?
今来写一个简单版本的扔色子的程序。
如果只用C语言来写,就随机数就可以了,现在加上了图形界面,代码如下:
#include
#include
static GtkWidget *ourgif;
gint i = 0;
int flag=0;
void change_bmp()
{
srand(time(NULL));
i = rand() % 6; //取值范围是0~5
if(flag==0){
g_print("flag===%d i===%d\n",flag,i);
char *file = g_strdup_printf("%d.png", i);
gtk_image_set_from_file(GTK_IMAGE(ourgif), file);
}
}
void deal_pressed(GtkButton *button, gpointer user_data)
{
flag=1;
}
int main(int argc, char **argv)
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *button;
GtkWidget *label;
gint num = 0;
gchar *filename;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
label = gtk_label_new("通过时钟控制的动画");
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);
ourgif = gtk_image_new_from_file("1.png");
gtk_box_pack_start(GTK_BOX(vbox), ourgif, FALSE, FALSE, 5);
gtk_timeout_add(150, (GtkFunction)change_bmp, NULL);
button = gtk_button_new_with_label("暂停");
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
g_signal_connect(button, "pressed", G_CALLBACK(deal_pressed), NULL);
gtk_widget_show_all(window);
gtk_main();
return TRUE;
}
效果:
gtk摇色子
还算比较简单的,中间还有点问题,就是摇色子的速度问题,上边这个例子产生六个随机数。很容易出现很多次相同的一个数,导致图片变化缓慢,大家可以思考下怎末能产生0-5之间的随机数,而且尽量减少重复。返回搜狐,查看更多
责任编辑: