Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C语言中基于简单文本的游戏

C语言中基于简单文本的游戏
EN

Code Review用户
提问于 2020-03-18 07:28:08
回答 2查看 431关注 0票数 6

多年来,我一直坚持着同样的几种语言,于是我决定学习C。

我已经写了一个猜数游戏,它根据难度水平生成一个随机数,然后你会有5次猜测这个数字的尝试。

如果你猜错了,它会告诉你答案是高还是低,这会给你一个线索。我发现这个游戏很有交互性,我想得到一个代码审查,看看我如何改进它。

这是我的第一个C程序,我只是想改进。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int generate_random_number(int min, int max) {
    srand ( time(NULL) );
    return min + (rand() % (max - min));
}

void play() {

    int difficulty = 1; // 1 = easy, 2 = medium, 3 = hard, 4 = insane

    printf("1 = EASY, 2 = MEDIUM, 3 = HARD, & 4 = INSANE\n");
    printf("What level would you like to play: ");

    scanf("%i", &difficulty);

    int min = 0;
    int max = 0;
    int random = 0;

    if (difficulty == 1) {
        min = 0;
        max = 25;

        printf("You have selected to play easy\n\n");
    }
    else if (difficulty == 2) {
        min = 0;
        max = 50;

        printf("You have selected to play medium\n\n");
    }
    else if (difficulty == 3) {
        min = 0;
        max = 75;

        printf("You have selected to play hard\n\n");
    }
    else if (difficulty == 4) {
        min = 0;
        max = 100;

        printf("You have selected to play insane\n\n");
    }

    random = generate_random_number(min, max);

    int tries = 5;
    int won = 0;

    while (tries > 0)
    {
        int guess = 1000000; // just so it doesn't accidentally equal to random

        printf("Guess a number %i to %i: ", min, max);
        scanf("%i", &guess);

        if (guess == random) {
            won = 1;
            break;
        }
        else {
            if (guess > random) {
                printf("Incorrect guess, the answer is lower than your guess!\n\n");
            }
            else {
                printf("Incorrect guess, the answer is higher than your guess!\n\n");
            }
        }

        tries -= 1;
    }

    if (won) {
        printf("Congratulations, you have won the game!");
    }
    else {
        printf("Sorry, you are out of tries.\n\n");
    }
}

int main() {
    while (1) {
        play();
    }

    return 0;
}
EN

回答 2

Code Review用户

发布于 2020-03-18 17:27:15

int generate_random_number(int min,int max) { srand (空);返回min + (rand() % (max - min));}

您应该只在main开始时为随机数生成器添加一次种子。在这种情况下,如果(由于某种原因)某人在一秒钟内玩了不止一轮,那么两场比赛的号码都是一样的。对于这个特定的程序来说,可能不是一个大问题,但是需要注意一些事情。

票数 5
EN

Code Review用户

发布于 2020-03-18 08:04:44

如果(困难== 1) {如果(困难== 2) {如果(困难== 3) {

这看起来像switch (difficulty)可能更合适--也许使用default分支来捕获超出范围的值。

或者,更简单地说,由于我们只是选择值,而且min总是为0,所以只需从数组值中选择(在验证用户的选择在范围内之后):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int max[] = { 25, 50, 75, 100 };

实际上,使用这些值,我们可以简单地乘以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int max = 25 * difficulty;

扫描(“%i”,及困难);

不要仅仅丢弃scanf()的结果--总是测试它转换了多少值。在这种情况下,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (scanf("%i", &difficulty) != 1) {
    fputs("Enter a number!\n", stderr);
    exit(EXIT_FAILURE);  /* or some better handling */
}

同样,这里:

scanf("%i", &guess);

最后,允许用户在厌倦游戏时退出游戏是礼貌的(我知道,我也不敢相信会发生这种事!)

票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/239103

复制
相关文章
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.2K0
大数据还是人工智能?哪个发展更好
大数据和人工智能,都是当下的技术热点,受到的关注都不少,并且这两个技术领域,本身也存在很强的关联性,因此很多人也会把这两者拿来做对比,从技术难度到未来前景,大家都非常关注。大数据还是人工智能?哪个未来发展更好?今天我们来具体聊一聊。
成都加米谷大数据
2020/10/30
6500
大数据还是人工智能?哪个发展更好
verilog调用vhdl模块_verilog和vhdl哪个更好
以Verilog文件为顶层文件,调用VHDL模块,testbench为Verilog文件。 1、新建project 2、编写.vhd文件,FPGA_VHDL.vhd,文件名与模块名称一致;
全栈程序员站长
2022/11/08
2.2K0
verilog调用vhdl模块_verilog和vhdl哪个更好
哪个定时任务库更好用? Schedule,APScheduler,还是 Celery?
在挑选最佳的定时任务库时,我们也面临权衡取舍,取决于我们特定的需求。需要考虑的一些因素包括
somenzz
2023/10/25
8240
哪个定时任务库更好用? Schedule,APScheduler,还是 Celery?
前端开发写代码哪个软件更好用?
群里的朋友,经常问到web前端开发写代码用那个软件好?今天在这里统一回答下,主流的web前端开发写代码的软件有这些Webstorm、Vscode、Sublime Text、HBuilder、Dreamweaver、notepad++、editplus等,做前端这么多年了,下面谈下我的使用感受吧。
全栈程序员站长
2022/09/02
3.3K0
前端开发写代码哪个软件更好用?
函数在栈中的调用过程
栈是一种线性存储的数据结构,向下增长。其存在栈底和栈顶,栈对其中的数据元素有进栈和出栈的操作,遵循‘First In last Out’即FILO原则。
Elapse
2020/08/17
3.9K0
独家 | 哪个更好:一个通用模型还是多个专用模型?
作者:Samuele Mazzanti翻译:欧阳锦校对:赵茹萱 本文约3900字,建议阅读10分钟本文通过实验验证了一个通用模型优于多个专用模型的有效性的结论。 比较专门针对不同群体训练多个 ML 模型与为所有数据训练一个独特模型的有效性。 图源作者 我最近听到一家公司宣称:“我们在生产中有60个流失模型。”(注:流失模型是一种通过数学来建模流失对业务的影响。)我问他们为什么这么多。他们回答说,他们拥有 5 个品牌,在 12 个国家/地区运营,并且由于他们想为每个品牌和国家/地区的组合开发一种模型,因
数据派THU
2023/03/29
1.3K0
独家 | 哪个更好:一个通用模型还是多个专用模型?
Java和Python哪个更好?
大家好,又见面了,我是你们的朋友全栈君。 一些开发人员声称Python比Java更有效率。但这应该先弄清Python和Java之间的区别是什么? Java和Python的区别 Java是一种严格的类型
全栈程序员站长
2022/09/08
4170
LAMP和LNMP哪个更好
对于配置服务器的网站环境,很多人不知道是装apache好,还是装nginx好。下面给大家详细介绍LNMP和LAMP的优缺点,供大家在配置服务器的web环境的时候做参考。
风吹屁屁凉
2021/07/14
1.8K0
mybatis中调用存储过程_java如何调用存储过程
CREATE PROCEDURE insert_user(OUT u_id INTEGER,IN u_name VARCHAR(20),IN u_sex VARCHAR(20),IN u_age INTEGER) BEGIN INSERT INTO t_user (name,sex,age) VALUES (u_name,u_sex,u_age); SET u_id=LAST_INSERT_ID(); END
全栈程序员站长
2022/08/03
4.1K0
mybatis中调用存储过程_java如何调用存储过程
UML工具到底哪个更好用
经典如Enterprise Architect 美丽如MagicDraw UML 免费如StarUML
全栈程序员站长
2022/09/13
3.5K0
在 Gitlab CI 中调用 Sonarqube 进行代码扫描
Gitlab 提供了基于 Code Climate 的代码质量评估功能,这一功能是通过 dind(Docker in Docker)方式运行的,在 Kubernetes 环境中、尤其是托管集群中,这种方式不太合适,还好还有一个替代方案:Sonarqube,通过在 .gitlab-ci.yml 中的设置,可以使用 Sonarqube 对代码进行扫描,接收到 Commit 之后,Sonarqube 会生成针对提交的代码质量提示,如图所示:
崔秀龙
2019/07/22
8.1K0
在 Gitlab CI 中调用 Sonarqube 进行代码扫描
在线文档编辑工具哪个更好?
在线文档编辑工具相当于一个轻量级、跨平台、多途径的Office。使用在线文档编辑工具,首先我们不用安装Office软件;其次在电脑网页上、手机小程序里我们都可以使用在线文档进行简单的编辑;最后我们编辑的文档可以实时更新、分享、协作等。今天呢给大家分享几个常用的在线文档编辑工具。
用户10264843
2023/05/08
2.3K0
java与python那个更好_java和python哪个更好用?
互联网上的许多文章都举例论证了Python和Java之间的比较。但是没有人给出“ java和python哪个更好用?”的明确理由。我们都知道,如今Python正在与几乎每种编程语言竞争。
全栈程序员站长
2022/09/08
5910
Java与Python哪个更好?「建议收藏」
一些开发人员声称Python比Java更有生产力。但更应先说明的是:Python和Java有什么区别?
全栈程序员站长
2022/09/08
4160
Java与Python哪个更好?「建议收藏」
java python哪个好_java和python哪个更好用?(一)[通俗易懂]
Java是世界上最古老,功能最强大的编程语言之一。它是一种通用的静态类型的语言。这意味着任何人都可以使用它。使用此编程语言没有特定的目的。
全栈程序员站长
2022/09/08
6.7K0
c语言与java哪个更好_c语言和java哪个好?[通俗易懂]
看到这个问题,一定要参与一下,这两个语言我都太熟悉了,也用了很长时间。关于程序设计语言,有这么两句话:C语言,神一样的语言。java语言是一个神话。所以说这是两个神级语言,到底哪个好?下面咱们逐个分析一下:1。C语言,C语言是计算机程序设计语言史上具有划时代意义的语言,到今天为止也依然是主力语言。
全栈程序员站长
2022/09/08
5.2K0
@Transactional注解在类上还是接口上使用,哪种方式更好?
Spring @Transactional想必大家都很熟悉,那它是在类上或实现类的方法上和在接口上或接口方法上哪种使用方式是更好的选择呢?
索码理
2022/09/20
1.4K0
点击加载更多

相似问题

不包括周末的日期之间的小时数

12

获取不包括周末的小时数

12

如何在postgres中将间隔时数添加到时间戳中,不包括周末时间

12

计算两个日期之间的小时数-不包括周末

10

日期差异,不包括周末

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文