文章目录
游戏功能
1、设置一个密码,只有当密码正确时,才能运行程序
2、有游戏界面,能够自己选择是否开始游戏
3、开始游戏后,能够自己选择在什么样的范围内捉鬼
4、游戏进行的途中,不想继续本次游戏,可以直接退出
5、游戏结束后,可以选择继续或者退出
6、能够显示捉了几次鬼
代码中用到的部分函数的解释
rand和srand:
rand函数是用来获取随机值的,调用这个函数会返回一个随机无符号整数
rand需要和srand搭配使用,调用rand函数前需要先使用srand函数,设置随机起点(意思就是需要设置一个起点,在这个点生成随机值,一个随机起点对应一个随机值,当我们的随机起点固定的时候,随机值也就固定了,因此随机起点需要不断变化,所以引入不断变化的时间戳作为时机起点,保证随机性)
具体操作如下:
#include <stdlib.h> //使用这两个函数时需要头文件 <stdlib.h>、<time.h>(time.h 是因为
引入了时间戳)
#include <time.h>
srand((unsinged int)time(NULL)); //设置随机起点,这个可以直接记住,通常都是这个
int ret =rand(); //生成随机值并赋值给ret
int ret1= rand()%100+1; //生成范围在1~100的随机值并赋值给ret1
rand()%n+1 //随机值的范围为1~n
rand()%n //随机值的范围为0~n-1
goto:无条件跳转
goto函数是用来跳转的,可以直接跳转到标志位从标志位开始执行,标志位的位置不固定,放在哪就跳转到哪
例: int a;
goto lol;//程序执行到这后,会直接跳转标志位lol,执行lol后面的代码
a = 3; //不被执行
lol: //注意标志位后面是冒号:
a = 5; //执行
switch:有条件跳转
int i;
switch(i) i只能是整型或者字符型
{ 根据i的值跳转到对应的case,然后执行,遇到break退出,没有遇到,继续往下执行
直到最后一行
default是当输入的i的值,找不到对应的case时,就跳转到default
case ?:
case ?:
default:
}
例:int i =2; //给i赋值为2
switch(i) //进入switch
{
case 1:int a =3; //不执行,因为i = 2,程序直接跳转到case 2;
break;
case 2:int a =5; //程序跳转到这开始执行int a=5;然后因为没有遇到break,继续往下执行case 3
case 3:int b = 3; //程序执行完 int b =3;后遇到break,退出switch
break;
default: int c =4; //这是switch的最后一行代码,当执行到这时,即使后面没有break也会退出
switch,但是最好还是要加上break,
break;
}
strcmp:
strcmp函数是用于比较两个字符串的
比较规则:第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
例:
#include <string.h> //strcmp函数的头文件
int a =strcmp("145236","123456");//比较“145236”和“123456”,由于两者不相等,所以返回值非0
int b =strcmp("123456","123456");//比较“123456”和“123456”,由于两者相等,所以返回值为0
代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>
int main()
{
srand((unsigned int)time(NULL)); //将时间戳设置为随机数生成起点,避免生成的随机值重复
char possword[20]; //定义一个字符输出存放输入的字符
printf("请输入密码\n");
scanf("%s",possword); //输入密码
if(strcmp(possword,"123456")==0) //比较输入的密码和设置的密码是否相同,相同则登入成功
{
printf("登入成功!\n");
}
else if (strcmp(possword,"123456")!=0) //当密码输入错误时,退出程序
{
printf("密码都记不住,你还玩个锤子,gun!\n");
return 0;
}
loop:
sleep(1); //睡眠一秒
printf("---捉鬼游戏---\n");
sleep(1);
printf("开始游戏? 1/0\n");
int j; //定义一个整型变量j 用来存放用户输入的0或1
loop2:
scanf("%d",&j);
switch (j)
{
case 1:goto loop1; // 输入为1时,调用goto函数,直接跳转到loop1所在位置,开始游戏
case 0:printf("游戏结束\n"); //输入为0时,代表不进行游戏,直接结束进程
return 0;
default:printf("输入错误,请重新输入\n"); //当输入的不是0或1时,打印输入错误
while(getchar()!='\n'); //清空缓冲区的字符,避免下一次读取字符时读错
goto loop2; //跳转到loop2重新开始输入
}
loop1:
printf("请输入范围最大值\n");
int zdj ; //定义一个整型变量zdj,用来存放取值范围的最大值
scanf("%d",&zdj); //输入最大值,并存放到zdj里
int gui = rand()%zdj + 1; //调用rand函数生成一个随机值,并且赋值给gui,随机值的范围为1~zdj
printf("开始捉鬼咯\n");
int cs=0;
for(int c = 0;c<=0;) //进入一个for循环,将c作为标志位,当c为0时,循环继续,非0时,循环结束
{
int a,i; //定义整型变量a,用来存放输入的数据,并且定义一个整型变量i,作为标志位
scanf("%d",&a);
if(a>gui) //当a>gui时,说明猜大了,令标志位i=1
{
i = 1;
}
else if(a<gui && a !=0) //当a<gui 且 a 不等于0时,说明猜小了,令标志位i = 2
{
i = 2;
}
else if(a == 0 ) //等a =0时,说明玩家不想猜了,想要退出本次游戏,调用goto函数,跳转到loop
{
goto loop;
}
else //除了以上情况外,只剩下a 等于gui了,说明猜对了,令标志位i=3
i = 3;
switch (i)
{
case 1: printf("快跑!鬼在你身后\n"); //标志位i等于1时进入
c = 0;
cs++; //此时鬼还未捉到,让标志位c=0,从而能够继续循环,接着捉鬼
break; //退出switch
case 2: printf("小心,鬼就在前面\n"); //标志位i等于2时进入
c = 0;
cs++;
break;
case 3: printf("恭喜你已经成功捉到了鬼\n"); //标志位i等于3时进入
c =1;
cs++;
printf("一共捉了%d次\n",cs); //此时已经捉到鬼了,让标志位c=1,结束循环
goto loop; //跳转到loop
}
}
}