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

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

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

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值