📄 gamecard.cpp
字号:
}
}
//////////////////////////////////////////////////////////////////////////
//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 + -