C语言版猜数字小游戏

时间:2022-06-14 04:32:40

本文实例为大家分享了C语言版猜数字小游戏的具体代码,供大家参考,具体内容如下

清楚实现目标

做任何一个小项目之前,我们首先都需要明确自己想要实现的目标.

所以猜数字游戏的实现目标是啥?

  • 电脑随机给出一个目标数字,玩家进行猜测
  • 电脑会根据玩家猜测的数字,提示猜大了还是小了
  • 直到猜对为止,一轮游戏结束.
  • 游戏结束会询问是否继续.1代表继续,0代表不继续.
  • 游戏模式有3种(简单,普通,困难),对应内容分别为猜25次,15次,5次
  • 游戏会记录你的战绩,在菜单中按2表示查询战绩.

明确逻辑结构

清楚的知道了想要实现的目标,那最开始的步骤就是搭建逻辑结构.

所以逻辑结构是啥呢?

有一个菜单提示,内容为按1代表开始/继续游戏,2代表查询战绩,0代表退出游戏,其他按键提示输入错误

输入2后,会再次跳出菜单.提示输入错误后,可以重新输入命令

输入1后,会询问游戏模式,然后开始.

所以逻辑结构如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
 
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
int main()
{
    int input = 0;//键入命令
    do
    {
        menu();//菜单提示模块,后面进行实现
        scanf("%d", &input); 
        switch (input)
        {
            case 0:
                printf("成功退出游戏\n");
                break;
            case 1:
                playgame(); //玩游戏模块,后面进行实现
                store(); //存储战绩模块
                break;
            case 2:
                query();//查询战绩模块,后面进行实现
                break;
        }
    } while (input);
    
    return 0;
}

功能细节实现

菜单模块

按照目标要求,菜单木块代码如下:

?
1
2
3
4
5
6
7
8
9
10
void menu()
{
    printf(
           "*******************************************************\n"
           "*******************  0----退出游戏  ********************\n"
           "*******************  1----开始游戏  ********************\n"
           "*******************  2----查询战绩  ********************\n"
           "*******************************************************\n"
           );
}

储存战绩

这个的目标是无论啥时候打开游戏,都会记录之前玩过的成绩.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
void store()
{
    FILE* fp = fopen("grade.txt","w+");
    if (fp == NULL)
    {
        exit(-1);
    }
    else
    {
        fprintf(fp,"computer : player = %d : %d\n",computer,player);
    }
    fclose(fp);
}

游戏模块

游戏模块的功能是:

玩家选择游戏模式,

然后电脑首先会随机给出一个玩家需要猜测的数字.

大概提示数字在哪个范围.

玩家开始猜测.并且每猜测一次,都会提示还剩余几次机会.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
void playgame()
{
    srand(time(NULL)); //随机数种子
    int target = rand() % 1001;//代表电脑的随机数
 
    int input = 0, num = 0; //input 代表游戏猜测的数字,num代表猜测剩余次数
 
    num = mode(); //游戏模式选择模块,后面进行实现
 
    while (1)
    {
        printf("请输入你认为是答案的数字:\n");
        scanf("%d",&input);
        if (num == 0)
        {
            break;
        }
        if (input > target)
        {
            printf("猜大了,再试试\n");
        }
        else if (input > target)
        {
            printf("猜小了,再试试\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
        num--;
        printf("你还剩余%d次机会哦~~~~\n", num);
    }
 
    if (!num)
    {
        printf("很遗憾,你输了\n");
        computer++; //标记战绩
    }
    else
    {
        printf("恭喜你,你赢了\n");
        player++;
    }
    printf("是否还继续游戏呢?\n");//这一步是提醒玩家是否继续.
}

游戏模式选择

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int mode()
{
    char str[20] = { 0 };
    int num = 0;
    printf("请输入游戏模式:简单  普通  困难\n:");
    scanf("%s", str);
    if (strcmp("简单", str) == 0)
    {
        num = 25;
    }
    else if (strcmp("普通", str) == 0)
    {
        num = 15;
    }
    else
    {
        num = 5;
    }
 
    return num;
}

战绩查询

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void query()
{
    FILE* fp = fopen("grade.txt","r");
    int a = 0, b = 0;
    char p[60] = { 0 };
    if (fp == NULL)
    {
        exit(-1);
    }
    else
    {
        fgets(p,60,fp);
        printf("%s\n",p);
    }
    fclose(fp);
    printf("游戏是否继续?\n");
}

成品展示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
 
void menu()
{
    printf(
           "*******************************************************\n"
           "*******************  0----退出游戏  *******************\n"
           "*******************  1----开始游戏  *******************\n"
           "*******************  2----查询战绩  *******************\n"
           "*******************************************************\n"
           );
}
 
int mode()
{
    char str[20] = { 0 };
    int num = 0;
    printf("请输入游戏模式:简单  普通  困难\n:");
    scanf("%s", str);
    if (strcmp("简单", str) == 0)
    {
        num = 25;
    }
    else if (strcmp("普通", str) == 0)
    {
        num = 15;
    }
    else
    {
        num = 5;
    }
 
    return num;
}
 
void playgame()
{
    srand(time(NULL)); //随机数种子
    int target = rand() % 1001;//控制数字在0-1000
 
    int input = 0, num = 0; //input 代表游戏猜测的数字,num代表猜测剩余次数
 
    num = mode(); //游戏模式选择模块
 
    while (1)
    {
        printf("请输入你认为是答案的数字(0-1000):\n");
        scanf("%d",&input);
        if (num == 0)
        {
            break;
        }
        if (input > target)
        {
            printf("猜大了,再试试\n");
        }
        else if (input < target)
        {
            printf("猜小了,再试试\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
        num--;
        printf("你还剩余%d次机会哦~~~~\n", num);
    }
 
    if (!num)
    {
        printf("很遗憾,你输了\n");
        computer++; //标记战绩
    }
    else
    {
        printf("恭喜你,你赢了\n");
        player++;
    }
    printf("是否还继续游戏呢?\n");//这一步是提醒玩家是否继续.
}
 
void query()
{
    FILE* fp = fopen("grade.txt","r");
    int a = 0, b = 0;
    char p[60] = { 0 };
    if (fp == NULL)
    {
        exit(-1);
    }
    else
    {
        fgets(p,60,fp);
        printf("%s\n",p);
    }
    fclose(fp);
    printf("游戏是否继续?\n");
}
 
 
void store()
{
    FILE* fp = fopen("grade.txt","w");
    if (fp == NULL)
    {
        exit(-1);
    }
    else
    {
        fprintf(fp,"computer : player = %d : %d\n",computer,player);
    }
    fclose(fp);
}
 
int main()
{
    int input = 0;//键入命令
    do
    {
        menu();//菜单提示模块,后面进行实现
        scanf("%d", &input);
        switch (input)
        {
        case 0:
            printf("成功退出游戏\n");
            break;
        case 1:
            playgame(); //玩游戏模块,后面进行实现
            store(); //存储战绩模块
            break;
        case 2:
            query();//查询战绩模块,后面进行实现
            break;
        }
 
    } while (input);
    return 0;
}

小提示:

成品中的战绩查询实际并没有真的实现记录所有次战绩,每次启动程序战绩都会从0:0更新,那么怎么实现这个功能呢?

留给大家思考一下.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/m0_51723227/article/details/118890080