前面我们学习了c语言的类型、变量、分支与循环,接下来我们用这些知识制作一个猜数字的小游戏。
//首先我们玩游戏需要打印一个开始的菜单函数
void menu(){
printf("*********************\n");
printf("******1. play********\n");
printf("******0. exit********\n");
printf("*********************\n");
}
//输入1则开始游戏,输入0则退出游戏,如果输入其他数字就输入错误重新输入
int main(){
int i;
do{
menu();//调用菜单函数
scanf_s("%d", &i);
switch (i) {
case 1:
printf("开始游戏\n请输入数字:\n");
//游戏程序函数
break;
case 0:printf("游戏结束\n");break;
default:printf("输入错误,请重新输入:\n");break;
}
}while(i);
return 0;
}//主函数
//当重新输入时就需要进行循环,这时候我们可以用do...while循环
这些基本框架我们就完成了,接下来我们学习新知识点——生成随机数
我们用rand函数进行生成,在头文件stdlib.h中,不需要参数,rand()%n,这里n是一个常量,如想做1~100间的随机数就rand()%101;但是我们这里生成的是一个伪随机数,也就是在rand()里有个“种子”,我们如果没有改变种子大小生成的随机数就是不变的,这时候我们用到srand函数,也就是设置我们的种子值,返回的是unsign int 类型,而time函数可以返回一个时间戳,time*变量,也可以直接传NULL空指针(后面会详细讲解),在头文件time.h中,因为每个时间戳都不一样,所以种子也就会不一样,但是注意的是用time时要强制类型转换。
//设计游戏函数
int game(){
srand((unsigned int)time(NULL));
int r = rand() % 100;
//r是我们生成的随机数
int num;
int count = 5;
shuzi:
scanf_s("%d", &num);
while (count) {
if (num > r) {//用我们猜的数字与随机数r比较
printf("猜大了");
printf("还剩%d次机会\n", count);
count--;
goto shuzi;//goto语句进行跳转循环
}
else if (num < r) {
printf("猜小了");
printf("还剩%d次机会\n", count);
count--;
goto shuzi;//goto语句进行跳转循环
}
else {
printf("恭喜你猜对了,游戏结束\n");
break;
}
}
if (!count) {//若猜对了count为真,!count为假则不执行,若5次没猜对则!count为真
printf("很遗憾,游戏失败\n");
printf("正确答案是%d\n", r);
}
return 0;
}
我们只需要将game函数放在主函数中进行调用就能得到一个完整的猜数字小游戏.