学了一些基础的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;
}
}}