增量开发C语言实现的猜数字小游戏

一、引言

博主在学校开设的专业课上第一次接触到了增量开发的概念。增量开发在软件工程专业中算是比较重要的一个思路。软件开发既可以是从0到1,也可以是从1到100。在现实情况中,用户需求不是一成不变的,而是随时间不断变化的。如果我们对现有的产品成品感到自满,那么不久就可能会发现产品逐渐跟不上用户需求了。这也是发布产品后仍要进行用户调研、不断改进推出新版本的原因。于是,专业课布置的第一个正式作业就是自行选择非本人做过的小项目,对其测试并增量开发。
在这里我选择的项目是由CSDN用户恪愚在《菜鸟前路---c/c++小游戏》一文中编写的猜数字小游戏。此处附上原文链接https://yunxiaomeng.blog.csdn.net/article/details/85984388。猜数字对于编程新手来说是简单易上手的小项目,具有一定学习、交流、分享的价值。

 

二、测试体验

以下为CSDN用户恪愚发布的源码(侵删)

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>   //下面Sleep()函数的头文件
#include<mmsystem.h>

void menu()
{
    printf("   *****************************\n");
    printf("   *****************************\n");
    printf("   ************1.play***********\n");
    printf("   ************0.exit***********\n");
    printf("   **********2.chakan***********\n");
    printf("   *********3.qingkong**********\n");
    printf("   *****************************\n");
    printf("请选择:          \n");
}

void game()
 {
     system("cls");
     system ( "color 33" ); //设置颜色
     FILE *fp;
     if((fp=fopen("D:\\caishuziyou.txt","a+"))==NULL)
    {
        printf("open file error\n");
        return ;
    }
     int rand_num=rand()%100;
     int tmp=0,t=0;

     while(1)
     {
         int flag=0;
         printf("请输入你要猜的数字:");
         scanf("%d",&tmp);
         if(tmp>rand_num)
         {
             printf("猜大了!\n");
            flag=0;
    }
         if(tmp<rand_num)
         {
             printf("猜小了!\n");
            flag=0;
    }
         if(tmp==rand_num)
         {
             printf("正确!恭喜!\n");
             printf("共用了%d次\n",t+1);


         FILE *fp;
fp=fopen("D:\\caishuziyou.txt","w");
if(fp==NULL)
{
    printf("create file failed\n");
    return ;
}
fprintf(fp,"%d",t+1);
fclose(fp);
         break;
        }
        if(flag==0) t++;

        printf(" 你再猜:\n");
     }
    printf("\n按任意键返回目录");
    getch();

 }

void menu2()
{
    system("cls");
    system ( "color B6" ); //设置颜色
    printf("即将登陆系统!!!\n");
    getch();
    for(int t=3;t>=1;t--)
    {
        system("cls");
        printf("%d",t);
        Sleep(700);
        system("cls");
    }
}

void chakan()
{
     system("cls");
     system ( "color E0" ); //设置颜色

int t=0;
FILE*fp;
if((fp=fopen("D:\\caishuziyou.txt","r"))==NULL)
{
    printf("can not to open the file!\n");
    exit(0);
}
while(fscanf(fp,"%d",&t)!=EOF)//若不到文件结尾则继续
{
    printf("此玩家共进行了%d次\n",t);
}
        printf("\n按任意键返回目录");
        getch();
}

void qk()//清空
{
    FILE *fp;
    system("cls");                        //清屏函数,不管下面是否保存数据,每次输入新数据是屏幕上只能有此次的数据
    system ( "color C0" ); //设置颜色
    if((fp=fopen("D:\\caishuziyou.txt","w"))==NULL)
    {
        printf("open file error\n");
        return;
    }
    fclose(fp);
    printf("\n按任意键返回!");
    getch();
}

int main()
{
     int input=0;
     srand((unsigned)time(NULL));
    do{
//while(1)
//{
    system("cls");
         menu();
 //    printf("请选择:");
         scanf("%d",&input);
         switch(input)
         {
             case 1:
               menu2();
                 game();
                 break;
             case 2:
                 chakan();
                 break;
            case 3:
                qk();
                break;
             case 0:
                 exit(0);
                 break;
             default:printf("输入错误!请重新输入!");
         }
//}
         }while(input);
    return 0;
}
源码

运行环境:Dev-C++

1.主菜单

 

2.功能一游玩

 

 

3.功能二查看

 

4.功能三清空

5.功能零退出

 

 

 三、优化思路

对于一个猜数字小游戏来说,原项目做得还是十分完善的。关键地方有注释,思路清晰、简单,适合新手学习。但实际体验下来发现原项目有几个明显的可以改进之处。第一个方面是主菜单英文和拼音混用,略显业余。其次,在选择功能一进入游玩界面时没有如“请按任意键继续”的提示,用户体验不佳。第二个方面是游玩过程缺少限制。可以多次输入同一个数字,并且没有超出次数强制退出的限制,这使得游玩过程缺少挑战性。对于第一个方面。由于后续的提示皆为中文,于是将菜单中的功能名统一改为中文。经总结,优化方向如下:

1.主菜单修改功能名、增加合理的提示。

2.加限制:超过多少次后强制退出,显示剩余猜测次数。

3.输入相同数字后给予警告。

 

四、实际修改及效果演示

1.修改

修改后的菜单代码如下:

 1 void menu()
 2 {
 3     printf("   *********猜数字小游戏********\n"); 
 4     printf("   *****************************\n");
 5     printf("   ************1.游玩***********\n"); 
 6     printf("   ************0.退出***********\n"); 
 7     printf("   ************2.查看***********\n"); 
 8     printf("   ************3.清空***********\n"); 
 9     printf("   *****************************\n");
10     printf("   *****************************\n");
11     printf("请选择:          \n");
12 }

修改后的提示代码如下:

 1 void menu2()
 2 {
 3     system("cls");
 4     system ( "color B6" ); //设置颜色
 5     printf("按任意键进入系统!!!\n"); 
 6     getch();
 7     for(int t=3;t>=1;t--)
 8     {
 9         system("cls");
10         printf("%d",t);
11         Sleep(700);
12         system("cls");
13     }
14 }

修改后的游玩代码如下:

 1 void game()
 2  {
 3      system("cls");
 4      system ( "color 33" ); //设置颜色
 5      FILE *fp;
 6      if((fp=fopen("D:\\caishuziyou.txt","a+"))==NULL)
 7     {
 8         printf("open file error\n");
 9         return ;
10     }
11      int rand_num=rand()%100;
12      int tmp=0,sum=0;
13     int previous=-1;            //表示前一个所猜的数字 
14      for(;sum<=10;)
15      {
16          int flag=0;
17          printf("请输入你要猜的数字:");
18          scanf("%d",&tmp);
19          if(tmp==previous) 
20         {
21              printf("警告!重复输入相同的数字!还剩%d次机会\n",10-sum);
22             flag=0;
23     }
24          else if(tmp>rand_num){
25              printf("猜大了!还剩%d次机会\n",10-sum);
26             flag=0;
27             previous=tmp;
28         }
29          else if(tmp<rand_num)
30          {
31              printf("猜小了!还剩%d次机会\n",10-sum);
32             flag=0;
33             previous=tmp;
34     }
35          else if(tmp==rand_num)
36          {
37              printf("不错的猜测,即使是我也能感到心潮澎湃!\n");
38              printf("共用了%d次\n",sum+1);
39 
40 
41          FILE *fp;
42 fp=fopen("D:\\caishuziyou.txt","w");
43 if(fp==NULL)
44 {
45     printf("create file failed\n");
46     return ;
47 }
48 fprintf(fp,"%d",sum+1);
49 fclose(fp);
50          break;
51         }
52         if(flag==0) sum++;
53     if(sum!=11){
54         printf("你再猜:\n");
55     }
56     else {
57     printf("形不成形,意不在意,再去练练吧!\n");
58     }
59 }
60         printf("\n按任意键返回目录");
61         getch();
62  }

以下为修改后的全部代码:

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>   //下面Sleep()函数的头文件
#include<mmsystem.h>

void menu()
{
    printf("   *********猜数字小游戏********\n");            //改了 
    printf("   *****************************\n");
    printf("   ************1.游玩***********\n");            //改了 
    printf("   ************0.退出***********\n");            //改了 
    printf("   ************2.查看***********\n");            //改了 
    printf("   ************3.清空***********\n");            //改了 
    printf("   *****************************\n");
    printf("   *****************************\n");
    printf("请选择:          \n");
}

void game()
 {
     system("cls");
     system ( "color 33" ); //设置颜色
     FILE *fp;
     if((fp=fopen("D:\\caishuziyou.txt","a+"))==NULL)
    {
        printf("open file error\n");
        return ;
    }
     int rand_num=rand()%100;
     int tmp=0,sum=0;
    int previous=-1;            //表示前一个所猜的数字 
     for(;sum<=10;)
     {
         int flag=0;
         printf("请输入你要猜的数字:");
         scanf("%d",&tmp);
         if(tmp==previous) 
        {
             printf("警告!重复输入相同的数字!还剩%d次机会\n",10-sum);
            flag=0;
    }
         else if(tmp>rand_num){
             printf("猜大了!还剩%d次机会\n",10-sum);
            flag=0;
            previous=tmp;
        }
         else if(tmp<rand_num)
         {
             printf("猜小了!还剩%d次机会\n",10-sum);
            flag=0;
            previous=tmp;
    }
         else if(tmp==rand_num)
         {
             printf("不错的猜测,即使是我也能感到心潮澎湃!\n");
             printf("共用了%d次\n",sum+1);


         FILE *fp;
fp=fopen("D:\\caishuziyou.txt","w");
if(fp==NULL)
{
    printf("create file failed\n");
    return ;
}
fprintf(fp,"%d",sum+1);
fclose(fp);
         break;
        }
        if(flag==0) sum++;
    if(sum!=11){
        printf("你再猜:\n");
    }
    else {
    printf("形不成形,意不在意,再去练练吧!\n");
    }
}
        printf("\n按任意键返回目录");
        getch();
 }

void menu2()
{
    system("cls");
    system ( "color B6" ); //设置颜色
    printf("按任意键进入系统!!!\n"); 
    getch();
    for(int t=3;t>=1;t--)
    {
        system("cls");
        printf("%d",t);
        Sleep(700);
        system("cls");
    }
}

void chakan()
{
     system("cls");
     system ( "color E0" ); //设置颜色

int t=0;
FILE*fp;
if((fp=fopen("D:\\caishuziyou.txt","r"))==NULL)
{
    printf("can not to open the file!\n");
    exit(0);
}
while(fscanf(fp,"%d",&t)!=EOF)//若不到文件结尾则继续
{
    printf("在成功猜测的游戏中,此玩家共进行了%d次猜测\n",t);
}
        printf("\n按任意键返回目录");
        getch();
}

void qk()//清空
{
    FILE *fp;
    system("cls");                        //清屏函数,不管下面是否保存数据,每次输入新数据是屏幕上只能有此次的数据
    system ( "color C0" ); //设置颜色
    if((fp=fopen("D:\\caishuziyou.txt","w"))==NULL)
    {
        printf("open file error\n");
        return;
    }
    fclose(fp);
    printf("\n按任意键返回!");
    getch();
}

int main()
{
     int input=0;
     srand((unsigned)time(NULL));
    do{
//while(1)
//{
    system("cls");
         menu();
 //    printf("请选择:");
         scanf("%d",&input);
         switch(input)
         {
             case 1:
               menu2();
                 game();
                 break;
             case 2:
                 chakan();
                 break;
            case 3:
                qk();
                break;
             case 0:
                 exit(0);
                 break;
             default:printf("输入错误!请重新输入!");
         }
//}
         }while(input);
    return 0;
}
修改后

 

2.演示

主菜单:

提示:

重复输入同一数字,给予警告:

 强制退出:

 

五、总结与收获

总的来说,这次实验使我初步体验到了增量开发的过程,收获颇丰。博主能力有限,如有建议及指正欢迎在评论区提出!

 

posted @ 2023-03-08 23:59  極限  阅读(40)  评论(0编辑  收藏  举报