详解C语言实现猜数字游戏
作者:build.code 发布时间:2023-11-03 04:58:51
前言:本文主要讲解以c语言编写猜数字游戏,目的是介绍C语言中的循环和分支的具体用法。
一:猜数字游戏基本介绍&对程序预期
.猜数字游戏,顾名思义,就是系统随机给出一个数字,玩家对这个数字进行猜测,如果玩家猜测的数字大于给出的数字,则系统会提示猜大了,如果玩家猜测的数字小于给出的数字,则系统会提示猜小了,这样逐步缩小猜测范围,直到玩家猜对为止。
2.程序预期:猜数字结束后,玩家如果猜对了的话可以继续游戏,也可以退出游戏
二:程序设计思路
1.总体思路:
首先,实现游戏功能必须要有一个菜单来提示玩家如何进行操作。其次,为了代码具有可读性,可以将游戏部分函数和菜单部分函数作为两个子函数,然后在主函数调用他们。然后我们为了实现玩家可以多次游戏可以使用循环。
综上所述,我们应该设计两个子函数:菜单函数和游戏函数。一个主函数
2.菜单部分函数:
菜单部分函数
void menu()
{
printf("***********************************************\n");
printf("*************************1play*****************\n");
printf("*************************0exit*****************\n");
printf("***********************************************\n");
}
菜单函数设计相对简单,只是为了提示玩家如何操作
3.游戏部分函数
void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
①在游戏函数部分,首先要生成随机数,生成随机数的方法如下:
C语言中提供了生成随机数的函数rand函数
rand函数会返回一个0到RAND-MAX的随机整数,使用这个函数需要包含头文件<stdlib.h>
但是rand函数每次生成的随机数相同,所以只用rand函数不够,所以要使用srand()函数增加随机性
后一句中说明在使用rand函数前要定义一个srand()函数
如画线句所示,srand函数的作用就是一个随机数的生成的种子。
而且需要一个无符号整型,在srand函数中括号输入一个随机数字即可生成随机数,时间正是一个一直在变化的数字。
在这里提出一个时间戳的概念:时间戳是指格林威治时间1970年01月01日00时00分00秒 (北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
因为srand需要的参数是无符号类型,所以对time进行强制类型转换。time后不需要参数,所以给他一个空指针。
使用srand((unsigned int)time(NULL))
输入time返回一个时间戳
需要一个头文件<time.h
>
因为给出的随机数范围太大,所以需要限定随机数范围
如下:int ret = rand()%100+1,将随机数限定在0-100区间,便于猜测
②:猜数字环节
利用while循环来逐步缩小猜测范围,当猜测的数字等于随机数时提示”猜对了“。
4.主函数部分
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}
主函数中使用了switch语句,和do-while语句
主要目的是为了玩家选择是否进入游戏
5.代码主体
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<time.h>void menu(){printf("***********************************************\n");printf("*************************1play*****************\n");printf("*************************0exit*****************\n");printf("***********************************************\n");}void game(){srand((unsigned int)time(NULL));int ret = rand() % 100 + 1;while (1){printf("猜数字\n");int guess = 0;scanf("%d", &guess);if (guess > ret){printf("猜大了\n");}else if (guess < ret){printf("猜小了\n");}else{printf("猜对了\n");break;}}}int main(){int input = 0;do{menu();scanf("%d", &input);switch (input){case 1:game();break;case 0:break;default:printf("输入错误,请重新输入");}} while (input);return 0;}#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
void menu()
{
printf("***********************************************\n");
printf("*************************1play*****************\n");
printf("*************************0exit*****************\n");
printf("***********************************************\n");
}
void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜数字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入");
}
} while (input);
return 0;
}
三:总结
此程序主要为了熟悉循环和分支的具体用法,并且学会利用时间戳和rand函数生成随机数。
来源:https://blog.csdn.net/m0_63807219/article/details/122525515


猜你喜欢
- 一、int还记得 C 语言里的 int 吗,C里面的 int 有着无符号与有符号之分但是Java内就没有,且固定占4个字节大小,也就是32比
- 前言背景平时开发中遇到根据当前用户的角色,只能查看数据权限范围的数据需求。列表实现方案有两种,一是在开发初期就做好判断赛选,但如果这个需求是
- 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示:上面两张图就是美团的一个二级
- 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还要
- 本文为大家分享了经典24点纸牌益智游戏的具体实现方法,供大家参考,具体内容如下一.实验内容24点游戏是经典的纸牌益智游戏。常见游戏规则:从扑
- 1.什么是mybatis动态sql看到动态,我们就应该想到,这是一个可以变化的sql语句MyBatis的动态SQL是基于OGNL表达式的,它
- kotlin基础教程之类和继承类声明使用class关键字声明类,查看其声明格式:: modifiers ("class"
- 本文实例讲述了C++求四个正整数最大公约数的方法。分享给大家供大家参考,具体如下:/** 作 者: 刘同宾* 完成日期:2012 年 11
- 本文实例讲述了C#自定义控件实现TextBox禁止粘贴的方法。分享给大家供大家参考,具体如下:开发环境:Visual Studio .net
- 今天预实现一功能,将txt中的数据转到excel表中,做为matlab的数据源。搜集一些c#操作excel的程序。步骤如下:下载一个Micr
- SpringMVC配置多个properties文件之通配符在springmvc中配置加载properties文件一般会在xml文件中配置如下
- package com.smart.frame.task.autoTask;import java.util.Collection;impo
- 问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该
- 本文实例为大家分享了Android实现旋转动画的具体代码,供大家参考,具体内容如下旋转动画(可加速、减速)1、准备工作首先需要有一个用于旋转
- 本文实例讲述了winform绑定快捷键的方法。分享给大家供大家参考。具体分析如下:第一种:Alt + *(按钮快捷键)在大家给button、
- 下面一段简单的代码给大家分享java 获取对象中为null的字段,具体代码如下所述:private static String[] getN
- 上一集中我们说到需要用Java来制作一个知乎爬虫,那么这一次,我们就来研究一下如何使用代码获取到网页的内容。首先,没有HTML和CSS和JS
- 本篇文章会向大家实例讲述以下内容:将数组转换为List将List转换为数组将数组转换为Dictionary将Dictionary 转换为数组
- Spring depends-on的使用通过在XML中的<bean>里配置depends-on属性或者在一个类上使用注解@Dep
- 组播的概念UDP信息传递的方式分三类,分别是单播 Unicast:客户端与服务器之间的点到点连接多播MultiCast:又称组播,是&