选修了GTK的课,也没深入学习,最后作业就做了这个小玩意,Gtk下的数独小游戏,UBUNTU和SUSE下顺利编译且能玩,代码写得有点繁琐,
也没涉及到GDK,有点遗憾,如果以后有机会的话,可能还会深入学习Gtk吧,目前先搁一阵子好了。
不过GTK各种函数本身也很长就是了,地图生成函数不是很完美,可以生成合理的数独地图,但数独的解实在太多了,导致第二列开头几个数字总是不变,
比如第二列第一个数总是1。
其实可以用随机数序列试探的方法,但是还没有试
函数说明列表:
程序函数列表:
1. void print_map() 打印地图信息,调试用
2. int search(int number,int x,int y) 判断把数number放入行列坐标(x,y)是否符合当前已有地图的要求,是则返回1,否则返回0;
3. void on_win() 游戏胜利时触发的回调函数,跳出对话框提醒;
4. void check_win() 检查是否胜利,胜利则调用3中的on_win()
5. void on_num_click() 点击地图时获取坐标
6. void on_change_click() 在已获取坐标的情况下,点击数字键,可将地图更新
7. void set_bn_number() 用户界面按钮标签更新函数
8. void initialize() 初始化函数
9. int generate(int choice,int row,int column)生成地图函数
10. void firstcolumn() 随机生成第一列
11. void start() 随机挖空地图,将用户界面按钮标签置“ ”
12. void restart() 重新开始游戏函数
13. void setdifficulty(GtkWidget * widget,gpointer data) 设置难度的函数
14. void quit(); 退出菜单调用函数
15. void about_dialog(GtkWidget*widget,GtkWindow * parent)关于菜单调用函数
对了输出命令是这个:
gcc -std=c99 -o sudoku sudoku.c `pkg-config gtk+-2.0 --cflags --libs `
#include <gtk/gtk.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <glib.h>
int can[10][10];
int check[9][9];
int bk_map[9][9];
int map[9][9];
int num[9][9];
int ran[10];
int g_row=0,g_column=0;
int sum=0;
int difficulty=1;
GtkWidget *bn[9][9];
GtkWidget *g_window;
void print_map()