写个游戏:猜数字(入门级,选择与循环)

写⼀个猜数字游戏
游戏要求:

  1. 电脑⾃动⽣成1~100的随机数
  2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束
    (笔者会给优化一下,限制次数)

1.游戏代码中用到的补充内容:rand,srand,time(了解过的可以直接去文章后部分)

1.1 rand函数

rand函数是用来生成随机数的,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是
依赖编译器上实现的,但是⼤部分编译器上是32767。

rand函数原型如下:

int rand(void);//void可加可不加

使用时要包含头文件
用实例理解一下:

#include
#include
int main()
{
  printf("%d\n",rand());
  printf("%d\n",rand());
  printf("%d\n",rand());
  printf("%d\n",rand());

}

写个游戏:猜数字(入门级,选择与循环)_第1张图片
再来运行一遍看看生成的数
写个游戏:猜数字(入门级,选择与循环)_第2张图片
一模一样

得出结论:rand生成的是伪随机数,即是通过某种算法得到的数,这个数是一个叫“种子”的基准值,一般情况下“种子的值默认是1

1.2srand

用来初始化“种子”
原型:

void srand(unsigned int seed)

注意:srand初始化的种子是unsigned int 类型
rand生成随机数前,先调用srand初始化的seed来当作种子,然后开始计算并生成一系列数
如果srand初始化的种子在不断变化,那么rand生成的数也会不断变化
但上面的操作中,两次运行输出的数一摸一样,说明srand的初始化值是不变的

1.3time

时间是时刻发生改变的,很适合用来当“种子”
那这时候就需要time函数了

time函数会返回1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒,类型是32位或64位的整型类型

使用包含头文件:

返回时间戳的格式:

time(NULL);

2.正确生成随机数

我们把一开始的代码改写一下,使其生成真正的随机数:

#include
#include
#include
int main()
{
  srand((unsigned int)time(NULL));
  printf("%d\n",rand());
   printf("%d\n",rand());
    printf("%d\n",rand());
     printf("%d\n",rand());
return 0;
}     

将time(NULL)作为种子
time前面(insigned int)是进行强制类型转换,转换成unsigned int类型
运行结果:

写个游戏:猜数字(入门级,选择与循环)_第3张图片
写个游戏:猜数字(入门级,选择与循环)_第4张图片
不一样了,这里生成随机数就成功啦

3.在范围内生成随机数

这里可以用取余的方法,固定区间

如果要生成0~99及以内的

rand()%100;//余数是0~99

生成1~100的

rand()%100+1//当然可以直接101,这里笔者为了得出规律

生成100~200

100+rand()%100+1

生成a~b之间的:

a+rand()%(b-a)+1

4.最终游戏代码

#include
#include
#include
void menu()
{
    printf(
        " ******************\n"
        " ***1.play*********\n"
        " ***0.exit*********\n"
        " ******************\n");
}

void game()
{
    printf("请输入数字\n");
    int i = rand() % 100 + 1;//生成随机数
    int a = 0;//存放输入
    int deter = 5;//5次机会
    while (deter)//当deter>0时进入循环
    {
        scanf("%d", &a);
        if (a > i)
           { printf("猜大了\n");
             printf("还有%d次机会\n", deter - 1);
           }  
        else if (a < i)
           { printf("猜小了\n");
             printf("还有%d次机会\n", deter - 1);
           }
        else
        {   printf("\a");//蜂鸣转义字符
            printf("恭喜你,猜对了!\n");
            break;
        }
        deter -= 1; //用一次机会少一次       
    }
    if (deter == 0)
        printf("哈哈失败了\n");
}
//用函数的形式,会更简洁清晰

int main()
{
  int choice = 0;
    
    srand((unsigned int)time(NULL));
    
        do
        {
            printf("\n\n");
            menu();//先打印菜单
            printf("请选择:>\n");
            scanf("%d", &choice);
                switch (choice)
                {
                case 1:
                    game();
                        break;
                case 0:
                    printf("游戏结束\n");
                    break;
                default:
                    printf("输入错误,重新输入\n");
                }
           
            
        } while (1);//一直循环

            return 0;
}



来玩一玩:
写个游戏:猜数字(入门级,选择与循环)_第5张图片
代码是笔者自己手敲,点赞拿走~

你可能感兴趣的:(游戏,服务器,运维,c语言,笔记,学习方法)