⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servermanage.cpp

📁 这是用Windows编写的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//	{		
//		playInfo.iScore[i] =m_iCurScoresArr[i];
//		playInfo.iCardCnt[i] =m_iPlayRemainCardCnt[i];
//		
//	}
//	for (int i = 0;i < 4;i++) SendGameData(i,&playInfo,sizeof(playInfo),MDM_GM_GAME_NOTIFY,ASS_MODIFY_PLAYINFO,0);
//		
//	SendWatchData(m_bMaxPeople,&playInfo,sizeof(playInfo),MDM_GM_GAME_NOTIFY,ASS_MODIFY_PLAYINFO,0);
//	return;
//}





/******************************************************************************************************/
/***********************************************************************************************************/

//逻辑类

/***********************************************************************************************************/

//构造函数
CUpGradeGameLogic::CUpGradeGameLogic(void)
{
	//m_iNTNum=0;
	//m_iNTHuaKind=UG_ERROR_HUA;
	//m_iStation[4]=500;
	//for (int i=0;i<4;i++) m_iStation[i]=100*i;
}

////设置主牌花色
//void CUpGradeGameLogic::SetNTHuaKind(BYTE iNTHuaKind)
//{
//	//设置数据
//	m_iNTHuaKind=iNTHuaKind & UG_HUA_MASK;
//	
//	//调整相对位置
//	for (int i=0;i<4;i++) m_iStation[i]=100*i;
//	if (m_iNTHuaKind!=UG_ERROR_HUA) m_iStation[m_iNTHuaKind>>4]=400;
//	if (m_iNTHuaKind==UG_MEI_HUA)
//	{
//		m_iStation[3]=200;
//		m_iStation[2]=300;
//	}
//	else if (m_iNTHuaKind==UG_HONG_TAO)
//	{
//		m_iStation[0]=100;
//		m_iStation[1]=0;
//	}
//
//	return;
//}

//获取扑克花色
BYTE CUpGradeGameLogic::GetCardHuaKind(BYTE iCard, BOOL bTrueHua)
{ 
	int iHuaKind=(iCard&UG_HUA_MASK);
	if (!bTrueHua)
	{
		//if ((iHuaKind==m_iNTHuaKind)||(GetCardNum(iCard)==m_iNTNum)) 
		//	return iHuaKind=UG_NT_CARD;
	}
	return iHuaKind; 
}

//获取扑克大小 (2 - 18 , 15 以上是主牌 : 2 - 21 , 15 以上是主)
int CUpGradeGameLogic::GetCardBulk(BYTE iCard, BOOL bExtVol)
{
	if ((iCard==0x4E)||(iCard==0x4F))
	{
		return bExtVol?(iCard-58):(iCard-61);	//大小鬼
	}

	int iCardNum=GetCardNum(iCard);
	//if (iCardNum==m_iNTNum)
	//{
	//	int iHuaKind=GetCardHuaKind(iCard,TRUE);
	//	if (bExtVol)
	//	{
	//		if (iHuaKind==m_iNTHuaKind) return 19;
	//		return (iHuaKind>>4)+15;
	//	}
	//	return (iHuaKind==m_iNTHuaKind)?16:15;
	//}

	return iCardNum;
}

//排列扑克
BOOL CUpGradeGameLogic::SortCard(BYTE iCardList[], BOOL bUp[], int iCardCount)
{
	BOOL bSorted=TRUE,bTempUp;
	int iTemp,iLast=iCardCount-1,iStationVol[45];

	//获取位置数值
	for (int i=0;i<iCardCount;i++)
	{
		iStationVol[i]=GetCardBulk(iCardList[i],TRUE);
		//if (iStationVol[i]>=15) iStationVol[i]+=0;//m_iStation[4];
		//else iStationVol[i]+=m_iStation[GetCardHuaKind(iCardList[i],FALSE)>>4];
	}

	//排序操作
	do
	{
		bSorted=TRUE;
		for (int i=0;i<iLast;i++)
		{
			if (iStationVol[i]<iStationVol[i+1])
			{	
				//交换位置
				iTemp=iCardList[i];
				iCardList[i]=iCardList[i+1];
				iCardList[i+1]=iTemp;
				iTemp=iStationVol[i];
				iStationVol[i]=iStationVol[i+1];
				iStationVol[i+1]=iTemp;
				if (bUp!=NULL)
				{
					bTempUp=bUp[i];
					bUp[i]=bUp[i+1];
					bUp[i+1]=bTempUp;
				}
				bSorted=FALSE;
			}	
		}
		iLast--;
	} while(!bSorted);
		
	return TRUE;
}

//获取扑克
BYTE CUpGradeGameLogic::GetCardFromHua(int iHuaKind, int iNum)
{
	if (iHuaKind!=UG_ERROR_HUA) return (iHuaKind+iNum-1);
	return 0;
}

//是否对牌
BOOL CUpGradeGameLogic::IsDouble(BYTE iCardList[], int iCardCount)
{
	if (iCardCount!=2) return FALSE;
	return (iCardList[0]==iCardList[1]);
}

//是否三条
BOOL CUpGradeGameLogic::IsThree(BYTE iCardList[], int iCardCount)
{
	if (iCardCount!=3) return FALSE;
	return ((iCardList[0]==iCardList[1])&&(iCardList[0]==iCardList[2]));
}
//
////是否拖拉机逻辑
//BOOL CUpGradeGameLogic::IsTrackorRule(BYTE iFirstCard, BYTE iNextCard)
//{
//	int iCardBulk=GetCardBulk(iFirstCard,FALSE);//得到扑克大小
//	//如果主占了当中的位置
//	//if(GetNTCardNum()!=0 && (iCardBulk==GetNTCardNum()-1 || iCardBulk==GetNTCardNum()+1) && 
//	//	(GetCardBulk(iNextCard,FALSE)==GetNTCardNum()-1 || GetCardBulk(iNextCard,FALSE)==GetNTCardNum()+1))
//	//{
//	//	return true;	
//	//}
//	//如果是主牌拖拉机(如打J,是副JJAA也属于拖拉机)
//	int m1,m2;
//	m1=iFirstCard&0xf0;	m2=iNextCard&0xf0;
//	//if(	GetNTHuaKind()==m1 || GetNTHuaKind()==m2)
//	//{
//	//	if(	(iCardBulk==15 && GetCardBulk(iNextCard,FALSE)==14) ||
//	//		(iCardBulk==14 && GetCardBulk(iNextCard,FALSE)==15))
//	//	{
//	//		return true;
//	//	}
//	//}
//	if ((iFirstCard>iNextCard && GetCardBulk(iNextCard,FALSE)!=(iCardBulk-1)) ||
//		(iFirstCard<iNextCard && GetCardBulk(iNextCard,FALSE)!=(iCardBulk+1))) 
//	{
//		return FALSE;
//	}
//	return TRUE;
//}
//
////是否拖拉机(两条)
//BOOL CUpGradeGameLogic::IsDoubleTrackor(BYTE iCardList[], int iCardCount)
//{
//	if ((iCardCount<4)||((iCardCount%2)!=0)) return FALSE;
//
//	BYTE iCard=iCardList[0];
//	if (!IsDouble(iCardList,2)) return FALSE;
//	for (int i=2;i<iCardCount;i+=2)
//	{
//		if (!IsDouble(&iCardList[i],2)||!IsTrackorRule(iCard,iCardList[i])) return FALSE;
//		iCard=iCardList[i];
//	}
//	return TRUE;
//}

////是否拖拉机(三条)
//BOOL CUpGradeGameLogic::IsThreeTrackor(BYTE iCardList[], int iCardCount)
//{
//	if ((iCardCount<6)||((iCardCount%3)!=0)) return FALSE;
//
//	BYTE iCard=iCardList[0];
//	if (!IsThree(iCardList,3)) return FALSE;
//	for (int i=3;i<iCardCount;i+=3)
//	{
//		if (!IsThree(&iCardList[i],3)||!IsTrackorRule(iCard,iCardList[i])) return FALSE;
//		iCard=iCardList[i];
//	}
//	return TRUE;
//}

////是否甩牌
//BOOL CUpGradeGameLogic::IsShowCard(BYTE iCardList[], int iCardCount)
//{
//	return (GetCardListHua(iCardList,iCardCount)!=UG_ERROR_HUA);
//}

//得到牌列花色
BYTE CUpGradeGameLogic::GetCardListHua(BYTE iCardList[], int iCardCount)
{
	int iHuaKind=GetCardHuaKind(iCardList[0],FALSE);
	if (GetCardHuaKind(iCardList[iCardCount-1],FALSE)!=iHuaKind) return UG_ERROR_HUA;
	return iHuaKind;
}

////获取牌型
//BYTE CUpGradeGameLogic::GetCardShape(BYTE iCardList[], int iCardCount)
//{
//	if (GetCardListHua(iCardList,iCardCount)!=UG_ERROR_HUA)
//	{
//		if (IsOnlyOne(iCardList,iCardCount)) return UG_ONLY_ONE;
//		if (IsDouble(iCardList,iCardCount)) return UG_DOUBLE;
//		if (IsThree(iCardList,iCardCount)) return UG_THREE;
//		if (IsDoubleTrackor(iCardList,iCardCount)) return UG_DOUBLE_TRACKOR;
//		if (IsThreeTrackor(iCardList,iCardCount)) return UG_THREE_TARCKOR;
//		if (IsShowCard(iCardList,iCardCount)) return UG_SHOW_CARD;
//	}
//	return UG_ERROR_KIND;
//}

////对比单牌
//BOOL CUpGradeGameLogic::CompareOnlyOne(BYTE iFirstCard, BYTE iNextCard)
//{
//	int iFristHua=GetCardHuaKind(iFirstCard,FALSE);
//	int iNextHua=GetCardHuaKind(iNextCard,FALSE);
//	if (iFristHua!=iNextHua)
//	{
//		//不同花色对比
//		if (iFristHua==UG_NT_CARD) return TRUE;
//		return (iNextHua!=UG_NT_CARD);
//	}
//	
//	//同花色对比
//	return GetCardBulk(iFirstCard,FALSE)>=GetCardBulk(iNextCard,FALSE);
//}



////对比函数
//int CUpGradeGameLogic::CompareCard(BYTE * iCardListArray[], int iCardCount)
//{
//	//排列扑克
//	for (int i=0;i<4;i++) SortCard(iCardListArray[i],NULL,iCardCount);
//	
//	//对比处理
//	int iWinner=0;
//	int iCardShape=GetCardShape(iCardListArray[0],iCardCount);
//	switch (iCardShape)
//	{
//		case UG_ONLY_ONE:
//		case UG_DOUBLE:
//		case UG_THREE: 
//		case UG_DOUBLE_TRACKOR:
//		case UG_THREE_TARCKOR:
//			{
//				for (int i=1;i<4;i++)
//				{
//					if ((GetCardShape(iCardListArray[i],iCardCount)==iCardShape)&&
//					   (CompareOnlyOne(iCardListArray[iWinner][0],iCardListArray[i][0])==FALSE))
//						iWinner=i;
//				}
//				return iWinner;
//			}
//	}
//
//	return -1;
//}



//清除 0 位扑克
int CUpGradeGameLogic::RemoveNummCard(BYTE iCardList[], int iCardCount)
{
	int iRemoveCount=0;
	for (int i=0;i<iCardCount;i++)
	{
		if (iCardList[i]!=0) iCardList[i-iRemoveCount]=iCardList[i];
		else iRemoveCount++;
	}
	return iRemoveCount;
}

//混乱扑克
BYTE CUpGradeGameLogic::RandCard(BYTE iCard[], int iCardCount)
{
	static const BYTE m_CardArray[54]={
			0x01, 0x02 ,0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,		//方块 2 - A
			0x11, 0x12 ,0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,		//梅花 2 - A
			0x21, 0x22 ,0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,		//红桃 2 - A
			0x31, 0x32 ,0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D,		//黑桃 2 - A
			//0x4E, 0x4F																		//小鬼,大鬼
             };
	BYTE iSend=0,iStation=0,iCardList[162];
	srand((unsigned)time(NULL));
	
	for (int i=0;i<iCardCount;i+=54)
		::CopyMemory(&iCardList[i],m_CardArray,sizeof(m_CardArray));
	do
	{
		iStation=rand()%(iCardCount-iSend);
		iCard[iSend]=iCardList[iStation];
		iSend++;
		iCardList[iStation]=iCardList[iCardCount-iSend];
	} while (iSend<iCardCount);

	//for (int i=0;i<108;i++)
	//	::CopyMemory(&iCard[i],&m_CardArray[53],1);

	return iCardCount;
}

//删除扑克
int CUpGradeGameLogic::RemoveCard(BYTE iRemoveCard[], int iRemoveCount, BYTE iCardList[], int iCardCount)
{
	//检验数据
	if ((iRemoveCount>iCardCount)) return 0;

	//把要删除的牌置零
	int iDeleteCount=0;
	for (int i=0;i<iRemoveCount;i++)
	{
		for (int j=0;j<iCardCount;j++)
		{
			if (iRemoveCard[i]==iCardList[j])
			{
				iDeleteCount++;
				iCardList[j]=0;
				break;
			}
		}
	}
	RemoveNummCard(iCardList,iCardCount);
	if (iDeleteCount!=iRemoveCount) return 0;

	return iDeleteCount;
}

//查找分数
int CUpGradeGameLogic::FindPoint(BYTE iCardList[], int iCardCount)
{
	int iPoint=0,iNum=0;
	for (int i=0;i<iCardCount;i++)
	{
		iNum=GetCardNum(iCardList[i]);
		if (iNum==5) iPoint+=5;
		else if ((iNum==10)||(iNum==13)) iPoint+=10;
	}
	return iPoint;
}




////是否可以出牌
//BOOL CUpGradeGameLogic::CanOutCard(BYTE iOutCard[], int iOutCount, BYTE iBaseCard[], 
//								   int iBaseCount, BYTE iHandCard[], int iHandCount)
//{
//	
//	return TRUE;
//}


////用户请求离开
//bool CServerGameDesk::UserHaveThing(BYTE bDeskStation, char * szMessage)
//{
//	if (m_bGameStation<GS_SEND_CARD) return TRUE;
//
//	m_iLeaveArgee|=1<<bDeskStation;
//	if (m_iLeaveArgee!=15)
//	{
//		HaveThingStruct HaveThing;
//		HaveThing.pos=bDeskStation;
//		::CopyMemory(HaveThing.szMessage,szMessage,60*sizeof(char));
//		for (int i=0;i<m_bMaxPeople;i++)
//			if (i!=bDeskStation) SendGameData(i,&HaveThing,sizeof(HaveThing),MDM_GM_GAME_NOTIFY,ASS_HAVE_THING,0);
//	}
//	else GameFinish(bDeskStation,GF_SALE);
//
//	return TRUE;
//}
//
////同意用户离开
//bool CServerGameDesk::ArgeeUserLeft(BYTE bDeskStation, BOOL bArgee)
//{
//	if (bArgee) m_iLeaveArgee|=1<<bDeskStation;
//	else m_iLeaveArgee&=~1<<bDeskStation;
//	if (m_iLeaveArgee!=15)
//	{
//		//m_bQueryQuit=true;
//		LeaveResultStruct Leave;
//		Leave.bDeskStation=bDeskStation;
//		Leave.bArgeeLeave=bArgee;
//		for (int i=0;i<m_bMaxPeople;i++) 
//			if (i!=bDeskStation) SendGameData(i,&Leave,sizeof(Leave),MDM_GM_GAME_NOTIFY,ASS_LEFT_RESULT,0);
//	}
//	else GameFinish(bDeskStation,GF_SALE);
//
//	return TRUE;
//}

//定时器消息
//bool CServerGameDesk::OnTimer(UINT uTimerID)
//{
// 
// 
//	if (uTimerID==TIME_GAME_FINISH)	//结束定时器
//	{
//		KillTimer(TIME_GAME_FINISH);
//		if (m_bGameStation==GS_PLAY_GAME) 
//	}
//	return __super::OnTimer(uTimerID);
//}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -