前言
对于初学C语言的同学,如果学习了(顺序、选择和循环),那么根据所学写一个猜数字游戏也是很有意思的。
游戏内容
顾名思义,猜数字就是系统给你一个随机数字(这里我们让系统给出随机的1-100的数字便于猜测),让你去猜正确与否,直到猜对为止。
思路
1:构建一个菜单列表 1.play 0.exit 输入1则开始游戏,输入0则退出游戏 2:利用循环语句使玩家可以多次进行游戏,直到主动选择退出游戏 3: 让系统输入一个随机数,玩家输入猜测数字进行比较。
游戏开始前我们需要先介绍几个函数:
Sleep函数
功能: 执行挂起一段时间,也就是等待一段时间在继续执行
用法:Sleep(时间)
头文件:Windows下为--> windows.h
Linux 下为 --> unistd.h
注意:(1)Sleep是区分大小写的,有的编译器是大写,有的是小写。
(2)Sleep括号里的时间,在windows下是已毫秒为单位,而Linux是以秒为单位
使用Sleep函数我们可以做登录页面或起始欢迎页面,效果如下
void enroll()
{
char arr[] = "***********************************";
char brr[] = "*******welcome to the game*********";
int left = 0;
int right = strlen(arr) - 1;
while (left <= right)
{
arr[left] = brr[left];
arr[right] = brr[right];
printf("%s", arr);
Sleep(100); //休息0.1s
system("cls");//清屏 头文件stdlib.h
left++;
right--;
}
printf("*******welcome to the game*********\n\n");
}
生成随机数的方法
单单使用rand() 函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。
这里time_t的类型就是 在C语言中被定义为长整型,而srand()函数的参数类型为unsigned int (无符号整形),所以使用时要强制类型转换,而且**time()**函数,不需要设置参数,故用NULL代替。需要引用头文件time.h
代码实现
1.菜单界面:
void meau()
{
printf("***********************************\n");
printf("*********1.play 0.exit*********\n");
printf("***********************************\n");
}
效果展示:
2.主函数框架,do while游戏至少刚开始进去一次 ,switch控制进行游戏或退出游戏
int main()
{
enroll();
int input = 0;
srand((unsigned int)time(NULL));//用时间戳来设置随机数的生成起点
do
{
meau();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
3.猜数字
void game()
{
//1.生成一个随机数
int ret = 0;
//用时间戳来设置随机数的生成起点
//time_t time(time_t *time)
//ret = rand(); 生成随机数
ret = rand() % 100 + 1; //生成1-100随机数
//printf("%d\n", ret);
//猜数字
int guess_num;
while (1)
{
printf("请猜数字>:");
scanf("%d", &guess_num);
if (guess_num > ret)
{
printf("猜大了\n");
}
else if (guess_num < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
游戏演示 :
源码:
#define _CRT_SECURE_NO_WARNINGS //vs2019下 使用scanf函数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>
void enroll()
{
char arr[] = "***********************************";
char brr[] = "*******welcome to the game*********";
int left = 0;
int right = strlen(arr) - 1;
while (left <= right)
{
arr[left] = brr[left];
arr[right] = brr[right];
printf("%s", arr);
Sleep(100); //休息0.1s
system("cls");//清屏
left++;
right--;
}
printf("*******welcome to the game*********\n\n");
}
void meau()
{
printf("***********************************\n");
printf("*********1.play 0.exit*********\n");
printf("***********************************\n");
}
void game()
{
//1.生成一个随机数
int ret = 0;
//用时间戳来设置随机数的生成起点
//time_t time(time_t *time)
//ret = rand(); 生成随机数
ret = rand() % 100 + 1; //生成1-100随机数
//printf("%d\n", ret);
//猜数字
int guess_num;
while (1)
{
printf("请猜数字>:");
scanf("%d", &guess_num);
if (guess_num > ret)
{
printf("猜大了\n");
}
else if (guess_num < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了!\n");
break;
}
}
}
int main()
{
enroll();
int input = 0;
srand((unsigned int)time(NULL));//用时间戳来设置随机数的生成起点
do
{
meau();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();//猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
这样就写完了,非常适合初学者写一写玩一玩。