#include "PlayingCard.h"
extern int m_pMult;
CCard::CCard()
{
m_nColor = 4; //4表示还没有花色
m_nValue = 17; //17表示还没有牌
m_nID = 0; //0表示还没有给牌设置ID号
Y = 450;
}
BOOL CCard::operator==(const CCard& card)
{
if ( m_nColor == card.m_nColor && m_nValue == card.m_nValue && m_nID == card.m_nID && Y == card.Y)
return TRUE;
else
return FALSE;
}
CPlayingCard::CPlayingCard(void)
{
m_pMark = 0;
}
CPlayingCard::~CPlayingCard(void)
{
}
void CPlayingCard::New()
{
}
void CPlayingCard::CleanUp()
{
CCard card;
for(size_t i = 0; i < m_nCards.size() - 1; ++i)
{
for(size_t j = i + 1; j < m_nCards.size(); ++j)
{
if((m_nCards[i].m_nValue * 4 + m_nCards[i].m_nColor) > (m_nCards[j].m_nValue * 4 + m_nCards[j].m_nColor))
{
card = m_nCards[i];
m_nCards[i] = m_nCards[j];
m_nCards[j] = card;
}
}
}
}
void CPlayingCard::CleanUpShow()
{
if(m_nDisCards.size()>0)
{
CCard card;
for(size_t i = 0; i < m_nDisCards.size() - 1; ++i)
{
for(size_t j = i + 1; j < m_nDisCards.size(); ++j)
{
if((m_nDisCards[i].m_nValue * 4 + m_nDisCards[i].m_nColor) > (m_nDisCards[j].m_nValue * 4 + m_nDisCards[j].m_nColor))
{
card = m_nDisCards[i];
m_nDisCards[i] = m_nDisCards[j];
m_nDisCards[j] = card;
}
}
}
}
}
bool CPlayingCard::CompareCards()
{
if(Is1() == true || Is2() == true || Is3() == true || IsBomb() == true||
IsSeries() == true || IsDoubleSeries() == true || IsTrebleSeries() == true ||
Is31() == true || Is32() == true || Is421() == true || Is412() == true ||
Is422() == true || Is3311() == true || Is3322() == true || IsDoubleKing() == true)
return true;
else
return false;
}
bool CPlayingCard::CompareComputer(vector<CCard>& card)
{
if( IsDoubleKing() == true)
{
return true;
}
if(IsBomb() == true)
{
if(card.size() == 4 && card[0].m_nValue == card[1].m_nValue && card[0].m_nValue == card[2].m_nValue && card[0].m_nValue == card[3].m_nValue)
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
}
else
{
if(card.size() == 2 && card[0].m_nValue == 16 && card[1].m_nValue == 17)
{
return false;
}
else
{
return true;
}
}
}
if(card.size() == 1)
{
if (Is1())
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
if(card.size() == 2)
{
if(Is2())
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
if(card.size() == 3)
{
if(Is3())
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
{
return true;
}
else
return false;
}
}
if(card.size() == 4)
{
//当电脑出的是炸弹的时候
if(card[0].m_nValue == card[1].m_nValue && card[0].m_nValue == card[2].m_nValue && card[0].m_nValue == card[3].m_nValue)
{
if(IsDoubleKing())
return true;
else if(IsBomb())
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
else
{
return false;
}
}
//当出的是三带一的时候
else
{
if(Is31())
{
if(m_nDisCards[1].m_nValue > card[1].m_nValue)
return true;
else
return false;
}
}
}
if(card.size() > 4)
{
//可能是顺子也可能是三带二
if(card.size() == 5)
{
if(IsSeries())
{
if(m_nDisCards.size() != card.size())
return false;
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
if(Is32())
{
//判断是顺子还是三带二,若为三带二则不管怎么排列前两个牌的值是一样的
if(card[0].m_nValue != card[1].m_nValue)
{
return false;
}
else
{
if(m_nDisCards[2].m_nValue > card[2].m_nValue)
return true;
else
return false;
}
}
}
//判断是双飞还是顺子
else if(card.size() == 6)
{
if(IsSeries())
{
if(m_nDisCards.size() != card.size())
return false;
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
if(IsTrebleSeries())
{
if(card[0].m_nValue != card[1].m_nValue)
{
return false;
}
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
}
//判断是顺子还是双飞带二单
else if(card.size() == 8)
{
if(IsSeries())
{
if(m_nDisCards.size() != card.size())
return false;
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
if(Is3311())
{
if(card[2].m_nValue == card[3].m_nValue || card[3].m_nValue == card[4].m_nValue)
{
if(m_nDisCards[2].m_nValue > card[2].m_nValue)
return true;
else
return false;
}
else
{
return false;
}
}
}
else
{
if(IsSeries())
{
if(m_nDisCards.size() != card.size())
return false;
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
}
}
if(card.size() > 5 && card.size() % 2 == 0)
{
if(IsDoubleSeries())
{
if(m_nDisCards.size() != card.size())
return false;
else
{
if(m_nDisCards[0].m_nValue > card[0].m_nValue)
return true;
else
return false;
}
}
}
return false;
}
bool CPlayingCard::Is1()
{
if(m_nDisCards.size() == 1)
return true;
else
return false;
}
bool CPlayingCard::Is2() //判断出的是否是一对牌
{
if(m_nDisCards.size() != 2)
{
return false;
}
else
{
//判断条件是两张牌的值是否一样
if(m_nDisCards[0].m_nValue == m_nDisCards[1].m_nValue)
return true;
else
return false;
}
}
bool CPlayingCard::Is3() //判断出的是否是三张一样值的牌
{
if(m_nDisCards.size() != 3)
{
return false;
}
else
{
//判断条件是三张牌的值是否一样
if(m_nDisCards[0].m_nValue == m_nDisCards[1].m_nValue && m_nDisCards[0].m_nValue == m_nDisCards[2].m_nValue)
return true;
else
return false;
}
}
bool CPlayingCard::IsDoubleKing()//判断出的是否是双王
{
if(m_nDisCards.size() != 2)
{
return false;
}
else
{
//判断条件是两张牌的值是否都为王值
if(m_nDisCards[0].m_nValue == 16 && m_nDisCards[1].m_nValue == 17)
{
m_pMult++;
return true;
}
else
return false;
}
}
bool CPlayingCard::IsBomb()//判断出的是否是四张一样值的牌(炸弹,包括双王)
{
if(m_nDisCards.size() != 4 )
{
return false;
}
else
{
//判断条件是四张牌的值是否一样
if(m_nDisCards[0].m_nValue == m_nDisCards[1].m_nValue &&
m_nDisCards[0].m_nValue == m_nDisCards[2].m_nValue&&
m_nDisCards[0].m_nValue == m_nDisCards[3].m_nValue)
{
m_pMult++;
return true;
}
else
{
return false;
}
}
}
bool CPlayingCard::IsSeries()//判断是否是单顺子(最少出牌数为5张,最大出牌数为12张)
{
if(m_nDisCards.size() < 5)
{
return false;
}
else
{
//2和王不能放到顺子里
if(m_nDisCards[m_nDisCards.size() - 1].m_nValue == 15 || m_nDisCards[m_nDisCards.size() - 1].m_nValue == 16|| m_nDisCards[m_nDisCards.size() - 1].m_nValue == 17)
{
return false;
}
else
{
int Time = 0;
for(size_t i = 0; i < m_nDisCards.size() - 1;++i)
{
//判断条件为容器中后一张牌的值是否比前一张牌的值大一
if(m_nDisCards[i].m_nValue + 1 == m_nDisCards[i + 1].m_nValue )
{
Time++;
}
}
if(Time == m_nDisCards.size() - 1)
{
return true;
}
else
{
return false;
}
}
}
}
bool CPlayingCard::IsDoubleSeries()//判断是否是双顺子(最小是6张,最多是20张
没有合适的资源?快使用搜索试试~ 我知道了~
visual c++ DirectX开发棋牌类游戏 斗地主,人机对战 源代码
共149个文件
bmp:128个
h:8个
cpp:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 3 下载量 105 浏览量
2021-01-21
12:01:39
上传
评论 3
收藏 2.38MB RAR 举报
温馨提示
visual c++ DirectX开发棋牌类游戏 斗地主,人机对战 源代码
资源推荐
资源详情
资源评论
收起资源包目录
visual c++ DirectX开发棋牌类游戏 斗地主,人机对战 源代码 (149个子文件)
Back.bmp 1.37MB
Back.bmp 1.37MB
choose_lord.bmp 47KB
choose_lord.bmp 47KB
背景03.bmp 20KB
背景03.bmp 20KB
小王.bmp 20KB
小王.bmp 20KB
退出游戏.bmp 9KB
退出游戏.bmp 9KB
dang.bmp 7KB
Pass_Button.bmp 7KB
Ok_Button.bmp 7KB
budang.bmp 7KB
Pass_Button.bmp 7KB
dang.bmp 7KB
Ok_Button.bmp 7KB
budang.bmp 7KB
地主.bmp 7KB
地主.bmp 7KB
大王.bmp 3KB
大王.bmp 3KB
方5.bmp 3KB
梅Q.bmp 3KB
方Q.bmp 3KB
红K.bmp 3KB
红5.bmp 3KB
黑J.bmp 3KB
方J.bmp 3KB
方3.bmp 3KB
方8.bmp 3KB
方10.bmp 3KB
方9.bmp 3KB
红9.bmp 3KB
梅K.bmp 3KB
方4.bmp 3KB
方Q.bmp 3KB
梅J.bmp 3KB
方7.bmp 3KB
红9.bmp 3KB
方5.bmp 3KB
红Q.bmp 3KB
红3.bmp 3KB
方K.bmp 3KB
方9.bmp 3KB
红Q.bmp 3KB
方A.bmp 3KB
方10.bmp 3KB
方K.bmp 3KB
黑Q.bmp 3KB
红A.bmp 3KB
方8.bmp 3KB
红8.bmp 3KB
红10.bmp 3KB
红5.bmp 3KB
方6.bmp 3KB
红K.bmp 3KB
红3.bmp 3KB
红10.bmp 3KB
方A.bmp 3KB
梅J.bmp 3KB
红J.bmp 3KB
方4.bmp 3KB
红2.bmp 3KB
方J.bmp 3KB
红7.bmp 3KB
红A.bmp 3KB
方7.bmp 3KB
红7.bmp 3KB
黑K.bmp 3KB
红4.bmp 3KB
红8.bmp 3KB
方2.bmp 3KB
红6.bmp 3KB
梅K.bmp 3KB
红6.bmp 3KB
红4.bmp 3KB
方6.bmp 3KB
红J.bmp 3KB
红2.bmp 3KB
黑Q.bmp 3KB
方3.bmp 3KB
方2.bmp 3KB
黑J.bmp 3KB
梅Q.bmp 3KB
黑K.bmp 3KB
lord.bmp 3KB
lord.bmp 3KB
梅6.bmp 1KB
黑8.bmp 1KB
黑A.bmp 1KB
梅4.bmp 1KB
梅9.bmp 1KB
黑9.bmp 1KB
黑5.bmp 1KB
梅3.bmp 1KB
黑3.bmp 1KB
黑8.bmp 1KB
黑7.bmp 1KB
黑4.bmp 1KB
共 149 条
- 1
- 2
lj_70596
- 粉丝: 98
- 资源: 3924
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HCIP-Datacom笔记 (1).pdf
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
- 介绍离散性制造行业的MES系统流程
- Arduino IDE压缩包版本,2024年4月26日,最新版本
- 基于IDEA-CCNL/Randeng-Pegasus-238M-Summary-Chines微调的中文文本摘要任务源码+数据集
- 自动驾驶-状态估计和定位之直方图滤波(Histogram+Filter)定位应用和源码.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页