#include "Card.h"
#include <stdlib.h>
#include <stdio.h>
// 构造函数
Card::Card( const CARD_VALUE &value, const CARD_COLOR &color)
{
m_value = value;
m_color = color;
}
// 重载运算符 ==
bool Card::operator ==( const Card &other )
{
if( m_value == other.m_value && m_color == other.m_color )
{
return true;
}
return false;
}
// 重载运算符 >
bool Card::operator >( const Card &other )
{
if( m_value > other.m_value)
{
return true;
}
else
{
if( m_color > other.m_color )
{
return true;
}
}
return false;
}
// 重载运算符 <
bool Card::operator <( const Card &other )
{
if( m_value < other.m_value)
{
return true;
}
else
{
if( m_color < other.m_color )
{
return true;
}
}
return false;
}
void Card::Show( void )
{
switch( m_value )
{
case ID_3:
case ID_4:
case ID_5:
case ID_6:
case ID_7:
case ID_8:
case ID_9:
case ID_10:
printf("%2d ",m_value + 3);
break;
case ID_J:
printf(" J ");
break;
case ID_Q:
printf(" Q ");
break;
case ID_K:
printf(" K ");
break;
case ID_A:
printf(" A ");
break;
case ID_2:
printf(" 2 ");
break;
default :
printf("点数错误\n");
}
switch( m_color )
{
case CARD_HUA:
printf("梅花\n");
break;
case CARD_PIAN:
printf("方片\n");
break;
case CARD_HONGTAO:
printf("红桃\n");
break;
case CARD_HEITAO:
printf("黑桃\n");
break;
default :
printf("花色错误\n");
}
}
// 构造函数
CardManage::CardManage( void )
{
for( int i = 0; i < CardNumber ; i++ )
{
m_poke[i] = NULL;
}
}
// 扑克初始化
void CardManage::CreateCard( void )
{
int ID = 0;
for( unsigned int i = ID_3; i < ID_VALUE_MAX ; i++ )
{
for( unsigned int j = CARD_HUA; j < CARD_COLOR_MAX; j++ )
{
if( m_poke[ID] != NULL )
{
delete m_poke[ID];
m_poke[ID] = NULL;
}
m_poke[ID++] = new Card( (CARD_VALUE)i, (CARD_COLOR)j );
}
}
}
// 析构函数
CardManage::~CardManage( void )
{
int count = Count();
for( int i = 0; i < count; i++)
{
delete m_poke[i];
m_poke[i] = NULL;
}
//delete []m_poke;
}
// 将现有的扑克牌打乱顺序
void CardManage::Shuffle( void )
{
Card* pTemp = 0;
int count = Count();
int nRandom = 0;
for( int i = 0; i < count; i++)
{
pTemp = m_poke[i];
nRandom = rand()%52;
m_poke[i] = m_poke[nRandom];
m_poke[nRandom] = pTemp;
}
}
// 获得现在现有的扑克牌数量
int CardManage::Count( void )
{
int count = 0;
Card *pTemp = 0;
pTemp = m_poke[0]; // pTemp = p_poke;
while( m_poke[count] != 0 )
{
count++;
}
return count;
}
// 取得一张牌
Card* CardManage::Pick( bool isFront )
{
Card* pTheCard = NULL;
if( Count() == 0 )
return NULL;
if( isFront )
{
pTheCard = m_poke[0];
for( int i = 0; i < Count() - 1; i++)
{
m_poke[i] = m_poke[i+1];
}
m_poke[ Count() - 1 ] = 0;
}
else
{
pTheCard = m_poke[ Count() - 1 ];
m_poke[ Count() - 1 ] = NULL;
}
return pTheCard;
}
// 放回一张牌
void CardManage::PutBack( Card *_Card, bool isFront )
{
if( NULL == _Card )
return;
if( isFront )
{
for( int i = Count(); i > 0 ; i --)
{
m_poke[i] = m_poke[i-1];
}
m_poke[0] = _Card;
}
else
{
m_poke[Count()] = _Card;
}
}
void CardManage::Show( void )
{
Card **pTemp = 0;
pTemp = m_poke;
while( *pTemp != NULL )
{
(*pTemp)->Show();
pTemp++;
}
}
// 牌排序
void CardManage::SortCard( bool isUp )
{
int count = Count();
if( isUp )
{ // 升序排序
for( int i = 1; i < count; i ++)
{
for( int j = 0; j < i; j++)
{
if( m_poke[i] < m_poke[j] )
{
break;
}
}
Card *pTemp = m_poke[i];
for( int z = i; z > j ; z-- )
{
m_poke[z] = m_poke[z-1];
}
m_poke[z] = pTemp;
}
}
else
{ // 降序排序
for( int i = 1; i < count; i ++)
{
for( int j = 0; j < i; j++)
{
if( *m_poke[i] > *m_poke[j] )
{
break;
}
}
Card *pTemp = m_poke[i];
for( int z = i; z > j ; z-- )
{
m_poke[z] = m_poke[z-1];
}
m_poke[z] = pTemp;
pTemp = NULL;
}
}
}
sr.rar_www.srpuke .com
版权申诉
50 浏览量
2022-09-14
19:03:36
上传
评论
收藏 13KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈