#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;

// 运算牌
struct Card
{
    // 运算符 op 0:- 1:+ 2:*
    // 数字 num
    int op, num;
    void print()
    {
        if (op == 0)
        {
            cout << "-";
        }
        if (op == 1)
        {
            cout << "+";
        }
        if (op == 2)
        {
            cout << "*";
        }
        cout << num;
    }
};

// 玩家
struct Player
{
    // win 胜场 aid 数字牌序号 bid 运算牌序号 res 结果
    int win, aid, bid, res;
    int a[15]; // 数字牌
    Card b[15]; // 运算牌
};
Player pi, me;
int cnt = 6; // 手牌数

// 数字牌 按照数字从大到小排序
bool cmp_a(int x, int y)
{
    return x > y;
}

// 运算牌 减牌按照数字从大到小排序,加乘牌按照数字从小到大排序
bool cmp_b(Card x, Card y)
{
    if (x.op != y.op)
    {
        return x.op < y.op;
    }
    if (x.op == 0)
    {
        return x.num > y.num;
    }
    return x.num < y.num;
}

// 计算算式结果
int cal(int a, Card b)
{
    if (b.op == 0)
    {
        return a - b.num;
    }
    if (b.op == 1)
    {
        return a + b.num;
    }
    return a * b.num;
}

// 游戏介绍
void intro()
{
    cout << "卡牌加减乘" << endl;
    cout << "游戏规则:" << endl;
    cout << "你方和对方各抽取6张随机数字卡和6张运算卡," << endl;
    cout << "每轮每方挑选1张数字卡贴在自己的数字区,1张运算卡贴在对方的运算区," << endl;
    cout << "你方的运算结果如大于对方两局则挑战成功。" << endl;
}

// 初始化手牌
void init()
{
    // 数字0~9 运算符0~2
    srand(time(0));
    for (int i = 1; i <= 6; i++)
    {
        pi.a[i] = rand() % 10;
        pi.b[i].num = rand() % 10;
        pi.b[i].op = rand() % 3;
        
        me.a[i] = rand() % 10;
        me.b[i].num = rand() % 10;
        me.b[i].op = rand() % 3;
    }
    sort(me.a + 1, me.a + 7, cmp_a);
    sort(me.b + 1, me.b + 7, cmp_b);
    sort(pi.a + 1, pi.a + 7, cmp_a);
    sort(pi.b + 1, pi.b + 7, cmp_b);
    pi.aid = 1;
    pi.bid = 1;
}

// 展示手牌
void showhand()
{
    cout << "你的手牌:" << endl;
    cout << "序  号: ①\t②\t③\t④\t⑤\t⑥" << endl;
    cout << "数字牌: ";
    for (int i = 1; i <= cnt; i++)
    {
        cout << me.a[i] << "\t";
    }
    cout << endl;
    cout << "运算牌: ";
    for (int i = 1; i <= cnt; i++)
    {
        me.b[i].print();
        cout << "\t";
    }
    cout << endl;
}

// 确定出牌
void decision()
{
    cout << "请选择你要使用的数字牌序号:" << endl;
    cin >> me.aid;
    while (me.aid > cnt || me.aid < 1)
    {
        cout << "没有该数字牌!请重新输入!" << endl;
        cout << "请选择你要使用的数字牌序号:" << endl;
        cin >> me.aid;
    }
    cout << "请选择你要使用的运算牌序号:" << endl;
    cin >> me.bid;
    while (me.bid > cnt || me.bid < 1)
    {
        cout << "没有该运算牌!请重新输入!" << endl;
        cout << "请选择你要使用的运算牌序号:" << endl;
        cin >> me.bid;
    }
}

// 展示出牌
void showcard()
{
    me.res = cal(me.a[me.aid], pi.b[pi.bid]);
    pi.res = cal(pi.a[pi.aid], me.b[me.bid]);
    cout << "--------------------" << endl;
    cout << "你的结果:" << endl;
    cout << "数字\t运算\t等于" << endl;
    cout << me.a[me.aid] << "\t";
    pi.b[pi.bid].print();
    cout << "\t" << me.res << endl << endl;

cout << "电脑的结果:" << endl;
    cout << "数字\t运算\t等于" << endl;
    cout << pi.a[pi.aid] << "\t";
    me.b[me.bid].print();
    cout << "\t" << pi.res << endl;
}

// 比较当局胜负
void pk()
{
    cout << "--------------------" << endl;
    if (me.res > pi.res)
    {
        cout << "你拿下了关键的一局!" << endl;
        me.win++;
    }
    if (me.res == pi.res)
    {
        cout << "缘分啊,平局!" << endl;
    }
    if (me.res < pi.res)
    {
        cout << "很遗憾,错失一局!" << endl;
        pi.win++;
    }
    cout << endl;
}

// 游戏环节
void game()
{
    // 初始化手牌
    init();
    int round = 1;
    while (pi.win < 2 && me.win < 2)
    {
        cout << "----------------------------------------" << endl;
        cout << "第 " << round << " 轮" << endl;
        // 展示你的手牌
        showhand();

// 确定出牌
        decision();

// 展示出牌
        showcard();

// 比较当局胜负
        pk();

// 更新变量及手牌 
        cnt--;
        round++;
        pi.bid++;
        pi.aid++;
        for (int i = me.aid; i <= cnt; i++)
        {
            me.a[i] = me.a[i + 1];
        }
        for (int i = me.bid; i <= cnt; i++)
        {
            me.b[i] = me.b[i + 1];
        }
    }
}

// 展示游戏胜负结果
void result()
{
    if (me.win == 2)
    {
        cout << "你赢了!你是最棒的!" << endl;
    }
    else
    {
        cout << "你输了!胜败乃兵家常事,大侠请从头来过" << endl;
    } 
}

int main()
{
    // 游戏介绍
    intro();

// 游戏环节
    game();

// 结果
    result();
    return 0;
}

C++小游戏——卡牌加减乘相关推荐

  1. 微信小程序购物车 数量加减功能

    微信小程序购物车 数量加减功能 wxml <!-- 主容器 --> <view class="stepper"> <!-- 减号 --> < ...

  2. Python批量爬取游戏卡牌信息

    文章目录 前言 一.需求 二.分析 三.处理 四.运行结果 前言 本系列文章来源于真实的需求 本系列文章你来提我来做 本系列文章仅供学习参考 阅读人群:有Python基础.Scrapy框架基础 一.需 ...

  3. Unity3D_(游戏)卡牌03_选关界面

      启动屏界面.主菜单界面.选关界面.游戏界面 卡牌01_启动屏界面 传送门 卡牌02_主菜单界面 传送门 卡牌03_选关界面 传送门 卡牌04_游戏界面    传送门 选关界面效果 (鼠标放在不同关 ...

  4. 如何利用微信小游戏的分包加载机制突破4M代码包体积限制

    相信大家度过了一个不错的端午假期,在端午前夕,即6月15日晚上,微信小游戏宣布支持分包加载功能,白鹭引擎在端午节后第一天正式支持分包加载机制.在正式向开发者介绍如何使用前,我先为各位解读一下我对微信提 ...

  5. 游戏卡牌半小时拍出8700万天价,法院紧急叫停!

    6月21日,一张<游戏王>的纪念卡牌"青眼白龙"司法拍卖于阿里拍卖上正式开始.然而,距拍卖开始仅半个小时,这张卡牌便.拍出了约8732.61万元的"天价&qu ...

  6. 白鹭小游戏-成语挑战-加载页面

    白鹭小游戏-成语挑战-整体项目结构 新建 进度条组件 新建Eui组件 在 src/game 文件夹 右键 新建模版文件 新建EUI组件 press 构建皮肤文件 打开 皮肤文件 press.exml ...

  7. Unity中游戏卡牌滚动效果,EnhanceScrollview(适用于NGUI,UGUI)

    最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,Github的资源地址是:https://github.com ...

  8. 微信小程序:购物车加减

    此贴为自己记录贴,以便日后做到同样的项目能给自己提个醒 在加入购物车时,会将商品编号(goods_id).数量(quan)等有用的信息存入购物车表(cart),有则在原有的基础上添加数量,无则新增一条 ...

  9. [Unity游戏]卡牌记忆消除游戏

    1. 效果和工程 先来看看游戏是什么样子的,以下是在编辑器中运行的效果 完整的工程 https://github.com/MangoWAY/Unity2DMemoryCard,可以给个Star哈 2. ...

最新文章

  1. Python高级网络编程系列之第二篇
  2. 零基础Java学习之初始化块
  3. ASP.NET自带机制不刷新页面
  4. 【Java案例】-Jedis操作redis教程
  5. 班尼机器人怎么拆_512个焊点独自焊完,武汉一高中生在机器人比赛中摘得五块奖牌...
  6. mongodb 时间戳 java_Java将日期类型Date时间戳转换为MongoDB的时间类型数据
  7. 汽车出租管理系统javaee实训_温州专业电动汽车充电设备实训台厂家诚信互利-嘉育仪器...
  8. Yii2学习笔记002---Yii2的控制器和视图
  9. python基础-第六篇-6.2模块
  10. [转] 关于闰年的判断方法
  11. bzoj1565: [NOI2009]植物大战僵尸
  12. BeanShell用法笔记
  13. css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
  14. Web3js 小笔记
  15. 微信客服消息群发 php,利用客服消息和模板消息实现微信群发(突破群发接口的上限)...
  16. java 所得税计算_java个人所得税计算器
  17. 牛客网——B 遥远的记忆
  18. 2023Mac装机系统优化软件CleanMyMacX
  19. java 字母个数字_Java 中字母对应的数字是多少
  20. lazada数据分析采集软件,各国市场第一视角帮你分析!

热门文章

  1. java 正则表达式 和 js正则表达式
  2. 有状态服务和无状态服务
  3. 我,拿着80万加盟零食很忙,找不到门面……
  4. [技术] 百度网盘分享文件已经被取消的解决办法
  5. UVA - 11300 Spreading the Wealth 中位数,递推
  6. CorelDRAW X6低价再次冲破底线
  7. 解决vmware的“物理内存不足”
  8. 【Unity3D】流动雾效
  9. python colors后面_Python colors.BASE_COLORS属性代码示例
  10. Macdown入门笔记