模拟人机猜数游戏

设计目的

1、加深学生对该课程基础知识和基本理论的理解和掌握,培养学生综合运用所学知识独立
分析和解决问题的能力;
2、培养学生在计算机软硬件开发、理论计算、查阅资料等方面的能力,使学生逐步树立正
确的设计思想;
3、加强理论联系实际,培养学生科学严谨、实事求是的工作作风和勇于探索的创新精神。

任务描述

为了提高学生编程能力,请设计一款人机猜数游戏程序。该程序主要功能要求如下:
1、游戏开始时,先由计算机“想”一个四位数,然后让人猜这个四位数是多少。
猜数时,计算机先判断输入的四位数猜对几个数字,并且在猜对的这些数字中有几个位置是对的,将统计情况显示出来供猜数人参考;猜数人可据此提示继续猜数,直到猜对为止。2、猜对后,计算机显示本轮猜数一共猜了几次以及获得的分数;
分数计算公式如下:
次数<=3 计100分
5<次数<=10 计60分
3<次数<=5 计80分
10<次数计0分
3、一轮猜数游戏结束后,可重复玩,直到不想再玩为止:
4、开始每轮猜数游戏时,要保证计算机“想”的数和前面“想”的数不同;
5、游戏结束后,可查看每轮猜数历史记录(显示每次计算机“想”的数,人猜数所用次数
和得分)

设计要求

1、要求按照分析、设计、编码、调试和测试的软件开发过程独立完成本任务;

2、应用模块化编程思想。系统的各项功能分别用函数编写,并通过主函数调用实现其所有功
能。
3、系统完成的各项功能要求设计成一个菜单。开始运行程序时,先显示主菜单,然后用户通过菜单项选择操作完成相应操作。例如以下菜单形式:猜数游戏查看历史2竹退出系统请选择[11213]:

源码

void display_menu()
{
    puts("1、猜数游戏");
    puts("2、查看历史");
    puts("3、退出系统");
    puts("请选择[1/2/3]: ");
}
int get_choise()
{
    int i;
    CLS;
    display_menu();
    scanf("%d", &i);
    CLS;
    return i;
}
void game()
{
    int flag = 1;
    while (flag)
    {
        int num = get_random();
        int step = 0;
        puts("我准备好了一个数字,快来猜猜看吧!");
        int g_num = -1;
        while (g_num != num)
        {
            if (g_num != -1)
            {
                printf(g_num > num ? "大了" : "小了");
            }
            step++;
            puts("请输入数字:");

系统分析

         猜数字游戏,是对用户输入的数字进行判定,是否与游戏程序产生的数字相同,从而判定游戏胜负的程序。主要包括:随机数产生,历史记录,流程控制三个部分。

总体设计

         本游戏设计要求运用模块化思想,设计和实现一个猜数字游戏,因此本游戏可划分为以下三个模块,系统功能结构图如图1所示。

  1. 随机数产生模块:作为游戏的重要组成部分,用以产生固定范围内的随机数,及四位整数。
  2. 成绩判定模块:用以判定玩家最终得分。
  3. 菜单输出模块:输出菜单,给玩家提供以相应的引导。
  4. 流程控制模块:控制整个程序的运行,根据用户的输入来进行相关的操作。
  5. 游戏本体模块:即游戏本身,整个游戏的逻辑部分。
  6. 历史查询模块:可以查询玩家历史的游戏成绩。

图1

详细设计

数据结构设计

         typedef struct

         {

              int count;

              int grade;

         } history;//历史记录

         history his_list[1000];//记录池

         int count;//当前游戏轮数

函数功能描述

序号

函数名

功能

1

main

主函数,调用play函数

2

get_random

获取随机数

3

get_grade

计算并返回玩家成绩

4

display_menu

打印菜单

5

get_choise

获取玩家选择功能

6

game

执行游戏本体逻辑

7

find_history

列出历史成绩

8

play

控制整体游戏流程

 各函数流程讲解

  1. main函数
    调用play函数
  2. get_random函数
    首先设置初始随机数种子为当前时间
    获取当前随机数,并保证其大于1000
    然后另其对10000取余,保证其小于10000
  3. get_grade函数
    依次判断a的范围,并返回最终成绩
  4. display_menu函数
    依次打印菜单各个选项
  5. get_choise函数
    获取并返回玩家的菜单选项
  6. game函数
    首先调用get_random以获取随机数
    然后设置step记录玩家所耗费操作步数
    接着通过循环,只要玩家输入数字和预定随机数不同,便继续循环,让玩家输入
    如果玩家输入数字和预期相同,则记录该次游玩记录,并询问玩家是否继续,若继续,重复上述步骤
  7. find_history函数
    遍历记录数组,并依次打印玩家的成绩和操作次数,之后以星号行分割
  8. play函数
    调用get_choise函数,如果该函数返回的是0以外的数字,则执行对应选择,否则推出游戏

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值