今天重新思考了一下斗地主牌的属性,应该还有一项,就是是否被选中,所以扑克牌的属性修改为下列样子
struct POKE
{
int view;//面值(1,2,3,...,10,J,Q,K,Dawang,Xiaowang)
int color;//花色
int value;//大小
bool isSelect;
};
POKE g_Poke[54];
同样在InitialPoke中初始化isSelect
g_Poke[i].isSelect = false;
扑克牌初始化后,下来进行的就是洗牌了,我的方法是每次随机一个小于54的数,与当前循环的i进行交换,还未测试,暂且这么弄着。。
//洗牌
void Poke::SrandPoke()
{
srand(time(NULL));
int iRand;
POKE temp;
for(int i = 0; i < 54; i++)
{
iRand = rand()%54;
if(iRand != i)
{
temp = g_Poke[iRand];
g_Poke[iRand] = g_Poke[i];
g_Poke[iRand] = temp;
}
}
}
洗牌之后就是发牌了。我建立了一个Player类,类中申请了list数组对象,用来保存每个玩家手中牌
list<POKE> m_listPlyr[3];
发牌函数,因为牌已洗好,所以直接按顺序从给3个玩家每个发17张牌
void Player::SendPoke()
{
for(int i = 0; i < 52; i++)
{
if( i < 17)
m_listPlyr[0].push_back(g_Poke[i]);
else if(i >= 17 && i < 34)
m_listPlyr[1].push_back(g_Poke[i]);
else
m_listPlyr[2].push_back(g_Poke[i]);
}
}
好了,今天就到这了。