文章目录

  • 游戏效果
  • 游戏结构
  • 代码实现
    • 主函数
    • 菜单函数
    • 游戏函数
      • 关于随机数
    • 游戏模式函数
    • 保存战绩函数
    • 查询战绩函数
    • 整体代码
    • 动画演示
  • 升级版
    • 简单模式函数
    • 普通模式函数
    • 困难模式函数
    • 添加游戏模式函数
  • 升级版完整代码
    • 动画演示

游戏效果

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

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

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

  • 电脑随机给出一个目标数字,玩家进行猜测

  • 电脑会根据玩家猜测的数字,提示猜大了还是小了

  • 直到猜对为止,一轮游戏结束.

  • 游戏结束会询问是否继续.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~1000int 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函数

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

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


这里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;
}

动画演示

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

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

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

升级版

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

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

普通和困难模式也一样

我们来看看效果!

简单模式函数

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;
}

动画演示

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

  1. Java语言实现猜数字小游戏

    之前笔者在学习C语言的初级阶段,就已经实现了用C语言简单实现猜数字小游戏,既然笔者最近在学习Java的初级阶段,那么,也应该写一个Java语言实现的猜数字小游戏!! C语言实现猜数字小游戏:原文链接为 ...

  2. 【C语言】猜数字小游戏详细教程

    大家好!我是同学[森],一名计算机爱好者,今天让我们进入小游戏开发模式.若有错误,请多多指教.小主使用的是VS2019编译器. 由于小主是大一学生,知识掌握水平有限,代码可能会有写漏洞和不足,仅供借鉴 ...

  3. java实现猜数字小游戏(简单+详细)

    话不多说直接上代码!!! import java.util.Random; import java.util.Scanner;public class hehe{public static void ...

  4. C语言实现猜数字小游戏(详细讲解)

    本篇文章的重点是讲解如何使用C语言实现猜数字这个简单的小游戏 封面就是运行大概样子 首先我们对这个游戏的流程进行一个梳理: 1.显示菜单 2.选择是否开始游戏 3.如果开始游戏自动生成一个范围之间的随 ...

  5. c语言作业 猜数字游戏,C语言实现猜数字小游戏

    本文实例为大家分享了C语言猜数字的具体代码,供大家参考,具体内容如下 一.描述 猜数字游戏. 二. 程序 使用srand((unsigned)time(NULL)),产生随机数种子. int rand ...

  6. 如何运用C语言制作猜数字小游戏?

     之前做课程设计无意中发现了这个好玩的游戏,于是就抱着做着玩的心态开始用c写这个东西,虽然东西不够精致,但是也没有太大瑕疵,希望各位大神们能给出点意见,也希望这篇小代码能给您帮助.(ps:游戏排行 ...

  7. 【娱乐大闯关】C语言实现猜数字小游戏

    文章目录 1.打印菜单 2.选择器 3.猜数字--核心 生成随机数 4.头文件 5.主函数 6.执行结果 猜数字游戏规则: 让电脑随机生成一个数字,然后玩家输入所猜的数,再让电脑进行比较,若比随机数大 ...

  8. html5猜数字游戏代码,js猜数字小游戏的简单实现代码

    复制代码 代码如下: 简易计算机 //获取随机数 function GetRandomNum(Min,Max) { var Range = Max - Min; var Rand = Math.ran ...

  9. python编程猜数字小游戏(简单)

    import random print('---------猜数字游戏,范围是0-100---------') secret = random.randint(1,100) temp=input('请 ...

最新文章

  1. python和R对dataframe创建新的列或者改变列:dplyr、rename、map、mapvalues、astype、as.character、as.integer、as.numeric
  2. 哥调的不是车,是寂寞
  3. 计算机组成流水系统可以,计算机组成原理实验十三建立指令流水系统实验
  4. 多项目开发下的dll文件管理
  5. spring----注解
  6. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
  7. 《软件工程》课程改进意见
  8. 动态PHP查看新闻,PHP_用文本文件实现的动态实时发布新闻的程序,动态实时发布新闻的程序,可 - phpStudy...
  9. ubuntu18.04配置远程服务器:安装ssh
  10. 同样是机器学习算法工程师,你的面试为什么过不了?
  11. java地址有什么构成_IP地址采用分层结构,由(     )组成。
  12. 入口函数ufusr()与ufsta()的区别
  13. 会员分享几个平时看榜单常去的网站
  14. 【基础数据库】经济行业分类
  15. DbUtils jar包下载
  16. 应用多开小工具(二次编译)
  17. 模拟抖音推荐算法检测视频原创度
  18. 2014校园招聘_华为2014校园招聘
  19. 【sketchup 2021】草图大师的场景优化工具1【群组工具和组件工具的详细用法(重要)】
  20. 开机广告页面2017流行样式 dialogTheme的popuwindow版本

热门文章

  1. android获取屏幕尺寸,像素
  2. 论语 季氏篇(笔记)
  3. C# 在子窗体中调用父窗体的方法
  4. 汽车网络安全风险评估方法
  5. 华为云计算机总裁,华为发布人事任命公示 余承东兼任华为云与计算BG总裁
  6. 唱好歌首先要掌握上海学唱歌的发音技巧
  7. 基于四元素法的捷联惯导姿态更新算法
  8. 2022全国中学生数学奥林匹克竞赛(决赛)获奖名单来了!
  9. 配置流复制应用(10g+from linux to aix)
  10. 【修改蓝牙设备名称】一步简单操作