C++小游戏——卡牌加减乘
#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++小游戏——卡牌加减乘相关推荐
- 微信小程序购物车 数量加减功能
微信小程序购物车 数量加减功能 wxml <!-- 主容器 --> <view class="stepper"> <!-- 减号 --> < ...
- Python批量爬取游戏卡牌信息
文章目录 前言 一.需求 二.分析 三.处理 四.运行结果 前言 本系列文章来源于真实的需求 本系列文章你来提我来做 本系列文章仅供学习参考 阅读人群:有Python基础.Scrapy框架基础 一.需 ...
- Unity3D_(游戏)卡牌03_选关界面
启动屏界面.主菜单界面.选关界面.游戏界面 卡牌01_启动屏界面 传送门 卡牌02_主菜单界面 传送门 卡牌03_选关界面 传送门 卡牌04_游戏界面 传送门 选关界面效果 (鼠标放在不同关 ...
- 如何利用微信小游戏的分包加载机制突破4M代码包体积限制
相信大家度过了一个不错的端午假期,在端午前夕,即6月15日晚上,微信小游戏宣布支持分包加载功能,白鹭引擎在端午节后第一天正式支持分包加载机制.在正式向开发者介绍如何使用前,我先为各位解读一下我对微信提 ...
- 游戏卡牌半小时拍出8700万天价,法院紧急叫停!
6月21日,一张<游戏王>的纪念卡牌"青眼白龙"司法拍卖于阿里拍卖上正式开始.然而,距拍卖开始仅半个小时,这张卡牌便.拍出了约8732.61万元的"天价&qu ...
- 白鹭小游戏-成语挑战-加载页面
白鹭小游戏-成语挑战-整体项目结构 新建 进度条组件 新建Eui组件 在 src/game 文件夹 右键 新建模版文件 新建EUI组件 press 构建皮肤文件 打开 皮肤文件 press.exml ...
- Unity中游戏卡牌滚动效果,EnhanceScrollview(适用于NGUI,UGUI)
最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,Github的资源地址是:https://github.com ...
- 微信小程序:购物车加减
此贴为自己记录贴,以便日后做到同样的项目能给自己提个醒 在加入购物车时,会将商品编号(goods_id).数量(quan)等有用的信息存入购物车表(cart),有则在原有的基础上添加数量,无则新增一条 ...
- [Unity游戏]卡牌记忆消除游戏
1. 效果和工程 先来看看游戏是什么样子的,以下是在编辑器中运行的效果 完整的工程 https://github.com/MangoWAY/Unity2DMemoryCard,可以给个Star哈 2. ...
最新文章
- Python高级网络编程系列之第二篇
- 零基础Java学习之初始化块
- ASP.NET自带机制不刷新页面
- 【Java案例】-Jedis操作redis教程
- 班尼机器人怎么拆_512个焊点独自焊完,武汉一高中生在机器人比赛中摘得五块奖牌...
- mongodb 时间戳 java_Java将日期类型Date时间戳转换为MongoDB的时间类型数据
- 汽车出租管理系统javaee实训_温州专业电动汽车充电设备实训台厂家诚信互利-嘉育仪器...
- Yii2学习笔记002---Yii2的控制器和视图
- python基础-第六篇-6.2模块
- [转] 关于闰年的判断方法
- bzoj1565: [NOI2009]植物大战僵尸
- BeanShell用法笔记
- css 彩虹色渐变色,纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)...
- Web3js 小笔记
- 微信客服消息群发 php,利用客服消息和模板消息实现微信群发(突破群发接口的上限)...
- java 所得税计算_java个人所得税计算器
- 牛客网——B 遥远的记忆
- 2023Mac装机系统优化软件CleanMyMacX
- java 字母个数字_Java 中字母对应的数字是多少
- lazada数据分析采集软件,各国市场第一视角帮你分析!