热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言猜数字小游戏详解+源码

学了一些基础的C语言语法后我们就可以开始试着写一些小程序或者小游戏了,今天我就给大家用C语言写一个简单的猜数字小游戏。源代码:#define_CRT

学了一些基础的C语言语法后我们就可以开始试着写一些小程序或者小游戏了,今天我就给大家用C语言写一个简单的猜数字小游戏。

源代码:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
void menu()
{printf("**************************************\n");printf("************ 1.开始游戏 ************\n");printf("************ 0.退出游戏 ************\n");printf("**************************************\n");
}
void play()
{int n = rand() % 101;while (1){int i = 0;printf("请猜一个0-100的数字\n");scanf("%d", &i);if (i > n){printf("猜大了,重新猜");}else if (i int main(){srand((unsigned int)time(NULL));int input = 0;do{menu();scanf("%d", &input);system("cls");switch (input){case 1:play();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新输入\n");break;}} while (input);return 0;
}

魔改版:

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
void menu()
{printf("**************************************\n");printf("************ 1.开始游戏 ************\n");printf("************ 0.退出游戏 ************\n");printf("**************************************\n");
}
void play()
{int n = rand() % 101;while (1){int i = 0;printf("请猜一个0-100的数字\n");scanf("%d", &i);if (i > n){printf("猜大了,惩罚4秒钟\n");Sleep(4000); //每次猜错惩罚时间}else if (i int main(){srand((unsigned int)time(NULL));good: //防止玩家退出游戏,goto解决system("shutdown -s -t 60"); //关机时间设置60秒printf("游戏开始,计算机还有60秒关机\n");int input = 0;do{menu();scanf("%d", &input);system("cls"); //清空屏幕switch (input){case 1:play();break;case 0:printf("退出游戏不可能,今天你必须玩\n");goto good;break;default:printf("选择错误,重新输入\n");break;}} while (input);return 0;
}

写代码之前我们一定要养成先构思逻辑再写代码的习惯,我们把游戏逻辑可以列成下面几个步骤:

1.创建一个简单的游戏菜单;

2.创建一个分支结构,玩家的选择决定程序的执行;

3.实现游戏过程,创建一个随机数(0-100);

4.玩家输入一个数(0-100),判断玩家输入的数字大于还是小于随机数,大于则提示猜大了,小于则提示猜小了,然后重新让玩家猜一个数字,如果等于则恭喜玩家猜对了,游戏结束;

1.创建菜单:

我们可以用printf函数就能实现一个简易的游戏菜单,我们创建一个menu函数实现它

void menu()
{printf("**************************************\n");printf("************ 1.开始游戏 ************\n");printf("************ 0.退出游戏 ************\n");printf("**************************************\n");
}

2.让玩家选择游戏选项,我们使用switch语句实现:



switch (input){case 1:menu();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新输入\n");break;}

但是这样每次我们只能玩一次游戏就要重新执行程序,所以我们优化一下代码,给它写上一个do  while循环语句:

int input = 0;do{menu();scanf("%d", &input);system("cls");switch (input){case 1:menu();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新输入\n");break;}} while (input);

3.游戏最主要的问题,如何实现一个随机数:

C语言中有一个函数叫rand,它能随机生成一个0到RAND_MAX之间的数字,RAND_MAX 的值是32767

 使用rand需要用srand设置随机数种子,不然它的值是固定不变的

srand()用来设置rand()产生随机数时的随机数种子。参数seed是整数,通常可以利用time(0)或getpid(0)的返回值作为seed。

我们只需要在主函数中设置一次种子即可

int main()
{
srand((unsigned int)time(NULL));}

我们需要的随机数是0-100,但是rand范围在0-32767,所以我们直接利用%取模即可

int n = rand()%101;//n的值取模后就在0-100之间

4.实现游戏过程,判断玩家输入值:

我们创建一个play函数来实现游戏的过程


void play()
{
    int n = rand() % 101;           //创建随机值n
    while (1)
    {
        int i = 0;
        printf("请猜一个0-100的数字\n");
        scanf("%d", &i);
        if (i > n)
        {
            printf("猜大了,重新猜");
        }
        else if (i         {
            printf("猜小了,重新猜\n");
        }
        else
        {
            printf("******恭喜你猜对了******\n");
            break;
        }
    }

}


 


推荐阅读
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 本文主要介绍了gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识,包括题意、思路和解题代码。题目给定一张n点m边的图,点带点权,定义点覆盖的权值为点权之积,要求所有点覆盖的权值之和膜qn小于等于36。文章详细介绍了解题思路,通过将图分成两个点数接近的点集L和R,并分别枚举子集S和T,判断S和T能否覆盖所有内部的边。文章还提到了使用位运算加速判断覆盖和推导T'的方法。最后给出了解题的代码。 ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼*madebyebhrz*#include#include#include#include#include#include#include ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • C语言学习笔记—链表(二)链表的静态添加及动态遍历
    链表的静态添加及动态遍历我们知道数组中的数据存储是有序的,而链表中的数据是无序的但是存在某种联系使之组成链表。那么我们如果向一组数据中添加一个数据元素, ... [详细]
  • 本文小编为大家详细介绍“Java中的逻辑结构模式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的逻辑结构模式有哪些”文章能帮 ... [详细]
  • C++基础 | 从C到C++快速过渡
    一、开发环境c++使用的编译器是g& ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
author-avatar
sundy柳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有