趣味C语言之猜数游戏
2019-08-02 本文已影响0人
凌云struggle
-
游戏简述
系统随机产生4个0~9不相同的数字,从小到大排序,玩家从终端输入4个从小到大排好序的不相同数字,如果数字相同并且位置相同,记为A;如果数字相同但是位置不同,记为B。用户根据每次输入数字的反馈,进行逻辑推理,直到猜出答案。
-
程序运行效果
猜数游戏.png
-
设计思路
- 产生4个不相同的随机数
- 将4个数从小到大进行排序(插入排序)
- 游戏开始,将输入的数字与原始数字进行比较,通过两重循环实现,在数字相同的情况下,如果i与j相等,则A++;否则B++
- 如果A等于4,则跳出循环,游戏结束;否则继续输入,同时A,B的值还原
-
重难点呈现
-
如何产生随机数
- 导入头文件
#include <stdlib.h> #include <time.h>
- 使用种子
srand(1); //每次执行种子相同,生成相同的随机数 srand((unsigned int)time(NULL)); //每次执行种子不同,生成不同的随机数 int temp = rand() % 10 //产生0~9的随机数,以此类推
- 指定范围随机数
srand((unsigned)time(null));
(a,b) (rand()%(b-a+1))+a-1
[a,b) (rand()%(b-a))+a
(a,b] (rand()%(b-a))+a+1
[a,b] (rand()%(b-a+1))+a
-
如何实现插入排序
//边产生 边排序 插入排序 //寻找这个数对应的位置 int j = 0; for(;j <i;j++){ //j对应的数字和产生的数字进行比较 if(temp < originalArray[j]){ //j后面的内容往后移动 腾出空间 for(int k = i;k > j;k--){ originalArray[k] = originalArray[k-1]; } break; } } //写入到数组中 originalArray[j] = temp; }
ps:想了解更多的C语言排序方法,关注我接下来的更新!
-
-
完整代码实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
//保存原始数据
int originalArray[4] = {};
//保存猜测数据
int guessArray[4] = {};
//计算数字正确且位置正确的个数
int countA = 0;
//计算数字正确但位置错误的个数
int countB = 0;
srand((unsigned int)time(NULL));
for(int i = 0;i < 4;i++){
bool isExist = false;
int temp = 0;
while(1){
//产生一个随机数
temp = rand() % 10;
//判断是否已经存在
for(int j = 0;j <i;j++){
if(originalArray[j] == temp){
//重复了,停止比较,继续产生新的
isExist = true;
break;
}
}
//1.重复了,break
//2.遍历数组没有重复的
if(isExist == false){
break;
}
}
//边产生 边排序 插入排序
//寻找这个数对应的位置
int j = 0;
for(;j <i;j++){
//j对应的数字和产生的数字进行比较
if(temp < originalArray[j]){
//j后面的内容往后移动 腾出空间
for(int k = i;k > j;k--){
originalArray[k] = originalArray[k-1];
}
break;
}
}
//写入到数组中
originalArray[j] = temp;
}
//开始游戏
while (1) {
//输入猜测的数据
printf("请输入猜测的数字:\n");
for (int i = 0; i < 4; i++) {
scanf("%d",&guessArray[i]);
}
//将产生的数与输入的数进行比较
for (int i = 0; i < 4; i++) { //控制原始数字
for (int j = 0; j < 4; j++) { //控制输入
if (originalArray[i] == guessArray[j]) {
if (i == j) {
//数字相同且位置相同
countA++;
}else{
//数字相同但位置不同
countB++;
}
}
}
}
if (countA == 4) {
//猜对了!
printf("Congratulations!!!\n");
break;
}else{
printf("%dA%dB\n",countA,countB);
//清零
countA = 0;
countB = 0;
}
}
// //输出产生的数
// for(int i =0;i <4;i++){
// printf("%d",originalArray[i]);
// }
// printf("\n");
return 0;
}
-
心得体会
通过这个小demo的练习,学习到了如何去生成随机数,尽管中间遇到了一些小障碍,但是解决问题的同时也学到了很多。当然,最有意思的是,这个demo本身就是一款十分锻炼逻辑思维能力的小游戏,你可以来试试,看看自己的逻辑思维能力如何