猜数字游戏

今天我们来实现一个简单的游戏:猜数字游戏。

没有冗乱复杂的逻辑,也没有图形化界面的实现,我们用C语言最简单最基础的代码来实现它。

写代码最重要的是写代码的思路,而不是写出来的代码,所以我注重讲解写作思路。


 首先,明确游戏的步骤。

1.程序会随机生成一个1—100之间的随机数。

2.猜数字

  • 猜小了,程序会告诉你“猜小了,继续猜”
  • 猜大了,程序会告诉你“猜大了,继续猜”
  • 猜对了,程序会告诉你“恭喜你,猜对了”

3.游戏可以反复玩 


然后,我们开始一步步完成游戏的具体实现

1.先写出main函数

我们先打印一个菜单,当做游戏的入口。

菜单我们设计出两个选项:

  1. 输入0:表示退出游戏(exit)
  2. 输入1:表示开始游戏(play)
  3. 其他:  表示选择错误,需要重新输入

菜单中有输入,我们定义一个input变量,运用scanf函数让input从键盘端接收数据。

代码实现 :

#include<stdio.h>

void menu()               //游戏菜单的具体实现
{
    printf("**********************************\n");
    printf("**********    1.play    **********\n");
    printf("**********    0.exit    **********\n");
    printf("**********************************\n");
}

int main()
{
    int input = 0;        //创建变量的同时最好给一个初始值
    menu();               //打印菜单
    printf("请选择>:");   //选择是否开始游戏
    scanf("%d", &input);  //input从键盘端接收值,注意地址符
    switch(input)
    {
    case 1:               //输入1:表示开始游戏
        game();           //game函数中是猜数字的整个逻辑,此处还未实现
        break;
    case 0:               //输入0:表示退出游戏
        break;
    default:              //其他:表示选择错误,需要重新输入
        printf("选择错误,请重新输入!\n");
        break;
    }
    return 0;
}

2.实现游戏的反复

反复,表示循环,我们先挑选哪一种循环游戏最适合猜数字游戏的实现。

用户点开游戏直接打印菜单,选择是否开始游戏,说明至少会打印一次菜单,选择do while语句。

我们用do while语句实现游戏的反复:

#include<stdio.h>

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

int main()
{
    int input = 0;
    do{      //实现循环
        menu();
        printf("请选择>:");
        scanf("%d", &input);
        switch(input)
        {
        case 1:
            game();
            break;
        case 0:
            break;
        default:
            printf("选择错误,请重新输入!\n");
            break;
        }
    }while(input);
    return 0;
}
//用户输入1,表示进行一次游戏,同时循环不会结束,还会再打印一次菜单,用户需再进行一次输入。
//用户输入0,表示退出游戏,同时循环结束,直接退出程序。
//用户输入其他数字,不会进行游戏,同时循环不会结束,还会再打印一次菜单,用户需再进行一次输入。

3.游戏的具体实现

 上述代码已经完成了反复进入游戏的功能,接了来我们来进行游戏的实现。

用户输入1时表示开始游戏,我们在switch语句中的case1中的game函数中完成游戏的具体实现。

游戏是猜数字,我们得先生成一个随机数才能够进行猜的步骤。

1.生成随机数:

void game()
{
    srand((unsigned)time(NULL));
    int random_num = rand()%100+1;    //生成1—100之间的随机数
    //不可以写成rand()%101,这样生成的是0—100之间的随机数
}
//rand函数是专门用来生成随机数的
//rand函数返回的是0~RAND_MAX(32767)之间的一个随机数
//#define RAND_MAX 0x7fff(32767)
//rand函数在使用之前要使用一个srand函数来设置随机数的生成器
//srand函数在程序中只要调用一次就可以了,不需要频繁调用

因为srand不需要频繁调用,我们把srand函数放到主函数中:(主函数只会执行一次)

#include<stdio.h>
#include <stdlib.h>    //使用rand函数和srand函数需要调用stdlib.h文件
#include <time.h>      //使用time函数需要调用time.h头文件

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

int main()
{
    srand((unsigned)time(NULL));
    //时间戳
    //C语言中,time函数会返回时间戳
    //time返回time_t -> time 64_t -> int64 -> long long 
    int input = 0;
    do{
        menu();
        printf("请选择>:");
        scanf("%d", &input);
        switch(input)
        {
        case 1:
            game();
            break;
        case 0:
            break;
        default:
            printf("选择错误,请重新输入!\n");
            break;
        }
    }while(input);
    return 0;
}

2.猜数字

猜数字也是一个循环的过程,直到猜对循环结束:

void game()
{
	int num = 0;
	int ret = rand()%100+1;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &num);
		if (num < ret)
		{
			printf("猜小了\n");
		}
		else if (num > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

最后,猜数字游戏就实现了

#include<stdio.h>
#include <stdlib.h>
#include <time.h>

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

void game()
{
    int num = 0;
    int ret = rand() % 100 + 1;
    while (1)
    {
        printf("请猜数字:>");
        scanf("%d", &num);
        if (num < ret)
        {
            printf("猜小了\n");
        }
        else if (num > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
    }
}

int main()
{
    srand((unsigned)time(NULL));
    int input = 0;
    do {
        menu();
        printf("请选择>:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            break;
        default:
            printf("选择错误,请重新输入!\n");
            break;
        }
    } while (input);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早八编程员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值