//重画函数 void CGoldControl::OnPaint() { CPaintDC dc(this); //获取位置 CRect ClientRect; GetClientRect(&ClientRect); //建立缓冲图 CDC BackFaceDC; CBitmap BufferBmp; BufferBmp.CreateCompatibleBitmap(&dc,ClientRect.Width(),ClientRect.Height()); BackFaceDC.CreateCompatibleDC(&dc); BackFaceDC.SelectObject(&BufferBmp); //加载资源 CImageHandle ImageHandle1(&m_ImageBack); CImageHandle ImageHandle2(&m_ImageMoney); CImageHandle ImageHandle3(&m_ImageNumber); //绘画背景 m_ImageBack.BitBlt(BackFaceDC,0,0); //绘画筹码 for (int i=0;i<3;i++) { int iX=0; if(m_lGoldCount[0] == 100)iX=3; else if(m_lGoldCount[0] == 1000)iX=6; else if(m_lGoldCount[0] == 10000)iX=9; else if(m_lGoldCount[0] == 100000)iX=12; m_ImageMoney.AlphaDrawImage(&BackFaceDC,(i)*(m_ImageMoney.GetWidth()/15+5)+17,m_ImageMoney.GetHeight()/2+12, m_ImageMoney.GetWidth()/15,m_ImageMoney.GetHeight(),m_ImageMoney.GetWidth()/15*(i+iX),0,RGB(255,0,255)); } //绘画金币 int nXExcursion=ClientRect.Width()/2+20; //绘画数字 __int64 lGold=m_lAllGold; int iCount=0; while (lGold>0) { __int64 lTemp=lGold%10; m_ImageNumber.AlphaDrawImage(&BackFaceDC,nXExcursion-m_ImageNumber.GetWidth()/10*(iCount++),5, m_ImageNumber.GetWidth()/10,m_ImageNumber.GetHeight(), m_ImageNumber.GetWidth()/10*lTemp,0,RGB(255,0,255)); lGold/=10; } //绘画界面 dc.BitBlt(0,0,ClientRect.Width(),ClientRect.Height(),&BackFaceDC,0,0,SRCCOPY); return; }
//绘画界面 void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight) { //地震效果 if(m_bFalsh) { CImageHandle ImageHandleBack(&m_ImageViewBack); int xValue=rand()%ROCK; int yValue=rand()%ROCK; if(xValue%2==0)xValue*=(-1); if(yValue%2==0)yValue*=(-1); m_ImageViewBack.AlphaDrawImage(pDC,(nWidth/2-512)+xValue,(nHeight/2-397)+yValue, m_ImageViewBack.GetWidth(),m_ImageViewBack.GetHeight(),0,0,RGB(255,0,255)); } else { CImageHandle ImageHandleBack(&m_ImageViewBack); m_ImageViewBack.AlphaDrawImage(pDC,(nWidth/2-512+6),(nHeight/2-383), m_ImageViewBack.GetWidth(),m_ImageViewBack.GetHeight(),0,0,RGB(255,0,255)); //绘画背景 //DrawViewImage(pDC,m_ImageViewCenter,enMode_Spread);//用于最大化窗口 //DrawViewImage(pDC,m_ImageViewBack,enMode_Centent); } if(!m_bStopDraw) { //绘画用户 for (WORD i=0;i<GAME_PLAYER;i++) { //变量定义 WORD wUserTimer=GetUserTimer(i); const tagUserData * pUserData=GetUserInfo(i); #ifdef _DEBUG ////测试代码 //tagUserData Obj; //Obj.cbGender = 1; //_sntprintf(Obj.szName,sizeof(Obj.szName),TEXT("用户的名字")); //Obj.cbUserStatus=US_READY; ////Obj.wFaceID = 2; //pUserData = &Obj; ////庄家标志 //CImageHandle ImageHandleBanker(&m_ImageBanker); //m_ImageBanker.AlphaDrawImage(pDC,m_PointBanker[i].x,m_PointBanker[i].y,m_ImageBanker.GetWidth(),m_ImageBanker.GetHeight(),0,0,RGB(255,0,255)); #endif //绘画用户 if (pUserData!=NULL) { //用户名字 pDC->SetTextAlign(TA_CENTER); pDC->SetTextColor((wUserTimer>0)?RGB(250,250,250):RGB(220,220,220)); DrawTextString(pDC,pUserData->szName,RGB(255,255,255),RGB(0,0,0),m_ptFace[i].x+15,m_ptFace[i].y+35); //用户金币 TCHAR szBuffer[64]=TEXT(""); LONG lLeaveScore=pUserData->lScore-((m_ScoreView.IsWindowVisible()==TRUE)?(0):(m_lTableScore[i]));//; if(m_lStopUpdataScore[i]>0)lLeaveScore=m_lStopUpdataScore[i]-m_lTableScore[i]; _snprintf(szBuffer,sizeof(szBuffer),TEXT("¥%ld"),lLeaveScore); DrawTextString(pDC,szBuffer,RGB(255,255,255),RGB(0,0,0),m_ptFace[i].x+10,m_ptFace[i].y+48); //其他信息 //wUserTimer =1; if (wUserTimer!=0) { if(m_CardControl[MY_SELF_CHAIRID].GetCardCount()==0) DrawUserTimer(pDC,m_ptFace[i].x+m_nXFace/2,m_ptTimer[i].y+90,wUserTimer); else DrawUserTimer(pDC,m_ptTimer[i].x,m_ptTimer[i].y,wUserTimer); } //准备标志 if (pUserData->cbUserStatus==US_READY) { DrawUserReady(pDC,m_ptReady[i].x,m_ptReady[i].y); } DrawUserFace(pDC,pUserData,m_ptFace[i].x,m_ptFace[i].y,pUserData->cbUserStatus==US_OFFLINE); } } //计算总注 LONG lTableScore=0L; for (WORD i=0;i<GAME_PLAYER;i++) lTableScore+=m_lTableScore[i]; //总注信息 if (lTableScore>0L) { CImageHandle ImageHandle3(&m_ImageNumber); int iCount=0; LONG lCell[11]; ZeroMemory(lCell,sizeof(lCell)); while(lTableScore>0L) { LONG lScore=lTableScore%10; lCell[iCount++] = lScore; lTableScore=lTableScore/10; } int iTemp=0; int iX=m_ImageNumber.GetWidth(); for (int i=iCount-1;i>=0;i--) { m_ImageNumber.AlphaDrawImage(pDC,nWidth/2+39+(iX/10)*(iTemp++),nHeight/2-296, iX/10,m_ImageNumber.GetHeight(),iX/10*lCell[i],0,RGB(255,0,255)); } } //庄家信息 if (m_wBankerUser!=INVALID_CHAIR) { //庄家标志 CImageHandle ImageHandleBanker(&m_ImageBanker); m_ImageBanker.AlphaDrawImage(pDC,m_PointBanker[m_wBankerUser].x,m_PointBanker[m_wBankerUser].y,m_ImageBanker.GetWidth(),m_ImageBanker.GetHeight(),0,0,RGB(255,0,255)); } //不存在个数 for (BYTE i=0;i<GAME_PLAYER;i++) { //绘画判断 //m_lCurrentScore[i] = 100000; if (m_lCurrentScore[i]==0L) continue; LONG lTemp=m_lCurrentScore[i]; LONG lTimes[]={10,20,50,100,200,500,1000,2000,5000,10000,20000,50000,100000,200000,500000}; for (BYTE k=CountArray(lTimes)-1;;k--) { if(lTemp>=lTimes[k]) { //绘画信息 tagGoldMes tagTemp; tagTemp.lDrawCount = (lTemp/lTimes[k]); tagTemp.lGoldType = k; m_lDrawGold[i].Add(tagTemp); while((tagTemp.lDrawCount--)>0) { //随机位置 int xTemp=rand(); int yTemp=rand(); int bRandX=nWidth/2-25+xTemp%60*((xTemp%2==0)?1:(-1)); int bRandY=nHeight/2-70+yTemp%60*((yTemp%2==0)?1:(-1)); //保存随机位置 CPoint ptTemp; ptTemp.SetPoint(bRandX,bRandY); m_ptKeepJeton[i].Add(ptTemp); } lTemp%=lTimes[k]; if(lTemp==0)break; } } m_lCurrentScore[i]=0L; } //绘画筹码 for (BYTE i=0;i<GAME_PLAYER;i++) { //m_lTableScore[i] = 100000; if (m_lTableScore[i]==0L ) continue; CImageHandle HandleJeton(&m_ImageJeton); //固定位置输出 int Count=0; for(int j=0;j<(m_lDrawGold[i].GetCount());j++) { LONG lDrawCount = m_lDrawGold[i].GetAt(j).lDrawCount; while((lDrawCount--)>0) { CPoint cpTemp=m_ptKeepJeton[i].GetAt(Count++); m_ImageJeton.AlphaDrawImage(pDC,cpTemp.x,cpTemp.y,m_ImageJeton.GetWidth()/15, m_ImageJeton.GetHeight(),m_ImageJeton.GetWidth()/15*(m_lDrawGold[i].GetAt(j).lGoldType),0,RGB(255,0,255)); if(Count==100)break; } if(Count==100)break; } //绘画数目 TCHAR szBuffer[64]; _snprintf(szBuffer,CountArray(szBuffer),TEXT("$:%ld"),m_lTableScore[i]); //计算位置 CRect rcDrawRect; rcDrawRect.top=m_CardControl[i].GetCardPos().y; rcDrawRect.left=m_CardControl[i].GetCardPos().x+((i>2)?(135):(-50)); rcDrawRect.right=rcDrawRect.left+30; rcDrawRect.bottom=rcDrawRect.top+12; //创建字体 CFont ViewFont; ViewFont.CreateFont(-14,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); //绘画数目 pDC->SetTextAlign(TA_LEFT); pDC->SetTextColor(RGB(250,200,40)); pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); //清理字体 pDC->SelectObject(pOldFont); } //绘画信息 if(m_lCellScore>0) { //创建字体 CFont ViewFont; ViewFont.CreateFont(-12,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); pDC->SetTextAlign(TA_LEFT); pDC->SetTextColor(RGB(0,0,0)); //计算位置 CRect rcDrawRect; //绘画数目 TCHAR szBuffer[64]; _snprintf(szBuffer,CountArray(szBuffer),TEXT("封顶:%ld"),m_lMaxCellScore); rcDrawRect.top=nHeight/2-338; rcDrawRect.left=nWidth/2-233; rcDrawRect.right=rcDrawRect.left+50; rcDrawRect.bottom=rcDrawRect.top+12; pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); _snprintf(szBuffer,CountArray(szBuffer),TEXT("单注:%ld"),m_lCellScore); rcDrawRect.top=nHeight/2-318; rcDrawRect.left=nWidth/2-230; rcDrawRect.right=rcDrawRect.left+50; rcDrawRect.bottom=rcDrawRect.top+12; pDC->DrawText(szBuffer,lstrlen(szBuffer),&rcDrawRect,DT_CENTER|DT_VCENTER|DT_NOCLIP|DT_SINGLELINE); //清理字体 pDC->SelectObject(pOldFont); } //选比标志 if(m_bCompareCard) { for (int i=0;i<GAME_PLAYER;i++) { if(m_bCompareUser[i]==TRUE) { CPoint cPost=m_CardControl[i].GetCardPos(); CImageHandle ImageArrowhead(&m_ImageArrowhead); m_ImageArrowhead.AlphaDrawImage(pDC,cPost.x,cPost.y-m_ImageArrowhead.GetHeight(), m_ImageArrowhead.GetWidth(),m_ImageArrowhead.GetHeight(),0,0,RGB(255,0,255)); } } } } //发牌绘画 if (m_SendCardItemArray.GetCount()>0) { //变量定义 CImageHandle HandleCard(&m_ImageCard); tagSendCardItem * pSendCardItem=&m_SendCardItemArray[0]; //获取大小 int nItemWidth=m_ImageCard.GetWidth()/13; int nItemHeight=m_ImageCard.GetHeight()/5; //绘画扑克 int nXPos=m_SendCardPos.x-nItemWidth/2; int nYPos=m_SendCardPos.y-nItemHeight/2+10; m_ImageCard.AlphaDrawImage(pDC,nXPos,nYPos,nItemWidth,nItemHeight,nItemWidth*2,nItemHeight*4,RGB(255,0,255)); } //比牌扑克 if (m_wLoserUser!=INVALID_CHAIR) { //送牌状态 if (m_wConmareIndex<m_wConmareCount) { //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=PointStart.y+(m_ptUserCompare.y-PointStart.y)*m_wConmareIndex/m_wConmareCount; PointCard.x=PointStart.x+(m_ptUserCompare.x-PointStart.x+COMPARE_RADII*nQuotiety)*m_wConmareIndex/m_wConmareCount; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,false); } } //比牌状态 if ((m_wConmareIndex>=m_wConmareCount)&&((m_wConmareIndex<m_wConmareCount+VSCARD_COUNT*VSCARD_TIME))) { //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=m_ptUserCompare.y; PointCard.x=m_ptUserCompare.x+COMPARE_RADII*nQuotiety; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,false); } //比牌标志 CSize SizeVSCard; CPngImage ImageVSCard; ImageVSCard.LoadImage(AfxGetInstanceHandle(),TEXT("VS_CARD")); SizeVSCard.SetSize(ImageVSCard.GetWidth()/VSCARD_COUNT,ImageVSCard.GetHeight()); //绘画标志 INT nImageIndex=(m_wConmareIndex-m_wConmareCount)%VSCARD_COUNT; ImageVSCard.DrawImage(pDC,m_ptUserCompare.x-SizeVSCard.cx/2,m_ptUserCompare.y-SizeVSCard.cy/2, SizeVSCard.cx,SizeVSCard.cy,nImageIndex*SizeVSCard.cx,0); //声音效果 CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView); pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("COMPARE_CARD")); } //回牌状态 if (m_wConmareIndex>=m_wConmareCount+VSCARD_COUNT*VSCARD_TIME) { //变量定义 WORD wConmareIndex=m_wConmareIndex-m_wConmareCount-VSCARD_COUNT*VSCARD_TIME; //绘画扑克 for (BYTE i=0;i<2;i++) { //变量定义 CPoint PointCard; CPoint PointStart=m_ptUserCard[m_wCompareChairID[i]]; //计算位置 INT nQuotiety=(i==0)?-1:1; PointCard.y=m_ptUserCompare.y+(PointStart.y-m_ptUserCompare.y)*wConmareIndex/m_wConmareCount; PointCard.x=m_ptUserCompare.x+COMPARE_RADII*nQuotiety+(PointStart.x-m_ptUserCompare.x-COMPARE_RADII*nQuotiety)*wConmareIndex/m_wConmareCount; //绘画扑克 DrawCompareCard(pDC,PointCard.x,PointCard.y,(m_wLoserUser==m_wCompareChairID[i])?true:false); } //声音效果 if(m_wConmareIndex==m_wConmareCount+VSCARD_COUNT*VSCARD_TIME) { CGameClientDlg * pGameClientDlg=CONTAINING_RECORD(this,CGameClientDlg,m_GameClientView); pGameClientDlg->PlayGameSound(AfxGetInstanceHandle(),TEXT("CENTER_SEND_CARD")); } } } //等待选择 if(m_wWaitUserChoice!=INVALID_CHAIR) { TCHAR szBuffer[64]=TEXT(""); //创建字体 CFont ViewFont; ViewFont.CreateFont(-15,0,0,0,700,0,0,0,134,3,2,1,2,TEXT("宋体")); //设置字体 CFont * pOldFont=pDC->SelectObject(&ViewFont); pDC->SetTextAlign(TA_CENTER); //输出信息 if(m_wWaitUserChoice==TRUE)_sntprintf(szBuffer,sizeof(szBuffer),TEXT("等待玩家选择比牌")); else _sntprintf(szBuffer,sizeof(szBuffer),TEXT("请选择玩家进行比牌")); DrawTextString(pDC,szBuffer,RGB(50,50,50),RGB(0,170,0),nWidth/2+10,nHeight/2+45); //清理字体 pDC->SelectObject(pOldFont); } return; }