捉鬼游戏(猜数字)

文章目录

         游戏功能

代码中用到的部分函数的解释

 代码



游戏功能

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
        }
    }
                      
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值