猜数字小游戏

本文介绍了一个使用C语言编写的猜数字小游戏,玩家可以选择是人还是电脑,正确数字由1到100的随机数生成,玩家需用二分法进行猜测。程序包含了开始、继续和退出游戏的选项,每轮游戏结束会显示猜测时长,并在退出时显示总游戏时长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猜数字小游戏

答辩视频

c语言程序设计报告答辩自述视频

题目描述

编写程序,实现一个猜数字小游戏。游戏规则:两个玩家,一方为电脑,一方为人。一方出数字,一方猜。出数字的一方首先想好一个正整数,不告诉另一方,然后告知另一方开始猜测。

功能需求

(1)用户可以从菜单中选择相应的功能。具体包括:开始游戏,继续游戏,退出游戏。
(2)用户可以自主选择玩家身份,包含有人或电脑这两种玩家,若选择人为玩家,即为猜的一方,那么电脑为给出正确数的一方。
(3)要求给出的正确数是由随机数产生的,且范围为1~100之间,并且玩家需要用二分法实现猜数。
(4)玩家持续猜测,若猜错,会提示:猜大了或猜小了,直到猜中为止,随后,会显示:回答正确!最后,显示这一轮玩家游戏时长。
(5)这一轮游戏结束后,玩家可以选择继续或退出游戏,若继续,玩家会重复上一轮相同的操作;若退出,会显示出本次(即总轮数)玩家游戏总时长。
(6)用户选择退出时,会显示出:谢谢使用,随后退出游戏。

重点问题描述

(1)对于1.4题,能随机生成给出的正确数字是重点。C语言中,rand()函数是按指定的顺序来产生整数,因此在每一轮猜数字小游戏中,每次执行上面的语句都会产生一个随机数。而且在程序中,用用rand()生成随机数前,先用初始化函数 srand(time(NULL))(需引用头文件【2】stdlib.h)。
(2)对于1.4题需要时间相关函数头文件:#include <ctime.h> ,先使用定义随机数种子函数(以当前时间为种子,不同时间随机数不同):srand(time(NULL)); 函数返回 x-1~x+y-1 范围的随机整数:rand()%x+y;如产生1~100 范围的随机数:rand()%100+1。

测试情况

系统主要功能模块的运行结果如图1.4.1~1.4.8所示:

在这里插入图片描述

图1.4.1 系统主菜单1(开始界面)

在这里插入图片描述

图1.4.2 系统菜单2(继续界面)

在这里插入图片描述

图1.4.3 输入合法选择项的运行结果(开始,玩家:B)
以及输出玩家游戏此轮时长

在这里插入图片描述

图1.4.4 输入合法选择项的运行结果(继续,玩家:A)
以及输出玩家游戏此轮时长

在这里插入图片描述

图1.4.5 输入不合法选择项的运行结果(开始界面)

在这里插入图片描述

图1.4.6 输入不合法选择项的运行结果(继续界面)

在这里插入图片描述

图1.4.7 退出系统(开始界面)

在这里插入图片描述

图1.4.8 输出玩家游戏总时长以及退出系统(继续界面)

课设海报

c语言程序设计海报!!

课设文档

c语言程序设计报告文档

课设答辩

c语言程序设计报告PPT答辩

代码内容

/************************************

  program:(C)1.4:猜数字小游戏 
  wrintten by Duan Linchuan.
  01/01/2024.Copyright 2024

************************************/

//copyeight 中文翻译:版权

/*********************************************************

>>>设计思路:
>>>编写程序,实现一个猜数字小游戏。

1.首先,写出相应的头文件,声明相应的函数,
  并写出两个界面函数,
  其一为开始界面,即start1();
  其二为继续界面,即start2(); 

2.其次,写出主函数,其包含相应的
  选择功能,多轮游戏功能,判断是否回答正确的功能,
  以及记录每轮游戏的时长与每次游戏的总时长的功能这四种功能。

(1)选择功能:

   首先,会出现界面I,其包含有开始或退出游戏这两个功能;
   若选择开始游戏后,会输出选择游戏玩家的身份,分别为人或电脑;
   随后,会输出人或电脑给出正确的数字;
   然后,玩家依次给出猜的数字,直到与正确的答案,才停止猜测。

(2)判断功能:

   若玩家给出猜的数字是错误的,人或电脑会提示:猜大了或猜小了,
   并且输出:第几次答案错误,请再次输入。
   直到玩家猜对为止,随后人或电脑会提示:回答正确,
   并且输出:第几次答案正确,本轮游戏结束。

(3)多轮游戏功能:

   在第一轮游戏结束后,
   会输出界面2,其包含有继续与退出游戏这两个功能。
   若选择继续游戏后,会进行下一轮游戏,以此类推。
   若选择退出游戏,界面关闭,随后退出。

(4)记录时长功能:

   *在选择开始游戏之前,
   用clock_t来定义开始变量start,结束变量end,
   随后用start=clock()来记录本次游戏的开始时间,
   若进行多轮游戏后选择退出游戏,
   此时,用end=clock()来记录本次游戏的结束时间,
   即可算出玩家游戏总时长。

   *在进行每轮游戏之前,
   用clock_t来定义开始变量start1,结束变量end1,
   随后用start1=clock()来记录本轮游戏的开始时间,
   若进行多轮游戏后选择退出游戏,
   此时,用end1=clock()来记录本轮游戏的结束时间,
   即可算出此轮玩家游戏时长。

3.最后,程序还有其他优点:

(1)在选择功能中,若出现选择项,输入的选项必须正确且合法,
   不然会一直进行输入,直到输入正确且合法为止。

(2)有良好的交互界面,其包含有较多的文字叙述,
   运用较多的停顿函数Sleep()函数,以增可观感。

(3)并且所定义的函数以及变量,以英文来命名。
   例如:开始,用英文start来命名;选择,用英文chioce来命名;
   猜测数,用英文guess来命名;正确数,用英文magic来命名;
   以此来增加程序的可读性,便于阅读与理解。

>>>总体来说,猜数字小游戏 ,其所写的程序可读性较高,
   所体现的功能较完善,所体现的交互性也较完善。
   简言而之,这程序基本可运行,可实现相应的功能。

*********************************************************/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>

//声明函数
int main();       //主函数
void start1();    //初始界面1,开始
void start2();    //初始界面2,继续

void start1()     //初始界面1,开始
{
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|         欢迎使用猜数字小游戏        |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|             0.开始游戏              |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|             2.退出游戏              |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t*请选择功能: ");
}

void start2()     //初始界面2,继续
{
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|         欢迎使用猜数字小游戏        |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|             1.继续游戏              |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t|             2.退出游戏              |\n");
    printf("\t\t\t\t---------------------------------------\n");
    printf("\t\t\t\t*请选择功能: ");
}

int main()    //主函数
{
    char x[3][20]={"开始游戏","继续游戏","退出游戏"};
    char y[2][10]={"电脑","人"};
    int a,b;
    char choicea;
    
    start1();    //初始界面1,开始
    while(1)    //判断输入的字符是否合法正确
    {
        scanf(" %c",&choicea);
        if(choicea=='0'||choicea=='2') break;
        else printf("\t\t\t\t*请重新选择:");
    }
    a=choicea-48;

    if(a==2)    //退出游戏
    {
        printf("\n\t\t\t\t\t\t%s\n",x[a]);
        puts("\n\t\t\t\t\t<<<<****谢谢使用****>>>>");
        Sleep(2000);    停顿2秒
    }
    else if(a==0)    //开始游戏
    {
        //定义两个变量,表此次游戏开始与结束的时间
        clock_t start,end;
        start=clock();    //此次游戏开始时间

        printf("\n\t\t\t\t\t\t%s\n",x[a]);
        while(1)
        {
            //定义两个变量,表此轮游戏开始与结束的时间
            clock_t start1,end1;
            start1=clock();    //此轮游戏开始时间

            char choiceb;
            printf("1.请选择游戏玩家的身份(A:电脑;B:人):");
            while(1)    //判断输入的字符是否合法正确
            {
                scanf(" %c",&choiceb);
                if(choiceb=='A'||choiceb=='B') break;
                else printf("\n*请重新选择玩家身份:");
            }
            //choiceb-17表示是将大写字母字符变为数字字符,再-48表示是将其变为整型数字
            b=choiceb-17-48;
            printf(">>>此轮游戏玩家为:%s\n",y[b]);
            puts("");

            if(b==0)
                b=1,printf("2.%s给出正确数字为:",y[b]);
            else if(b==1)
                b=0,printf("2.%s给出正确数字为:",y[b]);

            int guess,magic;    //guess表猜的数字,magic表正确的数字
            int up=100,down=1;  //定义最大的变量为100,定义最小的变量为1;
            srand(time(NULL));
            magic=rand()%100+1;    //产生随机数
            printf("%d\n",magic);
            puts("");

            int count=1;
            while(1)    //进行判断猜的与正确的是否相同,并输出相应的提示
            {
                printf("(%d)玩家给出猜的数字为:",count);
                guess=(up+down)/2;    //用二分查找
                if(magic!=99)
                printf("%d\n",guess);
                else printf("%d\n",guess+1);    //若等于99,输出100

                if(guess>magic)
                {
                    printf("   *%s提示:猜大了!!\n",y[b]);
                    up=guess;
                }
                else if(guess<magic) 
                {
                    printf("   *%s提示:猜小了!!\n",y[b]);
                    down=guess;
                }
                if(guess!=magic) 
                {
                    printf("   <%d>第%d次答案错误,请再次输入\n",count,count);
                    printf("\n");
                }
                else if(guess==magic)
                {
                    printf("   *%s提示:回答正确!!\n",y[b]);
                    printf("\n");
                    printf("[%d]第%d次答案正确,本轮游戏结束\n",count,count);    
                    break;
                }
                if(guess==99) magic--;    //若猜的数为99,正确数减1
                count++;
                Sleep(1000);   //停顿1秒
            }
            end1=clock();    //此轮游戏结束时间
            printf("本轮玩家游戏时长:%.2lf秒\n",(double)(end1-start1)/CLOCKS_PER_SEC);
            printf("\t\t\t\t\t\t此轮结束\n");

            system("pause");    //输出:请按任意键继续. . .
            system("cls");    //将上一次输出清屏

            start2();    //初始界面2,继续
            while(1)    //判断输入的字符是否合法正确
            {   
                scanf(" %c",&choicea);
                if(choicea=='1'||choicea=='2') break;
                else printf("\t\t\t\t*请重新选择:");
            }   
            a=choicea-48;

            if(a==1)    //继续游戏
                printf("\n\t\t\t\t\t\t%s\n",x[a]);
            else if(a==2)    //退出游戏
            {
                end=clock();    //此次游戏结束时间
                puts("");
                printf("\t\t\t\t*本次玩家游戏总时长:%.2lf秒\n",(double)(end-start)/CLOCKS_PER_SEC);
                printf("\n\t\t\t\t\t\t%s\n",x[a]);
                puts("\n\t\t\t\t\t<<<<****谢谢使用****>>>>");
                Sleep(5000);    //停顿5秒
                break;
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值