下面的代码会实现一个猜拳游戏, 让你与电脑对决你出的拳头由你自己决定, 电脑则随机出拳, 最后判断胜负
C 语言是面向过程的, 而 C++是面向对象的 C 和 C++ 的区别:
C 是一个结构化语言, 它的重点在于算法和数据结构 C 程序的设计首要考虑的是如何通过一个过程, 对输入 (或环境条件) 进行运算处理得到输出 (或实现过程(事务) 控制)
C++, 首要考虑的是如何构造一个对象模型, 让这个模型能够契合与之对应的问题域, 这样就可以通过获取对象的状态信息得到输出或实现过程 (事务) 控制 所以 C 与 C++ 的最大区别在于它们的用于解决问题的思想方法不一样之所以说 C++ 比 C 更先进, 是因为 设计这个概念已经被融入到 C++ 之中
C 与 C++ 的最大区别: 在于它们的用于解决问题的思想方法不一样之所以说 C++ 比 C 更先进, 是因为 设计这个概念已经被融入到 C++ 之中 , 而就语言本身而言, 在 C 中更多的是算法的概念那么是不是 C 就不重要了, 错! 算法是程序设计的基础, 好的设计如果没有好的算法, 一样不行而且, C 加上好的设计也能写出非常好的东西
代码实现:
- #include#include#include int main() {
- char gamer; // 玩家出拳
- int computer; // 电脑出拳
- int result; // 比赛结果
- // 为了避免玩一次游戏就退出程序, 可以将代码放在循环中
- while (1) {
- printf("这是一个猜拳的小游戏, 请输入你要出的拳头:");
- printf("A: 剪刀 B: 石头 C: 布 D: 不玩了");
- scanf("%c%*c", &gamer);
- switch (gamer) {
- case 65 | 97 : // A | a
- gamer = 4;
- break;
- case 66 | 98 : // B | b
- gamer = 7;
- break;
- case 67 | 99 : // C | c
- gamer = 10;
- break;
- case 68 | 100 : // D | d
- return 0;
- default:
- printf("你的选择为 %c 选择错误, 退出...", gamer);
- getchar();
- system("cls"); // 清屏
- return 0;
- break;
}小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
- srand((unsigned)time(NULL)); // 随机数种子
- computer=rand()%3; // 产生随机数并取余, 得到电脑出拳
- result=(int)gamer+computer; // gamer 为 char 类型, 数学运算时要强制转换类型
- printf("电脑出了");
- switch (computer)
- {
- case 0:printf("剪刀");break; //4 1
- case 1:printf("石头");break; //7 2
- case 2:printf("布");break; //10 3
- }
- printf("你出了");
- switch (gamer)
- {
- case 4:printf("剪刀");break;
- case 7:printf("石头");break;
- case 10:printf("布");break;
- }
- if (result==6||result==7||result==11) printf("你赢了!");
- else if (result==5||result==9||result==10) printf("电脑赢了!");
- else printf("平手");
- system("pause>nul&&cls"); // 停并清屏
- }
- return 0;
- }
代码分析
1) 首先, 我们需要定义 3 个变量来储存玩家出的拳头 (gamer) 电脑出的拳头 (computer) 和最后的结果(result), 然后给出文字提示, 让玩家出拳
接下来接收玩家输入:
scanf("%c%*c",&gamer); 注意: 由于每次输入以回车结束, 缓冲区中除了玩家输入的字母, 还有回车符回车符要跳过, 以免影响下次输入 Scanf() 函数的格式控制字符串个数可以多于参数个数, scanf("%c%*c",&gamer); 的作用是从缓冲区多输出一个字符(回车符), 却不赋给任何变量
玩家输入结束, 使用 switch 语句判断输入内容, 65(A)97(a)66(B)98(b)67(C)99(c)68(D)100(d)为相应字符的 ASCII 码
注意: system("cls"); 语句的作用是清屏 System() 函数用来执行 dos 命令, 这里相当于在 dos 里输入 cls 命令
2) 玩家出拳结束, 电脑开始出拳
电脑通过产生随机数来出拳:
srand((unsigned)time(NULL)); // 为了避免多次运行结果相同, 故在前面加入上(需要 time.h)computer=rand()%3; // 获取 0~2 的随机数
最后通过玩家和电脑出拳的和来判断输赢:
result=(int)gamer+computer;// ...if (result==6||result==7||result==11) printf("你赢了!");else if (result==5||result==9||result==10) printf("电脑赢了!");else printf("平手");
这是一个很巧妙的算法, 玩家和电脑出拳不同, result 的值就不同, 且不会重复, 见下表:
电脑 -- 玩家石头 4 剪刀 7 布 10
石头 04710
剪刀 15811
布 26912
3) 每次猜拳结束, 暂停并清屏, 进入下一次猜拳: 小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
纯文本复制 system("pause>nul&&cls"); // 暂停运行和清屏
这些是 C/C++ 能做的
服务器开发工程师人工智能云计算工程师信息安全 (黑客反黑客) 大数据 数据平台嵌入式工程师流媒体服务器数据控解图像处理音频视频开发工程师游戏服务器分布式系统游戏辅助等
来源: http://www.jianshu.com/p/35966b24c3bd