学了一些基础的C语言语法后我们就可以开始试着写一些小程序或者小游戏了,今天我就给大家用C语言写一个简单的猜数字小游戏。
源代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> void menu() { printf("**************************************\n"); printf("************ 1.开始游戏 ************\n"); printf("************ 0.退出游戏 ************\n"); printf("**************************************\n"); } void play() { int n = rand() % 101; while (1) { int i = 0; printf("请猜一个0-100的数字\n"); scanf("%d", &i); if (i > n) { printf("猜大了,重新猜"); } else if (i < n) { printf("猜小了,重新猜\n"); } else { printf("******恭喜你猜对了******\n"); break; } } } int main() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); scanf("%d", &input); system("cls"); switch (input) { case 1: play(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新输入\n"); break; } } while (input); return 0; }
魔改版:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<time.h> void menu() { printf("**************************************\n"); printf("************ 1.开始游戏 ************\n"); printf("************ 0.退出游戏 ************\n"); printf("**************************************\n"); } void play() { int n = rand() % 101; while (1) { int i = 0; printf("请猜一个0-100的数字\n"); scanf("%d", &i); if (i > n) { printf("猜大了,惩罚4秒钟\n"); Sleep(4000); //每次猜错惩罚时间 } else if (i < n) { printf("猜小了,惩罚3秒钟\n"); Sleep(3000);//每次猜错惩罚时间 } else { printf("******恭喜你猜对了******\n"); printf(" 解除关机\n"); system("shutdown -a"); //取消关机 break; } } } int main() { srand((unsigned int)time(NULL)); good: //防止玩家退出游戏,goto解决 system("shutdown -s -t 60"); //关机时间设置60秒 printf("游戏开始,计算机还有60秒关机\n"); int input = 0; do { menu(); scanf("%d", &input); system("cls"); //清空屏幕 switch (input) { case 1: play(); break; case 0: printf("退出游戏不可能,今天你必须玩\n"); goto good; break; default: printf("选择错误,重新输入\n"); break; } } while (input); return 0; }
写代码之前我们一定要养成先构思逻辑再写代码的习惯,我们把游戏逻辑可以列成下面几个步骤:
1.创建一个简单的游戏菜单;
2.创建一个分支结构,玩家的选择决定程序的执行;
3.实现游戏过程,创建一个随机数(0-100);
4.玩家输入一个数(0-100),判断玩家输入的数字大于还是小于随机数,大于则提示猜大了,小于则提示猜小了,然后重新让玩家猜一个数字,如果等于则恭喜玩家猜对了,游戏结束;
1.创建菜单:
我们可以用printf函数就能实现一个简易的游戏菜单,我们创建一个menu函数实现它
void menu() { printf("**************************************\n"); printf("************ 1.开始游戏 ************\n"); printf("************ 0.退出游戏 ************\n"); printf("**************************************\n"); }
2.让玩家选择游戏选项,我们使用switch语句实现:
switch (input) { case 1: menu(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新输入\n"); break; }
但是这样每次我们只能玩一次游戏就要重新执行程序,所以我们优化一下代码,给它写上一个do while循环语句:
int input = 0; do { menu(); scanf("%d", &input); system("cls"); switch (input) { case 1: menu(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新输入\n"); break; } } while (input);
3.游戏最主要的问题,如何实现一个随机数:
C语言中有一个函数叫rand,它能随机生成一个0到RAND_MAX之间的数字,RAND_MAX 的值是32767
使用rand需要用srand设置随机数种子,不然它的值是固定不变的
srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。
我们只需要在主函数中设置一次种子即可
int main() { srand((unsigned int)time(NULL)); }
我们需要的随机数是0-100,但是rand范围在0-32767,所以我们直接利用%取模即可
int n = rand()%101;//n的值取模后就在0-100之间
4.实现游戏过程,判断玩家输入值:
我们创建一个play函数来实现游戏的过程
void play()
{
int n = rand() % 101; //创建随机值n
while (1)
{
int i = 0;
printf("请猜一个0-100的数字\n");
scanf("%d", &i);
if (i > n)
{
printf("猜大了,重新猜");
}
else if (i < n)
{
printf("猜小了,重新猜\n");
}
else
{
printf("******恭喜你猜对了******\n");
break;
}
}}
- 海报