如何用c语言和GTK写一个扔色子的程序?

yumo6662周前 (09-06)技术文章8

今来写一个简单版本的扔色子的程序。

如果只用C语言来写,就随机数就可以了,现在加上了图形界面,代码如下:

#include <gtk/gtk.h>
#include <time.h>
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之间的随机数,而且尽量减少重复。

相关文章

「初识C语言」编译过程_c语言编译过程详解

C语言编译过程认识C编译执行过程,是C学习的开端。我们来简单说C语言从编码编译到执行要经历一下过程:C源代码编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目...

C语言模块程序设计?源文件和头文件如何划分模块?linux C第32讲

6 .c源文件和.h头文件配合使用假设我们开发一个图书馆管理系统,读者的信息使用reader.c和reader.h文件来管理,那么,读者在登记的时候,需要输入年龄,那么,可以设计如下的函数,接收登记读...

C程序设计之:1-1/2+1/3-... + 1/n 的和

求:1 - 1/2 + 1/3 - .... + 1/n 的和。和这道题不同的是,该题目里面,偶数项是负数,奇数项是正数。#include <iostream> using namespa...

C语言也可以制作视频播放器?只需5分钟即可制作一个自己的播放器

上一节简要的介绍了如何编写C语言程序调用 FFmpeg 库,读取视频文件,并将之逐帧转换为 ppm 图片,最后通过 save_frame() 函数将转换后的 ppm 图片保存到磁盘。本节将在上一节的基...

一起学《C程序设计》第六课——数组、字符串及实战练习

在之前的第三课中学习了基本数据类型,第五课学习了循环结构程序,做练习的时候处理的是一些有规律的数据,比如1~100的正整数,而当我们面对一堆没有规律的数据时该怎么去循环处理呢?把数据组合在一起构成一个...

每天一道c语言编程题,第四题(c语言经典 求素数)

编写一个程序,输入一个整数n,输出n以内的所有素数。#include <stdio.h>int main() { int n, i, j, flag; printf("请输入一...