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

📄 gamecard.cpp

📁 这是用Windows编写的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}

	}

//////////////////////////////////////////////////////////////////////////
	//for (BYTE i=0;i<m_bCardCount;i++)
	//{
	//	BYTE bCard=m_CardArray.GetAt(i);
	//	BYTE bUpCard=m_CardUpArray.GetAt(i);
	//	if ((m_bShowCard==true)&&(m_CardArray.GetAt(i)!=0))
	//	{
	//		if ((bCard==0x4E)||(bCard==0x4F))
	//		{
	//			iYPos=0;
	//			iXPos=(bCard-0x4D)*m_iCardWidth;
	//			pActiveHandle=&BackHandle;
	//		}
	//		else
	//		{
	//			pActiveHandle=&CardHandle;
	//			iXPos=GetCardXPos(bCard)*m_iCardWidth;
	//			iYPos=GetCardYPos(bCard)*m_iCardHight;
	//		}
	//	}
	//	else
	//	{
	//		iYPos=0;
	//		iXPos=0;
	//		pActiveHandle=&BackHandle;
	//	}
	//	if (m_bHorzLook==true) pActiveHandle->BitBlt(BufferDC,i*m_iCardHSpace,bUpCard?0:m_iCardUpSpace,m_iCardWidth,m_iCardHight,iXPos,iYPos);
	//	else pActiveHandle->BitBlt(BufferDC,0,i*m_iCardVSpace,m_iCardWidth,m_iCardHight,iXPos,iYPos);
	//}

if (!m_bHorzLook){//显示牌数量

	//绘画牌数量
	TCHAR szBuffer[3];
	BufferDC.SetTextColor(RGB(255,0,0));
	BufferDC.SetBkMode(TRANSPARENT);
	//dc.SelectObject(CGameImageLink::m_HFont);
	sprintf(szBuffer,TEXT("%d"),PaintCount);
	BufferDC.TextOut(m_iCardWidth/2-8,m_bCardCount*m_iCardVSpace-m_iCardVSpace+m_iCardHight-18,szBuffer,lstrlen(szBuffer));


	//UINT uFirst=m_bCardCount/10L,uLast=m_bCardCount%10;
	//CGameImageHelper ImageHandle(&TML_NUM); 
	// if (ImageHandle.IsOpenHandle())
	//	{ 
	//	if (uFirst>0){
	//		AFCStretchImage(&BufferDC,m_iCardWidth-30,m_bCardCount*m_iCardVSpace-m_iCardVSpace,19,23,ImageHandle,uFirst*19,0,19,23,RGB(0,0,0));
	//		AFCStretchImage(&BufferDC,m_iCardWidth-15,m_bCardCount*m_iCardVSpace-m_iCardVSpace,19,23,ImageHandle,uLast*19,0,19,23,RGB(0,0,0));
	//		}
	//	else
	//		AFCStretchImage(&BufferDC,m_iCardWidth-15,m_bCardCount*m_iCardVSpace-m_iCardVSpace,19,23,ImageHandle,uLast*19,0,19,23,RGB(0,0,0));
	//}
	//AFCStretchImage(&BufferDC,m_iCardWidth/2-12,m_bCardCount*m_iCardVSpace,13,23,ImageHandle,uFirst*13,0,13,23,RGB(0,0,0));//液晶
	//AFCStretchImage(&BufferDC,m_iCardWidth/2,m_bCardCount*m_iCardVSpace,13,23,ImageHandle,uLast*13,0,13,23,RGB(0,0,0));//液晶
}

//////////////////////////////////////////////////////////////////////////
	//刷新界面
//	dc.BitBlt(0,0,CardSize.cx ,CardSize.cy ,&BufferDC,0,0,SRCCOPY);
	dc.StretchBlt(0, 0, CardSize.cx , CardSize.cy , &BufferDC, 0, 0, CardSize.cx, CardSize.cy, SRCCOPY);

	//清理资源
	BufferDC.SelectObject(pOldBmp);
	BufferDC.DeleteDC();
	BufferBmp.DeleteObject();
 
m_bCardCount=PaintCount;
	return;
}

//鼠标消息
void CUpGradeGameCard::OnLButtonDown(UINT nFlags, CPoint Point)
{
	if ((m_bHorzLook==true)&&(m_bUseMouse==true)) 
	{	m_bHotHitCard=HitCardTest(Point);
		m_BeginPoint = Point;
		m_MoveFlag = true;
		m_lastPoint = Point;
	}
	return;
}

//鼠标消息
void CUpGradeGameCard::OnLButtonUp(UINT nFlags, CPoint Point)
{
	//MessageBox("  ",NULL, MB_OK);
	if ((m_bUseMouse==true)&&(m_bHotHitCard!=255))
	{
		m_EndPoint = Point;
		if (m_MoveFlag && m_BeginPoint.x != m_EndPoint.x)
		{//AfxMessageBox("GH");
			MoveSelect();
			m_MoveFlag = false;
			return;
		}
		BYTE bHitCard=HitCardTest(Point);
		if ((bHitCard==255)||(m_bHotHitCard!=bHitCard))
		{
			m_bHotHitCard=255;
			m_MoveFlag = false;
			return;
		}
		BYTE bUpCard=m_CardUpArray.GetAt(bHitCard);
		m_CardUpArray.SetAt(bHitCard,(bUpCard==TRUE)?FALSE:TRUE);
		FixCardControl();

		//重画失效部分
		Invalidate(FALSE);
		//CRect Rect;
		//Rect.SetRect(bHitCard*m_iCardHSpace,0,bHitCard*m_iCardHSpace+m_iCardWidth,m_iCardHight+m_iCardUpSpace);
		//InvalidateRect(Rect,FALSE);
		if (m_pHandleWnd!=NULL) m_pHandleWnd->SendMessage(IDM_LEFT_HITCARD);//是否可出
	}
	m_MoveFlag = false;
	return;
}
// 双击选牌
void CUpGradeGameCard::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	if ((m_bUseMouse==true)&&(m_bHotHitCard!=255))
	{		
		BYTE bUpCard;		
		for(BYTE i=0;i<m_bCardCount;i++)
		{
			// 匹配与焦点牌相同者
			if( ((m_CardArray[i]&UG_VALUE_MASK)+1)%15== ((m_CardArray[m_bHotHitCard]&UG_VALUE_MASK)+1)%15 )
			{				
				bUpCard=m_CardUpArray.GetAt(i);
				m_CardUpArray.SetAt(i,(bUpCard==TRUE)?FALSE:TRUE);				
			}
		}		
	//if (m_pHandleWnd!=NULL) m_pHandleWnd->SendMessage(IDM_LEFT_HITCARD);//是否可出
	}
	return;
}
//删除所有的扑克
void CUpGradeGameCard::Tml_DelAll()
	{

	for (BYTE i=0;i<m_bCardCount;i++)
		{ 
		m_bCardCount--;
		m_CardArray.RemoveAt(i); //删除扑克
		i--;
		}
	FixCardControl();
	}
//删除空的扑克
void CUpGradeGameCard::Tml_DelNull()
	{

	for (BYTE i=0;i<m_bCardCount;i++)
		{ 
			if (m_CardArray[i]==0)
				{	m_bCardCount--;
			m_CardArray.RemoveAt(i); //删除扑克
			i--;
			}
	
		}
	FixCardControl();
	}
//上升选择的扑克
void CUpGradeGameCard::Tml_UpSel(BYTE iSelCard[],int iSelCardCount)
{


	for (BYTE i=0;i<m_bCardCount;i++)//手里的扑克
	{
		for (BYTE j=0;j<iSelCardCount;j++)//选出的扑克
		{
			if (iSelCard[j]==m_CardArray[i])//如果扑克相同
			{
				m_CardUpArray.SetAt(i,TRUE);//升起选出的扑克
				break;
			}
		}
	}
	FixCardControl(); 

}

//下放所有升起的扑克
void CUpGradeGameCard::Tml_Down()
{

	for (BYTE i=0;i<m_bCardCount;i++)
	{
		if (m_CardUpArray.GetAt(i)==TRUE)//如果扑克升起
		{
			m_CardUpArray.SetAt(i,FALSE);//隐藏选出的扑克
		}
	}
	FixCardControl();
	
}

//鼠标消息
void CUpGradeGameCard::OnRButtonUp(UINT nFlags, CPoint point)
{	if((m_bUseMouse==true)&&(m_pHandleWnd!=NULL))
	if(((CClientGameDlg*)m_pHandleWnd)->m_PlayView.m_bRightPower)//右键出牌
    {
		//AfxMessageBox("SAS");
			m_pHandleWnd->SendMessage(IDM_RIGHT_HITCARD,0,0);
	}
	else if (m_bHotHitCard!=255)//	AfxMessageBox("选出同花色的牌");//m_bHotHitCard; //焦点扑克   加上这句解决:斗地主时。鼠标右键点出了的牌,游戏客户端马上重启
	{//选出同花色的牌
			BYTE bHitCard=HitCardTest(point);
			if ((bHitCard==255))
			{
				m_bHotHitCard=255;
				return;
			}
			BYTE bUpCard=m_CardUpArray.GetAt(bHitCard);
			//发现了点击的扑克
			if(bHitCard)
			{
				BYTE HuaSe=GetHuaKind(m_CardArray.GetAt(bHitCard));
				for(int i=0;i<m_bCardCount;i++)
				{
					if ((m_bShowCard==true)&&(m_CardArray.GetAt(i)!=0))
					{
						BYTE ttt=GetHuaKind(m_CardArray.GetAt(i));
						if(HuaSe==ttt)
						{
							m_CardUpArray.SetAt(i,(bUpCard==TRUE)?FALSE:TRUE);
						}
					}
				}
				FixCardControl();
				CRect Rect;
				Rect.SetRect(0,0,20*m_iCardHSpace+m_iCardWidth,m_iCardHight+m_iCardUpSpace);
				InvalidateRect(Rect,FALSE);
				m_pHandleWnd->SendMessage(IDM_RIGHT_HITCARD,0,0);
			}
	}
	return;
}

//光标消息
BOOL CUpGradeGameCard::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT message)
{
	if (m_bUseMouse==true)
	{
		SetCursor(CGameImageLink::m_hHandCursor);
		return TRUE;
	}
	return __super::OnSetCursor(pWnd,nHitTest,message);
}
// 鼠标拖动选择

void CUpGradeGameCard::MoveSelect(void)
{
	CPoint now_Point;
	CPoint tempPoint;
	BYTE bHitCard;
	BYTE bUpCard;
	BYTE tempCard;
	int flag = 0;	

	if (m_BeginPoint.x < m_EndPoint.x)
	{
		for(int i = m_BeginPoint.x; i <= m_EndPoint.x; i += m_iCardHSpace)
		{
			now_Point.x = i;
			now_Point.y = 50;
			bHitCard=HitCardTest(now_Point);

			if (bHitCard<0||bHitCard>m_CardUpArray.GetUpperBound())
				return;
			if (flag)
			{
				tempCard = HitCardTest(tempPoint);
				if (tempCard == bHitCard)
					break;
			}			
			bUpCard=m_CardUpArray.GetAt(bHitCard);
			m_CardUpArray.SetAt(bHitCard,(bUpCard==TRUE)?FALSE:TRUE);
						
			tempPoint = now_Point;
			flag = 1;
		}
		BYTE bEndCard = HitCardTest(m_EndPoint);
		if (bEndCard<0||bEndCard>m_CardUpArray.GetUpperBound())
			return;
		if(bEndCard != bHitCard)
		{
			bUpCard=m_CardUpArray.GetAt(bEndCard);
			m_CardUpArray.SetAt(bEndCard,(bUpCard==TRUE)?FALSE:TRUE);
		}
		FixCardControl();
	}
	else
		{

		for(int i = m_EndPoint.x; i <= m_BeginPoint.x; i += m_iCardHSpace)
		{
			now_Point.x = i;
			now_Point.y = 50;				
			bHitCard=HitCardTest(now_Point);
			if (bHitCard<0||bHitCard>m_CardUpArray.GetUpperBound())
				return;
			if (flag)
			{
				tempCard = HitCardTest(tempPoint);
				if (tempCard == bHitCard)
					break;
			}
			
			bUpCard=m_CardUpArray.GetAt(bHitCard);
			m_CardUpArray.SetAt(bHitCard,(bUpCard==TRUE)?FALSE:TRUE);
			tempPoint = now_Point;
			flag = 1;
		}
		BYTE bEndCard = HitCardTest(m_BeginPoint);
		if (bEndCard<0||bEndCard>m_CardUpArray.GetUpperBound())
			return;
		if(bEndCard != bHitCard)
		{
			bUpCard=m_CardUpArray.GetAt(bEndCard);
			m_CardUpArray.SetAt(bEndCard,(bUpCard==TRUE)?FALSE:TRUE);
		}
		FixCardControl();
	}
	// 检测是否可出牌
if (m_pHandleWnd!=NULL) m_pHandleWnd->SendMessage(IDM_LEFT_HITCARD);
	return;	
}

void CUpGradeGameCard::OnMouseMove(UINT nFlags, CPoint point)
{
	if (m_MoveFlag)
	{
		/*CPaintDC dc(this);
		CPen pen;
		pen.CreatePen(PS_SOLID,2,RGB(255,128,128));
		dc.SelectObject(&pen);
		dc.SelectStockObject(NULL_BRUSH);
		//dc.SetROP2(R2_XORPEN);		
		dc.Rectangle(CRect(m_BeginPoint.x, m_BeginPoint.y, point.x, point.y));*/

		CDC *pDC = GetDC();
		pDC->SetROP2(R2_NOTXORPEN);
		WriteLine(m_BeginPoint, m_lastPoint, pDC);
		WriteLine(m_BeginPoint, point, pDC);
		m_lastPoint = point;
	} 
//	 else{Invalidate(FALSE);//
//	 }

}

void CUpGradeGameCard::WriteLine(CPoint beginPoint, CPoint endPoint, CDC * pDC)
{
	int i, j;
	if (beginPoint.x < endPoint.x)
	{
		for (i = beginPoint.x; i < endPoint.x; i++)
		{
			pDC->SetPixel(i, beginPoint.y, RGB(0,0,255));
			pDC->SetPixel(i, endPoint.y, RGB(0,0,255));
		}
	}
	else if(beginPoint.x > endPoint.x)
	{
		for (i = beginPoint.x; i > endPoint.x; i--)
		{
			pDC->SetPixel(i, beginPoint.y, RGB(0,0,255));
			pDC->SetPixel(i, endPoint.y, RGB(0,0,255));
		}
	}
	
	if (beginPoint.y < endPoint.y)
	{
		for (j = beginPoint.y; j < endPoint.y; j++)
		{
			pDC->SetPixel(beginPoint.x, j, RGB(0,0,255));
			pDC->SetPixel(endPoint.x, j, RGB(0,0,255));
		}
	}
	else if (beginPoint.y > endPoint.y)
	{
		for (j = beginPoint.y; j > endPoint.y; j--)
		{
			pDC->SetPixel(beginPoint.x, j, RGB(0,0,255));
			pDC->SetPixel(endPoint.x, j, RGB(0,0,255));
		}
	}
	return;
}

⌨️ 快捷键说明

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