投骰子——(随机游戏的控制)

news2024/11/24 16:01:51

精华点在于:利用封装,函数之间的良好调用,从而清晰明了的解决问题。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
# include<stdlib.h>
# include<time.h>
# include"math.h"
# define ARR_LEN 10
# define MAX_NUM 1000
# define _NUM 6
/*
* 第一次掷的时候:

如果点数之和为 7 或 11 则获胜;
如果点数之和为2、3或12则落败;
其他情况下的点数之和称为“目标”,继续投掷两个骰子。
在后续的投掷中:

如果玩家再次掷出“目标”点数则获胜;
如果掷出7则落败;
其他情况都忽略,继续投掷两个骰子。
在每一局游戏结束时,程序都要询问用户是否再玩一次,如果用户输入的回答不是 y 或 Y ,那么就结束游戏,程序此时要打印显示胜败的次数。
* 
* 
*/
/*
两个筛子的和 作为一个随机数,
区别在于 第一次和其他几次的输赢规律是不一样的
第一次 结果的和如果是7/11则是获胜  =》结束
如果是2、3、12则识别 =》结束
其他 情况则记录目标  =》第二次投掷

其他次数:再次投掷 
若是第二次是目标数 =》胜利 结束:
如果是7 =>失败 是否结束
其他情况忽略继续rand

确定赢的条件,第一次赢是7/11, 2/3/12是输 其他都是继续投掷并且存储其他的值,直达再次投掷出该和,而且如果和是7是失败。
封装一个计算两次投掷的和控制在2~12之间
再封装一个是用于判断是否赢得游戏 包含第一次投掷和接下来几次投掷,知道此轮游戏结束
在一轮游戏结束之后 在看是否继续执行游戏,相应的需要统计赢和输的次数
*/
# include<stdbool.h>
//游戏开始
bool play() {//游戏的输赢 由bool值来得知
    int sum = roll_play();
    printf("You rolled: %d\n", sum);
    if (sum == 7 || sum == 11) {
        printf("You win!\n");
        return true;//赢了游戏就直接退出 由主函数来得知该玩家是否进行下一轮
    }
    if (sum == 2 || sum == 3 || sum == 12) {
        printf("You lose!\n"); //输了游戏就直接退出 由主函数来得知该玩家是否进行下一轮
        return false;
    } //只要没退出函数 执行到了这一步 就是进入其他情况 其他情况由循环进行
    //进行之前记录之前的点数,其他情况的循环 保证一点就是找到一样的目标就是赢得游戏
    //否则继续投掷
    int target = sum;
    printf("Your point is: %d\n", sum);
    while (true) {
       
        //否则继续投掷
        sum = roll_play();
        printf("You rolled: %d\n", sum);
        if (sum == target) {
            printf("You win!\n");
            return true;
        }
        if (sum == 7) {
            printf("You lose!\n");
            return false;
        }
        
    }
}
//两次投掷的和 结果
int roll_play(void) {
   
    int num1 = rand() % 6 + 1;
    int num2 = rand() % 6 + 1;
    int sum = num1 + num2;
    return sum;

}
//主函数只需要保证是否需要继续游戏 另外两个函数分别是进行骰子的投掷,以及按照游戏规则的进行。
int main(void) {
    char play_;
    int win = 0, lose = 0;
    srand(time(NULL));//产生一个序列的数就可以
    do {
        play() ? win++ : lose++;
        printf("Play again? (y/n)\n");
        scanf(" %c", &play_);//为了保证空格y的情况依旧可以正常运行 在%c前面加一个空格来读走空格
        while (getchar() != '\n');//清空输入缓存 防止多个yyy在缓冲区内
        
    } while (play_ == 'y' || play_ == 'Y');
    printf("You win: %d, lose: %d\n", win, lose);
    return 0;
}       

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YoloV9改进策略:注意力改进|HCANet全局与局部的注意力模块CAFM|二次创新|即插即用

摘要 本文是在CAFM的基础上做了一些修改&#xff0c;算是二次创新吧&#xff01;修改后的模块对比原来的模型有了很大的提升。我用改进后的模型来改进YoloV9&#xff0c;精度得到了大幅度的提升&#xff0c;即插即用&#xff0c;简单易懂。为了方便大家写论文&#xff0c;我现…

十年磨一剑“2024成都电子信息展会”推动电子产业全球发展

2024成都电子展&#xff0c;招商工作已接近尾声&#xff0c;这场盛大的展会不仅是电子信息行业的一次盛会&#xff0c;更是中国西部电子信息产业发展的重要里程碑。自2013年起&#xff0c;中国&#xff08;西部&#xff09;电子信息博览会便选择成都作为其永久的举办地&#xf…

pod容器基础概念

一 Pod基础概念&#xff1a; ①Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个 Pod代表着集群中运行的一个进程。 ②kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c; 例如&#xff0c;用于管…

2024年5月22日19:57:32第一部分

家庭财务管理系统 1.逻辑上相邻 2.单链表适应动态变化 1.定义函数 2.定义结构体 sturcrt{stu[100]; phoen[100]; }stu; 3.完善主函数

笔记-iOS消息转发机制和使用

消息转发机制的回顾以及涉及的几个方法 一、OC消息发送原理 消息转发机制 1、由于OC的动态特性&#xff0c;只有当程序运行起来之后&#xff0c;才知道要真正执行哪个函数&#xff08;动态绑定&#xff09;。在编译过程向类发送了其无法理解的消息并不会报错&#xff0c;因为…

基于双向长短期记忆BiLSTM对消费者投诉进行多类分类

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…

FTP如何端口映射?

FTP&#xff08;File Transfer Protocol&#xff09;是一种用于在网络上进行文件传输的协议。在FTP协议中&#xff0c;客户端和服务器通过不同的端口进行通信&#xff0c;其中控制连接使用端口号21&#xff0c;数据连接使用端口号20。由于网络环境的限制&#xff0c;一些情况下…

协变(List泛型作为方法参数时的父类子类问题)

有段时间没搞.net的项目了&#xff08;没办法&#xff0c;谁让国内JAVA流行是事实&#xff09;。最近又回归.net&#xff08;哪里需要哪里搬~&#xff09;。 接收到需求后&#xff0c;一顿输出&#xff0c;结果…咦?编译失败??? 错误信息&#xff1a; CS1503:参数1:无法…

Django介绍:探索Python最受欢迎的Web框架

文章目录 Django是什么Django的核心特性1. MTV架构2. 自带的Admin后台管理系统3. ORM&#xff08;对象关系映射&#xff09;4. 强大的表单处理5. 完善的文档和活跃的社区 快速入门&#xff1a;使用Django创建一个简单的Web应用步骤1&#xff1a;安装Django步骤2&#xff1a;创建…

lambdastream

lambda 匿名函数 为了简化java的匿名内部类 事件监听ActionListener 接口&#xff08;外部类&#xff09; 内部类 类在其他地方用不到&#xff0c;索性就把这个类定义在类的内部使用 好处&#xff1a;1.内部可以使用外部类成员 2.其他地方发现不了 往往内部类只用一次&…

电力巡检穿戴式智能手环:让巡检不孤立无援

电力巡检穿戴式智能手环:让巡检不孤立无援 在电力巡检的广袤天地里中&#xff0c;电力工作人员他们身着工装&#xff0c;头戴安全帽&#xff0c;手持仪器&#xff0c;穿梭在高压线路与铁塔之间。他们的健康状态&#xff0c;直接关系到电力作业的安全与效率。如今&#xff0c;电…

【投稿资讯】区块链会议CCF A -- SP 2025 截止6.6、11.14 附录用率

会议名称&#xff1a;46th IEEE Symposium on Security and Privacy( S&P&#xff09; CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2023年 195/1147&#xff0c;2024年录用了17篇和区块链相关的论文 Topics of interest inc…

JWT的详解

一.什么是JWT JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用间安全地传递信息。它是一种紧凑的、自包含的方式&#xff0c;用于在用户和服务之间以 JSON 对象的形式安全地传输信息。 JWT 主要由三部分…

百度智能云参与信通院多项边缘计算标准编制,「大模型时代下云边端协同 AI 发展研讨会」成功召开

1 中国信通院联合业界制定、发布多项标准化成果&#xff0c;推动产业发展 大模型开启了 AI 原生时代&#xff0c;云边端协同 AI 构建了「集中式大规模训练」、「边缘分布式协同推理」新范式&#xff0c;有效降低推理时延和成本&#xff0c;提升数据安全和隐私性&#xff0c;也…

源网络地址转换SNAT

左上角的是访问互联网发送的数据包&#xff0c;第一个是访问&#xff0c;第二个是网页传回来的 3、4项是源端口号和目的端口号&#xff08;3是随机的&#xff08;1024-65535&#xff09;&#xff0c;那个是http的网页服务端口就是80&#xff09; 那么往回传数据的时候源和目的…

美国教育数据分析

文章目录 第1关&#xff1a;认识数据第2关&#xff1a;数据预处理第3关&#xff1a;数学成绩预测 第1关&#xff1a;认识数据 编程要求 根据提示&#xff0c;在右侧Begin-End区域补充代码&#xff0c;查看数据属性名称。 测试说明 程序会调用你实现的方法&#xff0c;查看数据…

Facebook隐私保护:数据安全的前沿挑战

在数字化时代&#xff0c;随着社交媒体的普及和应用&#xff0c;个人数据的隐私保护问题日益受到关注。作为全球最大的社交平台之一&#xff0c;Facebook承载了数十亿用户的社交活动和信息交流&#xff0c;但与此同时&#xff0c;也面临着来自内外部的数据安全挑战。本文将深入…

计算机视觉SCI期刊,中科院2区,专业认可度高!

一、期刊名称 Displays 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;计算机科学 影响因子&#xff1a;4.3 中科院分区&#xff1a;2区 三、期刊征稿范围 这本期刊接受有关显示技术和应用的技术&#xff0c;原创研究论文和教程论文。该期刊欢迎广泛的显…

基于 vLLM 搭建 DeepSeek-V2 Chat 服务

直奔主题。 安装vLLM 官方实现的代码还没有 merge 到 vLLM 主分支&#xff0c;所以直接 git clone DeepSeek 的分支。 git clone https://github.com/zwd003/vllm.git cd vllm pip install -e .源码安装大概耗时 10 分钟。 OpenAI 接口规范启动 官方 Github 放的是单条推理…

吉时利Keithley 2010数字万用表7.5 位

Keithley 2010数字万用表&#xff0c;7.5 位 吉时利 2010 数字万用表、7.5 位、低噪声万用表将高分辨率与生产应用所需的高速度和高准确度相结合&#xff0c;例如测试精密传感器、换能器、A/D 和 D/A 转换器、调节器、参考、连接器、开关和继电器。2010 基于与吉时利 2000、20…