Ejemplo n.º 1
0
//删除麻将
bool CGameLogic::RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard[], BYTE cbRemoveCount)
{
	//删除麻将
	for (BYTE i=0;i<cbRemoveCount;i++)
	{
		//效验麻将
		ASSERT(IsValidCard(cbRemoveCard[i]));
		ASSERT(cbCardIndex[SwitchToCardIndex(cbRemoveCard[i])]>0);

		//删除麻将
		BYTE cbRemoveIndex=SwitchToCardIndex(cbRemoveCard[i]);
		if (cbCardIndex[cbRemoveIndex]==0)
		{
			//错误断言
			ASSERT(FALSE);

			//还原删除
			for (BYTE j=0;j<i;j++) 
			{
				ASSERT(IsValidCard(cbRemoveCard[j]));
				cbCardIndex[SwitchToCardIndex(cbRemoveCard[j])]++;
			}

			return false;
		}
		else 
		{
			//删除麻将
			--cbCardIndex[cbRemoveIndex];
		}
	}

	return true;
}
Ejemplo n.º 2
0
//扑克转换
BYTE CGameLogic::SwitchToCardIndex(const BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX])
{
	//设置变量
	ZeroMemory(cbCardIndex,sizeof(BYTE)*MAX_INDEX);

	//转换扑克
	for (BYTE i=0;i<cbCardCount;i++)
	{
		ASSERT(IsValidCard(cbCardData[i]));
		if (!IsValidCard(cbCardData[i])) continue;
		cbCardIndex[SwitchToCardIndex(cbCardData[i])]++;
	}

	return cbCardCount;
}
Ejemplo n.º 3
0
/*hdr
**	Copyright Mox Products, Australia
**
**	FUNCTION NAME:	ShowGateOpenDelaySetPromptInfo
**	AUTHOR:			Jeff Wang
**	DATE:			10 - Sep - 2008
**
**	DESCRIPTION:	
**
**
**	ARGUMENTS:	ARGNAME		DRIECTION	TYPE	DESCRIPTION
**				None
**	RETURNED VALUE:	
**				None
**	NOTES:
**			
*/
VOID 
ShowDelCardModWnd(BYTE* pCSN)
{
	if (STEP_CONFIRM == DelCardModeStep) 
	{
		return;
	}

	
	if (IsValidCard(pCSN)/*AsRmCd(pCSN)*/)
	{	
		memcpy(CSNBuf,pCSN,5);
		DelCardModeStep = STEP_CONFIRM;
		ResetTimer(GetFocus(), TIMER_DEL_CARD_MODE, INTERFACE_SETTLE_TIME, NULL);
		StartPlayRightANote();			
//		SaveCdInfo2Mem();
//		DelCardModeStep = STEP_CARDDELSUCCESS;
//		StartPlayRightANote();
	}
	else
	{
		DelCardModeStep = STEP_CARDHASDEL;
		StartPlayErrorANote();
		ResetTimer(GetFocus(), TIMER_DEL_CARD_MODE, PROMPT_SHOW_TIME, NULL);
	}
	PostMessage(GetFocus(),  WM_PAINT, 0, 0);

}
Ejemplo n.º 4
0
//麻将转换
BYTE CGameLogic::SwitchToCardIndex(BYTE cbCardData)
{
	ASSERT(IsValidCard(cbCardData));	
	if(cbCardData<0x41)
		return ((cbCardData&MASK_COLOR)>>4)*9+(cbCardData&MASK_VALUE)-1;
	else 
		return (34+(cbCardData&MASK_VALUE)-1);
Ejemplo n.º 5
0
//吃牌判断
BYTE CGameLogic::EstimateEatCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{
	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));

	//过滤判断
	if (cbCurrentCard>=0x31) return WIK_NULL;

	//变量定义
	BYTE cbExcursion[3]={0,1,2};
	BYTE cbItemKind[3]={WIK_LEFT,WIK_CENTER,WIK_RIGHT};

	//吃牌判断
	BYTE cbEatKind=0,cbFirstIndex=0;
	BYTE cbCurrentIndex=SwitchToCardIndex(cbCurrentCard);
	for (BYTE i=0;i<CountArray(cbItemKind);i++)
	{
		BYTE cbValueIndex=cbCurrentIndex%9;
		if ((cbValueIndex>=cbExcursion[i])&&((cbValueIndex-cbExcursion[i])<=6))
		{
			//吃牌判断
			cbFirstIndex=cbCurrentIndex-cbExcursion[i];
			if ((cbCurrentIndex!=cbFirstIndex)&&(cbCardIndex[cbFirstIndex]==0)) continue;
			if ((cbCurrentIndex!=(cbFirstIndex+1))&&(cbCardIndex[cbFirstIndex+1]==0)) continue;
			if ((cbCurrentIndex!=(cbFirstIndex+2))&&(cbCardIndex[cbFirstIndex+2]==0)) continue;

			//设置类型
			cbEatKind|=cbItemKind[i];
		}
	}

	return cbEatKind;
}	 
Ejemplo n.º 6
0
//杠牌判断
BYTE CGameLogic::EstimateGangCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{
	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));

	//杠牌判断	
	return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]==3)?WIK_GANG:WIK_NULL;
}
Ejemplo n.º 7
0
//碰牌判断
BYTE CGameLogic::EstimatePengCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{
	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));

	//碰牌判断
	return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]>=2)?WIK_PENG:WIK_NULL;
}
Ejemplo n.º 8
0
//麻将转换
BYTE CGameLogic::SwitchToCardIndex(BYTE cbCardData[], BYTE cbCardCount, BYTE cbCardIndex[MAX_INDEX])
{
	//设置变量
	ZeroMemory(cbCardIndex,sizeof(BYTE)*MAX_INDEX);

	//转换麻将
	for (BYTE i=0;i<cbCardCount;i++)
	{
		ASSERT(IsValidCard(cbCardData[i]));
		cbCardIndex[SwitchToCardIndex(cbCardData[i])]++;
	}//End for (BYTE i=0;i<cbCardCount;i++)

	return cbCardCount;
}
Ejemplo n.º 9
0
//杠牌判断
BYTE CGameLogic::EstimateGangCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{
	CString strFile,strTemp;
	CTime tmCur = CTime::GetCurrentTime();
	CString strTime = tmCur.Format("%m%d");
	strFile.Format("log\\%sEstimateGangCard.log",strTime);

			strTemp.Format("EstimateGangCard");
			WriteLog(strFile, strTemp);
	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));

	//杠牌判断
	return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]==3)?(WIK_GANG|WIK_FILL):WIK_NULL;
}
Ejemplo n.º 10
0
//杠牌判断
BYTE CGameLogic::EstimateGangCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{
	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));
#if 1

	//杠牌判断
	return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]==3)?WIK_GANG:WIK_NULL;

#else
	//过滤判断
	if ( IsMagicCard(cbCurrentCard) ) // 当前牌是魔术牌
		return WIK_NULL;

	//杠牌判断
	return (cbCardIndex[SwitchToCardIndex(cbCurrentCard)]==3)?WIK_GANG:WIK_NULL;
#endif 
}
Ejemplo n.º 11
0
//删除麻将
bool CGameLogic::RemoveCard(BYTE cbCardIndex[MAX_INDEX], BYTE cbRemoveCard)
{
	//效验麻将
	ASSERT(IsValidCard(cbRemoveCard));
	ASSERT(cbCardIndex[SwitchToCardIndex(cbRemoveCard)]>0);

	//删除麻将
	BYTE cbRemoveIndex=SwitchToCardIndex(cbRemoveCard);
	if (cbCardIndex[cbRemoveIndex]>0)
	{
		cbCardIndex[cbRemoveIndex]--;
		return true;
	}

	//失败效验
	ASSERT(FALSE);

	return false;
}
Ejemplo n.º 12
0
//贴牌判断
BYTE CGameLogic::EstimateTiePaiCard(const BYTE cbCardIndex[MAX_INDEX], BYTE cbCurrentCard)
{

	// 禁止贴听用牌

	//参数效验
	ASSERT(IsValidCard(cbCurrentCard));
	//过滤判断
	if ( IsMagicCard(cbCurrentCard) ) 
		return WIK_NULL;

	
	BYTE ret = WIK_NULL;
	
	if(cbCardIndex[SwitchToCardIndex(cbCurrentCard)]>=1 && m_cbMagicIndex !=MAX_INDEX &&cbCardIndex[m_cbMagicIndex]>=1)
	{
		// 至少有一张打出的牌,同时至少有一张听用牌
		ret |= WIK_TIE_PAI;
	}
	return ret;
	
}
Ejemplo n.º 13
0
//钻牌
bool CGameLogic::IsMagicCard( BYTE cbCardData )
{
	if( m_cbMagicIndex != MAX_INDEX && IsValidCard(cbCardData))
		return SwitchToCardIndex(cbCardData) == m_cbMagicIndex;
	return false;
}
Ejemplo n.º 14
0
//扑克转换
BYTE CGameLogic::SwitchToCardIndex(BYTE cbCardData)
{
	ASSERT(IsValidCard(cbCardData));
	return ((cbCardData&MASK_COLOR)>>4)*9+(cbCardData&MASK_VALUE)-1;
}