【C语言】升级版猜数字小游戏(含简单、中等、困难模式并且支持战绩查询以及界面美化)

简介: 【C语言】升级版猜数字小游戏(含简单、中等、困难模式并且支持战绩查询以及界面美化)

文章目录

游戏效果

我们在写任何一个小项目之前先要明确自己要实现的效果

所以猜数字游戏能实现什么效果呢?

顾名思义,猜数字游戏就是让系统随机生成一个数字,由玩家来猜,之后系统反馈信息,猜大了还是猜小了,逐一减少默认数字的范围之后,最终锁定目标。

  • 电脑随机给出一个目标数字,玩家进行猜测
  • 电脑会根据玩家猜测的数字,提示猜大了还是小了
  • 直到猜对为止,一轮游戏结束.
  • 游戏结束会询问是否继续.1代表继续,0代表停止游戏.

其实简单的猜数字游戏到这里的话就已经可以了

但是我们可以增加一些其他的功能

首先我们可以再设置一下游戏的难度

  • 游戏共有3中模式(简单、普通、困难
  • 简单模式:猜25次
  • 普通模式:猜15次
  • 困难模式:猜5次

除了增加游戏的难度以外,还可以再增加战绩查询模块

  • 游戏会记录你的战绩,并存储,当你玩完一把以后,可以在菜单中按2表示查询战绩.

游戏结构

清楚的知道了想要实现的目标,那我们开始搭建逻辑结构.

所以逻辑结构是啥呢?

  • 游戏开始会有一个菜单提示,然后让你选择
  • 输入0代表退出游戏
  • 输入1代表开始游戏
  • 输入2代表查询战绩
  • 输入其他数字提示输入错误

代码实现

为了实现游戏的基本功能,我们应该有一个游戏菜单,通过菜单玩家可以选择是进入游戏还是退出游戏,且为了可以使该游戏可以反复玩,这个过程应该是一个循环,选择退出游戏时就打破这个循环。为了使代码具有条理性我们定义唯一的主函数,然后按功能写子函数,让每一个子函数都有其意义。

所以我们这个项目的整个设计逻辑结构如下:

  • 菜单函数:menu()
  • 游戏函数:game()
  • 游戏模式函数:model()
  • 保存战绩函数:save()
  • 查询战绩函数:find()

主函数

因为程序从主函数开始运行,到主函数结束时结束,所以主函数应该起到搭建整个游戏基本框架的功能

代码如下:

int main()
{
  int input = 0;
  do
  {
    menu();
    printf("请选择:> ");
    scanf("%d", &input);
    switch (input)
    {
    case 0:
      printf("成功退出游戏\n");
      break;
    case 1:
      game(); //玩游戏函数
      save(); //保存战绩函数
      break;
    case 2:
      find(); //查询战绩函数
      break;
    default:
      printf("输入错误,请重新输入!\n");
    }
  } while (input);
  return 0;
}

菜单函数

菜单功能十分简单

代码示例如下:

void menu()
{
  printf("\n************Welcome To My Game's World*****************\n");
  printf("*******************************************************\n");
  printf("*******************  0. 退出游戏  *********************\n");
  printf("*******************  1. 开始游戏  *********************\n");
  printf("*******************  2. 查询战绩  *********************\n");
  printf("*******************************************************\n");
}

游戏函数

玩家选择好游戏模式以后,电脑首先会给出一个玩家需要猜的数字(我设置的是1~1000)

玩家开始猜,假如猜大了,系统会提示“猜大了”;假如猜小了,系统会提示“猜小了”;

并且每猜测一次,都会提示还剩余几次机会

为了使整个游戏看起来比较生动,我用了一些比较搞怪的话哈哈哈

void game()
{
  srand(time(NULL)); //随机数生成器
  int r = rand() % 1001; //r % 1001 --> 表示生成的随机数范围是:1~1000
  int input = 0; //input 代表你输入的猜测的数字
  int num = 0; //num代表猜测剩余次数
  num = model(); //游戏模式函数
  while (1)
  {
    printf("\n请输入你猜的数字(0-1000):> ");
    scanf("%d", &input);
    if (num == 0)
    {
      break;
    }
    if (input > r)
    {
      printf("\n猜大了,再猜猜\n");
    }
    else if (input < r)
    {
      printf("\n猜小了,再猜猜\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
    num--;
    printf("\n加油,你还剩余%d次机会哟\n", num);
  }
  if (!num)
  {
    printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
    computer++; //标记电脑的战绩
  }
  else
  {
    printf("你真的太棒了!!!\n");
    player++; //标记玩家战绩
  }
  printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}

关于随机数

生成随机数的方法:

C语言生成随机数要用rand函数

image.png

但是单单使用rand()函数来生成随机数是不行的,因为它每玩一次生成的随机数都是相同的,即随机数不随机,所以要通过srand()函数,种下一个随机种子,来产生随机数。

根据时间每时每刻都是变化的,可以用time()时间函数来产生种子。

image.pngimage.png

这里time_t的类型就是在C语言中被定义为长整型,而srand()函数的参数类型为unsigned int (无符号整形),所以使用时要强制类型转换,而且time()函数,不需要设置参数,故用NULL代替。

游戏模式函数

int model()
{
  int i = 0;
  int num = 0;
  printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
  scanf("%d", &i);
  if (i == 1)
  {
    easy();
    num = 25;
  }
  else if (i == 2)
  {
    medium();
    num = 15;
  }
  else
  {
    hard();
    num = 5;
  }
  return num;
}

保存战绩函数

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

void save()
{
  FILE* fp = fopen("grade.txt", "w");
  if (fp == NULL)
  {
    exit(-1);
  }
  else
  {
    fprintf(fp, "computer : player = %d : %d\n", computer, player);
  }
  fclose(fp);
}

查询战绩函数

void find()
{
  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");
}

整体代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
void menu()
{
  printf("\n************Welcome To My Game's World*****************\n");
  printf("*******************************************************\n");
  printf("*******************  0. 退出游戏  *********************\n");
  printf("*******************  1. 开始游戏  *********************\n");
  printf("*******************  2. 查询战绩  *********************\n");
  printf("*******************************************************\n");
}
int model()
{
  int i = 0;
  int num = 0;
  printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
  scanf("%d", &i);
  if (i == 1)
  {
    num = 25;
  }
  else if (i == 2)
  {
    num = 15;
  }
  else
  {
    num = 5;
  }
  return num;
}
void game()
{
  srand(time(NULL));
  int r = rand() % 1001;
  int input = 0; //input 代表游戏猜测的数字
  int num = 0; //num代表猜测剩余次数
  num = model(); //游戏模式函数
  while (1)
  {
    printf("\n请输入你猜的数字(0-1000):> ");
    scanf("%d", &input);
    if (num == 0)
    {
      break;
    }
    if (input > r)
    {
      printf("\n猜大了,再猜猜\n");
    }
    else if (input < r)
    {
      printf("\n猜小了,再猜猜\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
    num--;
    printf("\n加油,你还剩余%d次机会哟\n", num);
  }
  if (!num)
  {
    printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
    computer++; //标记电脑的战绩
  }
  else
  {
    printf("你真的太棒了!!!\n");
    player++;
  }
  printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}
void find()
{
  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 save()
{
  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();
    printf("请选择:> ");
    scanf("%d", &input);
    switch (input)
    {
    case 0:
      printf("成功退出游戏\n");
      break;
    case 1:
      game(); //玩游戏函数
      save(); //保存战绩函数
      break;
    case 2:
      find(); //查询战绩函数
      break;
    default:
      printf("输入错误,请重新输入!\n");
    }
  } while (input);
  return 0;
}

动画演示

我们来看下游戏运行的效果把!!!

image.png

其实到了这里的话就基本已经完工了!!!

但是,我觉得选择模式哪里太单调了,想来点不一样的,于是乎!骚操作来了!

升级版

我在游戏模式函数model()里面,又分别在对应的简单、普通、困难模式里面添加了3个函数

当你选择简单模式时,屏幕会清屏然后慢慢的打印出一句欢迎语!就像这样!

普通和困难模式也一样

我们来看看效果!

image.png

简单模式函数

void easy()
{
  char arr1[] = "The Game is about to enter easy mode";
  char arr2[] = "####################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("只有菜鸡才会选择简单模式!\n");
  return 0;
}

普通模式函数

void medium()
{
  char arr1[] = "The Game is about to enter medium mode";
  char arr2[] = "######################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("哎哟!你终于不玩简单模式了呀?\n");
  return 0;
}

困难模式函数

void hard()
{
  char arr1[] = "The Game is about to enter hard mode";
  char arr2[] = "####################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("这可不是一般的难哦!拿出你的实力让我看看吧!\n");
  return 0;
}

注意:需要引用头文件:#include <windows.h>

添加游戏模式函数

int model()
{
  //char str[20] = { 0 };
  int i = 0;
  int num = 0;
  printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
  scanf("%d", &i);
  if (i == 1)
  {
    easy(); //简单模式函数
    num = 25;
  }
  else if (i == 2)
  {
    medium(); //普通模式函数
    num = 15;
  }
  else
  {
    hard(); //困难模式函数
    num = 5;
  }
  return num;
}

升级版完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
void menu()
{
  printf("\n************Welcome To My Game's World*****************\n");
  printf("*******************************************************\n");
  printf("*******************  0. 退出游戏  *********************\n");
  printf("*******************  1. 开始游戏  *********************\n");
  printf("*******************  2. 查询战绩  *********************\n");
  printf("*******************************************************\n");
}
void easy()
{
  char arr1[] = "The Game is about to enter easy mode";
  char arr2[] = "####################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("只有菜鸡才会选择简单模式!\n");
}
void medium()
{
  char arr1[] = "The Game is about to enter medium mode";
  char arr2[] = "######################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("哎哟!你终于不玩简单模式了呀?\n");
}
void hard()
{
  char arr1[] = "The Game is about to enter hard mode";
  char arr2[] = "####################################";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
    arr2[left] = arr1[left];
    arr2[right] = arr1[right];
    printf("%s\n", arr2);
    Sleep(100);//睡眠函数-单位是毫秒
    system("cls");//执行系统命令的
    left++;
    right--;
  }
  printf("这可不是一般的难哦!拿出你的实力让我看看吧!\n");
}
int model()
{
  int i = 0;
  int num = 0;
  printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
  scanf("%d", &i);
  if (i == 1)
  {
    easy();
    num = 25;
  }
  else if (i == 2)
  {
    medium();
    num = 15;
  }
  else
  {
    hard();
    num = 5;
  }
  return num;
}
void game()
{
  srand(time(NULL));
  int r = rand() % 1001;
  int input = 0; //input 代表游戏猜测的数字
  int num = 0; //num代表猜测剩余次数
  num = model(); //游戏模式函数
  while (1)
  {
    printf("\n请输入你猜的数字(0-1000):> ");
    scanf("%d", &input);
    if (num == 0)
    {
      break;
    }
    if (input > r)
    {
      printf("\n猜大了,再猜猜\n");
    }
    else if (input < r)
    {
      printf("\n猜小了,再猜猜\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
    num--;
    printf("\n加油,你还剩余%d次机会哟\n", num);
  }
  if (!num)
  {
    printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
    computer++; //标记电脑的战绩
  }
  else
  {
    printf("你真的太棒了!!!\n");
    player++;
  }
  printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}
void find()
{
  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 save()
{
  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();
    printf("请选择:> ");
    scanf("%d", &input);
    switch (input)
    {
    case 0:
      printf("成功退出游戏\n");
      break;
    case 1:
      game(); //玩游戏函数
      save(); //保存战绩函数
      break;
    case 2:
      find(); //查询战绩函数
      break;
    default:
      printf("输入错误,请重新输入!\n");
    }
  } while (input);
  return 0;
}

动画演示

image.png

相关文章
|
1月前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
57 4
|
2月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
102 1
|
2月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
91 1
|
2月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
3月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
73 1
C语言——实现贪吃蛇小游戏
|
3月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
55 1
C 语言——实现扫雷小游戏
|
2月前
|
存储 API C语言
【C语言】实践:贪吃蛇小游戏(附源码)(一)
【C语言】实践:贪吃蛇小游戏(附源码)
|
2月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
2月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
2月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)