加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx《单机斗地主》源码解剖之三 发牌

发布时间:2020-12-14 20:21:39 所属栏目:百科 来源:网络整理
导读:牌洗完之后,下面就该一个一个向玩家发牌了,请看下面代码: void GameScene::SendPk(){Poker* pk;if(m_iSendPk51 m_isSend)//前51张牌发给玩家{pk = (Poker*)m_arrPokers-objectAtIndex(m_iSendPk);if(m_iSendPk%3 == 0)//给玩家发牌MovePk(m_player,pk);

牌洗完之后,下面就该一个一个向玩家发牌了,请看下面代码:

void GameScene::SendPk(){
	Poker* pk;
	if(m_iSendPk<51 && m_isSend)//前51张牌发给玩家
	{
		pk = (Poker*)m_arrPokers->objectAtIndex(m_iSendPk);
		if(m_iSendPk%3 == 0)//给玩家发牌
			MovePk(m_player,pk);
		else if(m_iSendPk%3 == 1)//给电脑1发牌
			MovePk(m_npcOne,pk);
		else if(m_iSendPk%3 == 2)//给电脑2发牌
			MovePk(m_npcTwo,pk);
		++m_iSendPk;
		m_isSend = false;
	}else if (m_iSendPk>50 && m_iSendPk<54 && m_isSend)//留下三张地主牌
	{
		pk = (Poker*)m_arrPokers->objectAtIndex(m_iSendPk);
		pk->showFront();
		MovePk(m_Three,pk);
		++m_iSendPk;
		m_isSend = false;
	}
	else if(m_iSendPk>53)//牌发完分析电脑玩家的牌型
	{
		FenChaiNpcPai(m_npcOne);
		FenChaiNpcPai(m_npcTwo);
		m_iSendPk = 0;
		m_iState = 1;
	}
}
大家一定注意到上面的m_isSend的变量了,这个变量就是指发给某一个玩家的牌动画是否完成。我们再来看一下MovePk()的代码就有些明白了:
void GameScene::MovePk(Player* play,Poker* pk)
{
	CCMoveTo* move;
	CCCallFuncND* func;
	float time = 0.05;
	play->getArrPk()->addObject(pk);//从一副牌中选择pk这张牌
	move = CCMoveTo::create(time,play->getPoint());
	func = CCCallFuncND::create(this,callfuncND_selector(GameScene::func),play);
	CCSequence* sequence = CCSequence::create(move,func,NULL);
	pk->runAction(sequence);
}

void GameScene::func(CCNode* pSender,void* pData){
	Player* play = (Player*)pData;
	play->updatePkWeiZhi();//整理一个玩家手中的牌
	m_isSend = true;
}

大家一定也注意到了play->updatePkWeiZhi()这个函数了,它的意义正如注释据所说的。这个我们在下一篇文章来解释。

源码下载:http://pan.baidu.com/s/1ntzayjJ

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读