【C语言】寻找隐藏字母游戏

简介: 我们可以利用rand()函数生成随机值,让随机值模上3便可以生成0-2之间的数字,而让0对应着第一个字母,1对应着第二个字母,2对应着第三个字母。如果rand()%3结果为0则让第一个字母为?其他字母显示,让玩家猜出这个?字母,而当rand()%3结果为1,则让第二个字母为?,第一个和第三个字母显示。如果rand()%3结果为2,则让第三个字母为?第1个和第2个字母显示。

编程实现一个游戏程序,会将连续三个字母中的一个隐去,由玩家填写隐去的那个字母,如屏幕上显示A ? C,则玩家需要输入B;屏幕上显示?B C,则玩家需要输入A。记录玩家完成20次游戏的时间以及正确率。


🍂1.实现连续三个字母出现


如何能让三个字母出现呢?


三个连续的字母的特点是ASCII码值成比例


只要列出三个成比例的数字然后它们对应的是字母即可。


那怎么找到三个成比例的数字呢?


我们可以利用rand()函数生成随机值,让随机值模上3便可以生成0-2之间的数字,而让0对应着第一个字母,1对应着第二个字母,2对应着第三个字母。如果rand()%3结果为0则让第一个字母为?其他字母显示,让玩家猜出这个?字母,而当rand()%3结果为1,则让第二个字母为?,第一个和第三个字母显示。如果rand()%3结果为2,则让第三个字母为?第1个和第2个字母显示。


但是使用rand()生成的值却是一个不变的随机值,我们需要一个生成不断变化随机值,这时就需要time来生成一个随机种子了


srand((unsigned int)time(NULL))time的参数是NULL,返回值为unsigned int类型。


这样就可以生成随机值了。


那对应关系我们知道了,还需要让连续字母出现也需要用到rand


让rand()%24+'A'就可以生成随机字母了然后再与0,1,2对应就可以了。


 position = rand()%3+'0';    // 随机隐藏的位置0,1,2
        character = rand()%24+'A';  // 随机出现的第一个字母 A-X
        printf("----- Round %d -----\n", i+1);
        if (position == '0')//0对应着第一个字母  
        {
            answer = character;
            printf("? %c %c\n", character+1, character+2);
        } else if (position == '1') //1对应着第2个字母
        {
            answer = character + 1;
            printf("%c ? %c\n", character, character+2);
        } else if (position == '2')//3对应着第3个字母 
        {
            answer = character + 2;
            printf("%c %c ?\n", character, character+1);
        }


🍃2.确定游戏时间与准确率


我们可以利用time_t类型来定义两个变量start,end。


用来记录开始时间和结束时间。


第一次使用time(NULL),可以进行计时,而第二次再使用time(NULL),计时便停止下来。


所以我们可以在游戏开始之前进行计时,当20把游戏结束后进行计时结束。


start=time(NULL)开始计时

end=time(NULL)停止计时


如何确定准确率呢,肯定需要知道答对还是没答对,定义一个count;


用来记录答对的次数,每次答对则进行++。


而正确率的计算就是正确的个数/比赛的次数。


🍀3.猜字母操作


这里我们玩家需要猜出?是什么字母,将要写的字母输入电脑中,然后进行比较


不过我们需要注意的是:输入这个操作是要循环20次,所以就要考虑scanf函数的空格缓冲区域


每次输入一个字符还需要enter一下,这时缓冲区相当于就会有两个字符,而下一次scanf就会把空格传给电脑,这样是不行的,


所以我们需要在每次输入后,都要清除一下缓冲区中的空格,用getchar()函数吸收空格。


printf("请输入正确字母:");
    scanf("%c", &guess);
    getchar();
    if (answer == guess)
    {
      printf("对的\n");
      count++;
    }
    else
    {
      printf("错误的,正确的答案是%c\n",answer);
    }


也可以使用另一种方法,利用do…while清空缓冲区


 printf("Please enter the correct letter: ");
        guess = getchar();
        do {scanf("%c",&c);} while(c!='\n');
        if (answer == guess) {
            printf("Correct!\n");
            count++;
        } else {
            printf("Wrong! The correct letter is %c\n", answer);
        }


🍁4.完整代码


int main(void) {
    char character, position, answer, guess, c;
    int i, count=0;
    double duration;
  time_t start, end;
    srand((unsigned int) (time(0)));    // 随机种子
    start = time(NULL);    // 开始计时
    for (i=0; i<20; i++) {
        position = rand()%3+'0';    // 随机隐藏的位置0,1,2
        character = rand()%24+'A';  // 随机出现的第一个字母 A-X
        printf("----- Round %d -----\n", i+1);
        if (position == '0')  {
            answer = character;
            printf("? %c %c\n", character+1, character+2);
        } else if (position == '1') {
            answer = character + 1;
            printf("%c ? %c\n", character, character+2);
        } else if (position == '2') {
            answer = character + 2;
            printf("%c %c ?\n", character, character+1);
        }
        printf("Please enter the correct letter: ");
        guess = getchar();
        do {scanf("%c",&c);} while(c!='\n');
        if (answer == guess) {
            printf("Correct!\n");
            count++;
        } else {
            printf("Wrong! The correct letter is %c\n", answer);
        }
    } 
    end = time(NULL);  // 停止计时
    duration = ((double)(end - start));
    printf("Win Ratio: %f %%\n", count*100/20.0);
    printf("Game Time: %f s\n", duration);
    return 0;
}


相关文章
|
30天前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
74 0
|
2天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
11 1
|
1月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
74 1
|
1月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
1月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
1月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
31 0
|
1月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
36 0
|
1月前
|
C语言
C语言中大小写字母的转换
C语言中大小写字母的转换
90 0
|
1月前
|
程序员 C语言
初识C语言之三子棋游戏
初识C语言之三子棋游戏
32 0
|
1月前
|
C语言
初识C语言3——函数(以猜数字游戏为例)
初识C语言3——函数(以猜数字游戏为例)
65 0