注释很详细,可以看看

#include <gtk/gtk.h>
#include <time.h>
void show(GtkButton *button, gpointer user_data);
void replay(GtkButton *button,gpointer user_data);
//GtkWidget是GTK+控件类型,GtkWidget * 能指向任何控件的指针类型。
GtkWidget* l_4;
GtkWidget* l_5;
GtkWidget* l_6;
GtkWidget* l_7;int x1, x2;
int a = 1;
int b = 2;
int c = 3;int main(int argc, char  *argv[])
{gtk_init(&argc,&argv); //初始化GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //创建一个窗口gtk_window_set_title(GTK_WINDOW(window),"鑫哥的小游戏");//设置标题gtk_widget_set_size_request(window,500,300); //设置窗口宽高 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); // 窗口在显示器位置的设置 GTK_WIN_POS_CENTER: 居中gtk_window_set_resizable(GTK_WINDOW(window), FALSE); // 窗口大小不变不能拉伸GtkWidget* table = gtk_table_new(5,3,TRUE);   // 创建一个5行3列的窗口gtk_container_add(GTK_CONTAINER(window),table); //把控件添加到窗口容器里//设置标题中文的 没啥影响GtkWidget* l_0 = gtk_label_new("电脑大战鑫哥"); gtk_table_attach_defaults(GTK_TABLE(table),l_0,1,2,0,1);GtkWidget* l_1 = gtk_label_new("鑫哥");gtk_table_attach_defaults(GTK_TABLE(table),l_1,0,1,1,2);GtkWidget* l_2 = gtk_label_new("VS");gtk_table_attach_defaults(GTK_TABLE(table),l_2,1,2,1,2);GtkWidget* l_3 = gtk_label_new("电脑");gtk_table_attach_defaults(GTK_TABLE(table),l_3,2,3,1,2);//因为下面的可能要变,要全局变量gtk_container_add(GTK_CONTAINER(window),table);//把控件添加到窗口容器里l_4 = gtk_label_new("");  //1.4是上面定义的GtkWidget*1_4 表明是字符串的地址// 下面添加控件到布局容器中 表明这个位置是个字符串;gtk_table_attach_defaults(GTK_TABLE(table),l_4,0,1,2,3);l_5 = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),l_5,1,2,2,3);l_6 = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),l_6,2,3,2,3);//这个应该是最后一行的比分l_7 = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),l_7,1,2,4,5);//创建按钮 GtkWidget* button1 = gtk_button_new_with_label("石头");gtk_table_attach_defaults(GTK_TABLE(table),button1,0,1,3,4);GtkWidget* button2 = gtk_button_new_with_label("剪刀");gtk_table_attach_defaults(GTK_TABLE(table),button2,1,2,3,4);GtkWidget* button3 = gtk_button_new_with_label("布");gtk_table_attach_defaults(GTK_TABLE(table),button3,2,3,3,4);GtkWidget* button4 = gtk_button_new_with_label("重来");gtk_table_attach_defaults(GTK_TABLE(table),button4,2,3,4,5);//连接信号g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL); //这个是结束程序后Linux返回没影响//下面的分别是石头,剪刀,布和重来的信号连接和返回值g_signal_connect(button1,"pressed",G_CALLBACK(show), &a);//int a = 1;代表出石头为1g_signal_connect(button2,"pressed",G_CALLBACK(show), &b);//int b = 2; 代表出剪刀为2g_signal_connect(button3,"pressed",G_CALLBACK(show), &c); //int c = 3;代表出布为3g_signal_connect(button4,"pressed",G_CALLBACK(replay),l_7); //重来//gtk_label_set_text(GTK_LABEL(l_5),"平局");//gtk_label_set_text(GTK_LABEL(l_6),"布");gtk_widget_show_all(window);gtk_main();return 0;
}//判断谁赢和电脑自动
void show(GtkButton *button, gpointer user_data)
{int t;srand((unsigned)time(NULL)); //设置随机种子const char * haha = gtk_button_get_label(button); // 获得按钮的文本内容到haha这个字符串中//printf("%s\n", haha);gtk_label_set_text(GTK_LABEL(l_4),haha); //设置1_4的内容为haha字符串的内容t =  rand() % 3 + 1;  //t为1-3char buf[20];const char* p; // 定义p字符型指针switch(t) {case 1:p = "石头";break;case 2:p = "剪刀";break;case 3:p = "布";break;default:p = "错误";break;}gtk_label_set_text(GTK_LABEL(l_6), p); //设置1_6的内容为p的内容//比较电脑出的拳为t数字==user_data 就是按钮信号连接返回的值//这里的*(int *)是强行转换后去指针指向变量的值//(int*)是强行转换if(t == *(int *)user_data){gtk_label_set_text(GTK_LABEL(l_5), "平");}//特殊情况 if t-1=用户  或者 t=3(布) 并且 t=1(石头),用户为3(布)时候else if(t-1 == *(int *)user_data || (t == 1 && *(int*)user_data == 3)){gtk_label_set_text(GTK_LABEL(l_5), "胜"); //  用户胜利x1++; //用户的积分+1;}else{gtk_label_set_text(GTK_LABEL(l_5), "败");  //其他情况用户输x2++;  //电脑积分+1;}//把格式化的数据写入某个字符串中,即发送格式化输出到 string 所指向的字符串sprintf(buf, "%d:%d", x1, x2); // 把x1,x2写进buf字符串 为 %d:%d;gtk_label_set_text(GTK_LABEL(l_7), buf); //设置1_7的内容为buf的内容,是一个比分字符串return;
}
//这个是重来函数
void replay(GtkButton *button,gpointer user_data)
{//const char * haha = gtk_button_get_label(button);gtk_label_set_text(GTK_LABEL(user_data),"0:0");//把1_7的内容设置给 "0:0"比分串,重新了return;
}

运行效果如下



参考文献:https://blog.csdn.net/jk_kan/article/details/106861150?utm_source=app&app_version=4.5.5
link

下面讲解下我简单的流程

#include <gtk/gtk.h>
GtkWidget* label_dns;
GtkWidget* label_vss;
GtkWidget* label_wjs;
void my_haha(GtkButton* button, gpointer user_data);
int main(int argc, char  *argv[])
{gtk_init(&argc,&argv);GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);GtkWidget* table = gtk_table_new(4,3,TRUE);gtk_container_add(GTK_CONTAINER(window),table);GtkWidget* label_title = gtk_label_new("猜拳游戏");gtk_table_attach_defaults(GTK_TABLE(table),label_title,0,3,0,1);GtkWidget* label_dn = gtk_label_new("电脑");gtk_table_attach_defaults(GTK_TABLE(table),label_dn,0,1,1,2);GtkWidget* label_vs = gtk_label_new("VS");gtk_table_attach_defaults(GTK_TABLE(table),label_vs,1,2,1,2);GtkWidget* label_wj = gtk_label_new("玩家");gtk_table_attach_defaults(GTK_TABLE(table),label_wj,2,3,1,2);//全局的labellabel_dns = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),label_dns,0,1,2,3);label_vss = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),label_vss,1,2,2,3);label_wjs = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),label_wjs,2,3,2,3);GtkWidget* button_st = gtk_button_new_with_label("石头");gtk_table_attach_defaults(GTK_TABLE(table),button_st,0,1,3,4);GtkWidget* button_jd = gtk_button_new_with_label("剪刀");gtk_table_attach_defaults(GTK_TABLE(table),button_jd,1,2,3,4);GtkWidget* button_bu = gtk_button_new_with_label("布儿");gtk_table_attach_defaults(GTK_TABLE(table),button_bu,2,3,3,4);gtk_widget_show_all(window);g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);g_signal_connect(button_st,"pressed",G_CALLBACK(my_haha),NULL);g_signal_connect(button_jd,"pressed",G_CALLBACK(my_haha),NULL);g_signal_connect(button_bu,"pressed",G_CALLBACK(my_haha),NULL);gtk_main();return 0;
}
void my_haha(GtkButton* button, gpointer user_data)
{//1.获取按钮内容const char * but = gtk_button_get_label(button);//2.设置到label_wjs上gtk_label_set_text(GTK_LABEL(label_wjs),but);//3.生成随机的012//4.设置对应的在label_dns上srand(time(NULL));int dn = rand()%3;if(dn == 0)gtk_label_set_text(GTK_LABEL(label_dns),"石头");else if(dn == 1)gtk_label_set_text(GTK_LABEL(label_dns),"布儿");elsegtk_label_set_text(GTK_LABEL(label_dns),"剪刀");//5.比较//先将自己的也变成012int wj = 0;if(0==strcmp(but,"石头"))wj = 0;else if(0==strcmp(but,"布儿"))wj = 1;elsewj = 2;if(wj == 0 && dn == 2)gtk_label_set_text(GTK_LABEL(label_vss),"玩家赢");else if(wj == 2&& dn == 0)gtk_label_set_text(GTK_LABEL(label_vss),"电脑赢");else if(wj > dn)gtk_label_set_text(GTK_LABEL(label_vss),"玩家赢");else if(wj<dn)gtk_label_set_text(GTK_LABEL(label_vss),"电脑赢");elsegtk_label_set_text(GTK_LABEL(label_vss),"平局");//6.设置结果在label_vss上
}

我的流程:

第一步写界面:已经知道分行分列

#include <gtk/gtk.h>
//定义全局变量
//就是那几个需要变的量
GtkWidget* dns;  //表示电脑输出的结果
GtkWidget* yhs;  //表示用户输出的结果
GtkWidget* vss;  //表示VS输出的结果int main(int argc, char  *argv[])
{gtk_init(&argc,&argv);//初始化GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建窗口GtkWidget* table = gtk_table_new(4,3,TRUE); //创建4行3列gtk_container_add(GTK_CONTAINER(window),table);//把控件添加到窗口容器里//标题跟下面的“电脑VS玩家“GtkWidget* label_title = gtk_label_new("猜拳游戏");gtk_table_attach_defaults(GTK_TABLE(table),label_title,0,3,0,1);GtkWidget* label_dn = gtk_label_new("电脑");gtk_table_attach_defaults(GTK_TABLE(table),label_dn,0,1,1,2);GtkWidget* label_vs = gtk_label_new("VS");gtk_table_attach_defaults(GTK_TABLE(table),label_vs,1,2,1,2);GtkWidget* label_wj = gtk_label_new("玩家");gtk_table_attach_defaults(GTK_TABLE(table),label_wj,2,3,1,2);

运行如下

然后该弄全局变量
这几个了 电脑下面那行

//全局的labeldns = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),dns,0,1,2,3);vss = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),vss,1,2,2,3);yhs = gtk_label_new("");gtk_table_attach_defaults(GTK_TABLE(table),yhs,2,3,2,3);

运行如下

把最下面的三个按钮写了:

//按钮GtkWidget* button_st = gtk_button_new_with_label("石头");gtk_table_attach_defaults(GTK_TABLE(table),button_st,0,1,3,4);GtkWidget* button_jd = gtk_button_new_with_label("剪刀");gtk_table_attach_defaults(GTK_TABLE(table),button_jd,1,2,3,4);GtkWidget* button_bu = gtk_button_new_with_label("布");gtk_table_attach_defaults(GTK_TABLE(table),button_bu,2,3,3,4);

运行如下

到这里第一部分完成

进行功能部分
找到按钮的位置
在下面写信息连接
my_haha是函数
三个按钮按下实现的功能都一样,所以让三个按钮调用一个函数就行了

//信号连接g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);g_signal_connect(button_st,"pressed",G_CALLBACK(my_haha),NULL);g_signal_connect(button_jd,"pressed",G_CALLBACK(my_haha),NULL);g_signal_connect(button_bu,"pressed",G_CALLBACK(my_haha),NULL);

然后定义函数

void my_haha(GtkButton* button, gpointer user_data)
{//1.获取按钮内容const char * but = gtk_button_get_label(button);//2.设置到yhs 上gtk_label_set_text(GTK_LABEL(yhs),but);//3.生成随机的012//4.设置对应的在dns上srand(time(NULL)); //设置随机种子int dn = rand()%3;//0-2if(dn==0)//如果电脑为0,赋值给dns为石头gtk_label_set_text(GTK_LABEL(dns),"石头");else if(dn == 1)gtk_label_set_text(GTK_LABEL(dns),"布");elsegtk_label_set_text(GTK_LABEL(dns),"剪刀");

比较语句如下

//5 比较//先将用户的变为0,1,2;int yh=0;if(0==strcmp(but,"石头"))yh=0;if(0==strcmp(but,"布"))yh=1;elseyh=2;if (yh==0&&dn==2) //用户为石头,电脑是剪刀,用户赢//6.设置结果到vss上gtk_label_set_text(GTK_LABEL(vss),"玩家赢");else if(yh==2&&dn==0)gtk_label_set_text(GTK_LABEL(vss),"电脑赢");else if (yh>dn) //除了上面的特殊情况,只要用户数字大//  就是用户赢gtk_label_set_text(GTK_LABEL(vss),"玩家赢");else if(yh<dn)gtk_label_set_text(GTK_LABEL(vss),"电脑赢");else gtk_label_set_text(GTK_LABEL(vss),"平局");}

运行

猜拳游戏(C语言-Linux-简单可视化)相关推荐

  1. java猜拳游戏代码_Java实现简单猜拳游戏

    本文实例为大家分享了java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下 看网上的猜拳游戏那么多,但都是用switch输入数字,所以用if嵌套,写一个简单的猜拳游戏 package game; ...

  2. 2048游戏c语言linux简易代码,C语言实现2048游戏代码

    本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格) ...

  3. 猜拳游戏c语言代码流程图,这是一个猜拳游戏的程序 大家有更好的解决方法么?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include /* 显示程序的使用方法 */ void help() { printf("Usage : \nFind and/or rep ...

  4. 简单五子棋游戏c语言简单,C语言制作简单的五子棋游戏

    原标题:C语言制作简单的五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是 ...

  5. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  6. 如何用C语言实现【猜拳游戏】

    前言 在学习了循环.分支.和函数之后,可以写一些简单的小游戏来给自己的编程之路增添一份乐趣.不仅提升了编码能力,还可以边学边玩,简直妙哉妙哉! 目录 ⛄一.游戏逻辑 ❄️ 二.思维导图 ☁️ 三.游戏 ...

  7. c语言猜拳游戏实训报告,Java猜拳小游戏程序设计实验报告.doc

    Java程序设计实验报告 班级: 学号: 姓名: 实验题目:猜拳小游戏 实验要求: 用java编写一个人机对战的猜拳小游戏.人选择性出拳,电脑随机出拳,判断输赢,记录输赢情况.有简单的操作界面. 实验 ...

  8. 【C语言/C++】项目实战:猜拳游戏(源码详解)

    这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 下面的代码会实现一个猜拳游戏,让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后 ...

  9. c语言猜拳游戏中出现的关键词,C语言猜拳游戏代码及分析

    赋值操作符.比较操作符.算术操作符.逻辑操作符.位域操作符,如"="."+="">="."<="." ...

  10. c++switch实现猜拳_C语言实现人机猜拳游戏,非常适合C++小白练习的项目!

    学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导和学习资料! 本文福利在文末! 这是一个简单的猜拳游戏(剪子包子锤),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后 ...

最新文章

  1. 现状,疑问,思考,探索,选择
  2. jquery each函数的使用
  3. leetcode算法题--完美数
  4. java.math.BigDecimal()的用法
  5. 03013_JDBC工具类
  6. 不要把时间画在抽奖上。。。去学习吧。。。
  7. php用正则_php 正则表达式匹配(持续更新)
  8. Android菜鸟的成长笔记(13)——异步任务(Async Task)
  9. Java EE 8 MVC:全局异常处理
  10. c 富文本html编辑器,富文本HTML编辑器UEditor
  11. excel附件下载 Response 参数设置 (自定义文件并并解决中文乱码)
  12. 计算机办公应用软件初级,电脑办公软件有哪些?桌面便签办公软件基础教程
  13. 深圳人才引进,大学生,公司的福利
  14. Linux中的挂载命令
  15. 趣味俄罗斯方块代码分享(C语言)
  16. 设计模式微课版来啦——《设计模式(第2版)》
  17. 计算机网络计算下一跳
  18. vscode安装mindmap插件之后无法打开.km文件,vscode中文版mindmap安装
  19. python——自动化测试——API接口测试
  20. 金庸的小说人生(1)

热门文章

  1. 中国农业大学计算机专业硕士研究生,中国农业大学计算机专业2020考研复试分数线...
  2. Java程序:编程模拟和表达老虎Tiger和猫咪Cat等具体种类的生物都是一种动物。即它们都具有共同的名字属性name和运动行为run,只不过具体的名字叫法不同,运动行为的具体方式也不同。
  3. 流量控制理论与Sentinel
  4. 计算机教学楼起名,给教学楼起名字(富有诗意教学楼名字)
  5. 职场沟通10个小技巧 让你迅速融入团队
  6. lighttpd 配置 ssl证书
  7. bios卡+型号+hp服务器,HPE Gen9 server UEFI BIOS下升级BIOS 阵列卡 HBA卡固件的操作方法...
  8. 运行docker镜像,出现Exited (137) 5 seconds ago问题
  9. linux下设置双系统选项,linux双系统【操作步骤】
  10. 基于AdaBoost的人脸检测 含源码