|
- #include "StdAfx.h"
- #include "Resource.h"
- #include "GameClientView.h"
-
- //////////////////////////////////////////////////////////////////////////
- //按钮标识
-
- #define IDC_START 100 //开始按钮
- #define IDC_TRUSTEE_CONTROL 104 //托管控制
- #define IDI_GANG_SOCRE 105 //
-
- //动作标识
- #define IDI_BOMB_EFFECT 101 //动作标识
- //动作数目
- #define BOMB_EFFECT_COUNT 12 //动作数目
- #define DISC_EFFECT_COUNT 8 //丢弃效果
-
- #define TIME_GANG_SCORE 70 //
- #define GANG_MOVE_COUNT 14 //
-
- #define TIME_CX 65
- #define TIME_CY 69
-
- #define BORDER_CX 0
- #define BORDER_CY 0
-
-
- //////////////////////////////////////////////////////////////////////////
-
- BEGIN_MESSAGE_MAP(CGameClientView, CGameFrameViewGDI)
- ON_WM_CREATE()
- ON_WM_SETCURSOR()
- ON_WM_LBUTTONDOWN()
- ON_BN_CLICKED(IDC_START, OnStart)
- ON_BN_CLICKED(IDC_TRUSTEE_CONTROL,OnStusteeControl)
- ON_WM_TIMER()
- END_MESSAGE_MAP()
-
- //////////////////////////////////////////////////////////////////////////
-
- //构造函数
- CGameClientView::CGameClientView()
- {
- //标志变量
- m_bOutCard=false;
- m_bWaitOther=false;
- ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
- m_wGangChairId = INVALID_CHAIR;
-
- //游戏属性
- m_lCellScore=0L;
- m_wBankerUser=INVALID_CHAIR;
- m_wCurrentUser=INVALID_CHAIR;
- ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
-
- //动作动画
- m_bBombEffect=false;
- m_cbBombFrameIndex=0;
-
- //丢弃效果
- m_wDiscUser=INVALID_CHAIR;
- m_cbDiscFrameIndex=0;
-
- //用户状态
- m_cbCardData=0;
- m_wOutCardUser=INVALID_CHAIR;
- ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
- ZeroMemory(m_bTrustee,sizeof(m_bTrustee));
-
- //加载位图
- HINSTANCE hInstance=AfxGetInstanceHandle();
- m_ImageWait.LoadFromResource(hInstance, IDB_WAIT_TIP);
- m_ImageBack.LoadFromResource(hInstance, IDB_VIEW_BACK);
- m_ImageUserFlag.LoadFromResource(hInstance, IDB_USER_FLAG);
- m_ImageOutCard.LoadFromResource(hInstance, IDB_OUT_CARD_TIP);
- m_ImageUserAction.LoadFromResource(hInstance, IDB_USER_ACTION);
- m_ImageActionBack.LoadFromResource(hInstance, IDB_ACTION_BACK);
- m_ImageTrustee.LoadImage(hInstance,TEXT("TRUSTEE"));
- m_ImageActionAni.LoadImage(AfxGetInstanceHandle(),TEXT("ActionAni"));
- m_ImageDisc.LoadImage(AfxGetInstanceHandle(),TEXT("DISC"));
- m_ImageArrow.LoadImage(AfxGetInstanceHandle(),TEXT("ARROW"));
- m_ImageCenter.LoadFromResource(hInstance, IDB_VIEW_CENTER);
- m_ImageWinOrder.LoadFromResource(hInstance, IDB_WIN_ORDER);
- m_ImageCellScore.LoadImage(AfxGetInstanceHandle(),TEXT("CELL_SCORE"));
- m_PngNumLost.LoadImage(AfxGetInstanceHandle(),TEXT("NUM_LOST"));
- m_PngNumWin.LoadImage(AfxGetInstanceHandle(),TEXT("NUM_WIN"));
- m_PngXiaYu.LoadImage(AfxGetInstanceHandle(),TEXT("XIAO_YU"));
- m_PngGuaFeng.LoadImage(AfxGetInstanceHandle(),TEXT("GUA_FENG"));
-
- return;
- }
-
- //析构函数
- CGameClientView::~CGameClientView(void)
- {
- }
-
- //建立消息
- int CGameClientView::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (__super::OnCreate(lpCreateStruct)==-1) return -1;
-
- //变量定义
- enDirection Direction[]={Direction_North,Direction_East,Direction_South,Direction_West};
-
- //设置控件
- for (WORD i=0;i<4;i++)
- {
- //用户扑克
- m_HeapCard[i].SetDirection(Direction[i]);
- m_TableCard[i].SetDirection(Direction[i]);
- m_DiscardCard[i].SetDirection(Direction[i]);
-
- //组合扑克
- m_WeaveCard[i][0].SetDisplayItem(true);
- m_WeaveCard[i][1].SetDisplayItem(true);
- m_WeaveCard[i][2].SetDisplayItem(true);
- m_WeaveCard[i][3].SetDisplayItem(true);
- m_WeaveCard[i][0].SetDirection(Direction[i]);
- m_WeaveCard[i][1].SetDirection(Direction[i]);
- m_WeaveCard[i][2].SetDirection(Direction[i]);
- m_WeaveCard[i][3].SetDirection(Direction[i]);
- }
-
- //设置控件
- m_UserCard[0].SetDirection(Direction_North);
- m_UserCard[1].SetDirection(Direction_East);
- m_UserCard[2].SetDirection(Direction_West);
-
-
- //创建控件
- CRect rcCreate(0,0,0,0);
- m_ControlWnd.Create(NULL,NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,10,NULL);
- m_DrawSiceWnd.Create(NULL,NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,11,NULL);
-
- //创建控件
- m_btStart.Create(NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,IDC_START);
- m_btStart.SetButtonImage(IDB_BT_START,AfxGetInstanceHandle(),false,false);
-
- //托管按钮
- m_btStusteeControl.Create(TEXT(""),WS_CHILD|WS_DISABLED|WS_VISIBLE,rcCreate,this,IDC_TRUSTEE_CONTROL);
- m_btStusteeControl.SetButtonImage(IDB_BT_START_TRUSTEE,AfxGetInstanceHandle(),false,false);
-
- SetTimer(IDI_DISC_EFFECT,250,NULL);
-
- //test
- //m_btStart.ShowWindow( SW_SHOW );
- //BYTE byCard[] = {
- // 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
- // 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
- // 0x01,0x02,0x03,0x04,0x05,0x06
- //};
- //BYTE byCardCount = 14;
- //m_HandCardControl.SetDisplayItem(true);
- //m_HandCardControl.SetPositively(true);
- //m_HandCardControl.SetCardData(byCard,MAX_COUNT-1-3,byCard[MAX_COUNT-1]);
- //for( BYTE i = 0; i < GAME_PLAYER; i++ )
- //{
- // m_HeapCard[i].SetCardData(0,0,HEAP_FULL_COUNT);
- // m_TableCard[i].SetCardData(byCard,byCardCount);
- // m_DiscardCard[i].SetCardData(byCard,byCardCount);
- // m_WeaveCard[i][0].SetCardData(byCard,3);
- // if( i < 3 )
- // m_UserCard[i].SetCardData(MAX_COUNT-1,false);
- // m_bTrustee[i] = true;
- // m_cbUserAction[i] = WIK_PENG;
- // m_cbWinOrder[i] = i+1;
- //}
- //m_bWaitOther = true;
- //m_bOutCard = true;
- //m_wOutCardUser = 0;
- //m_cbCardData = 0x01;
- //m_cbUserAction[0] = WIK_NULL;
- //m_wDiscUser = 1;
- //SetBombEffect(true);
- //tagScoreInfo si;
- //ZeroMemory( &si,sizeof(si) );
- //for( WORD i = 0; i < GAME_PLAYER; i++ )
- // lstrcpy( si.szUserName[i],TEXT("杨杨得意") );
- //for( WORD i = 0; i < GAME_PLAYER; i++ )
- //{
- // si.wMeChairId = i;
- // si.cbGenCount = i+1;
- // si.cbWinOrder= i+1;
- // if( i%2==0 )
- // {
- // si.dwChiHuRight[0] = CHR_QING_LONG_QI_DUI;
- // si.lGameScore = 1234L;
- // }
- // else si.lGameScore = -1234L;
- // si.wLostFanShu[(i+1)%GAME_PLAYER] = 5;
- // si.wLostFanShu[(i+2)%GAME_PLAYER] = 6;
- // si.lGameTax = 1234L;
- // si.lGangScore = 124L;
- // si.wProvideUser = 3;
- // m_ScoreControl[i].SetScoreInfo( si );
- //}
- //end test
-
- return 0;
- }
-
- //重置界面
- void CGameClientView::ResetGameView()
- {
- //标志变量
- m_bOutCard=false;
- m_bWaitOther=false;
- ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
- m_wGangChairId = INVALID_CHAIR;
-
- //游戏属性
- m_lCellScore=0L;
- m_wBankerUser=INVALID_CHAIR;
- m_wCurrentUser=INVALID_CHAIR;
- ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
-
- //动作动画
- m_bBombEffect=false;
- m_cbBombFrameIndex=0;
-
- //丢弃效果
- m_wDiscUser=INVALID_CHAIR;
- m_cbDiscFrameIndex=0;
-
- //用户状态
- m_cbCardData=0;
- m_wOutCardUser=INVALID_CHAIR;
- ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
-
- //界面设置
- m_btStart.ShowWindow(SW_HIDE);
- m_ControlWnd.ShowWindow(SW_HIDE);
- for( WORD i = 0; i < GAME_PLAYER; i++ )
- m_ScoreControl[i].RestorationData();
-
- //禁用控件
- m_btStusteeControl.EnableWindow(FALSE);
-
- //扑克设置
- m_UserCard[0].SetCardData(0,false);
- m_UserCard[1].SetCardData(0,false);
- m_UserCard[2].SetCardData(0,false);
- m_HandCardControl.SetPositively(false);
- m_HandCardControl.SetDisplayItem(false);
- m_HandCardControl.SetCardData(NULL,0,0);
-
- //扑克设置
- for (WORD i=0;i<GAME_PLAYER;i++)
- {
- m_HeapCard[i].SetCardData(0,0,0);
- m_TableCard[i].SetCardData(NULL,0);
- m_DiscardCard[i].SetCardData(NULL,0);
- m_WeaveCard[i][0].SetCardData(NULL,0);
- m_WeaveCard[i][1].SetCardData(NULL,0);
- m_WeaveCard[i][2].SetCardData(NULL,0);
- m_WeaveCard[i][3].SetCardData(NULL,0);
- }
-
- //销毁定时器
- KillTimer(IDI_DISC_EFFECT);
- KillTimer(IDI_BOMB_EFFECT);
-
- return;
- }
-
- //调整控件
- void CGameClientView::RectifyControl(int nWidth, int nHeight)
- {
- //设置坐标
- m_ptAvatar[0].x=nWidth/2-FACE_CX;
- m_ptAvatar[0].y=nHeight/2 - 280;
- m_ptNickName[0].x=nWidth/2+5;
- m_ptNickName[0].y=nHeight/2 - 280 + 15;
- m_ptClock[0].x=nWidth/2-FACE_CX-TIME_CX-2;
- m_ptClock[0].y=17+BORDER_CY;
-
- m_ptReady[0].x=nWidth/2-FACE_CX-TIME_CX*2-5 + 130;
- m_ptReady[0].y=nHeight/2 - 280+TIME_CY/2 + 40;
-
- m_UserFlagPos[0].x=nWidth/2-FACE_CX-TIME_CX-32;
- m_UserFlagPos[0].y=nHeight/2 - 280;
- m_PointTrustee[0].x=nWidth/2-FACE_CX-20-FACE_CX/2;
- m_PointTrustee[0].y=nHeight/2 - 280;
- m_ptWinOrder[0].x=nWidth/2-FACE_CX/2-150;
- m_ptWinOrder[0].y=nHeight/2 - 280+18;
- m_ptGangScore[0].x = m_ptAvatar[0].x+16;
- m_ptGangScore[0].y = m_ptAvatar[0].y+100;
- m_ScoreControl[0].SetBenchmarkPos( nWidth/2-120,nHeight/2-250 );
-
- m_ptAvatar[1].x=nWidth-BORDER_CX-FACE_CX-5;
- m_ptAvatar[1].y=nHeight/2-FACE_CY-50;
- m_ptNickName[1].x=nWidth-BORDER_CX-5;
- m_ptNickName[1].y=nHeight/2-45;
- m_ptClock[1].x=nWidth-BORDER_CX-FACE_CX+5;
- m_ptClock[1].y=nHeight/2-FACE_CY-27-TIME_CY;
- m_ptReady[1].x=nWidth-BORDER_CX-TIME_CX+3;
- m_ptReady[1].y=nHeight/2-FACE_CY-55-TIME_CY/2+FACE_CY*2+40;
- m_UserFlagPos[1].x=nWidth-BORDER_CX-TIME_CX+8;
- m_UserFlagPos[1].y=nHeight/2-FACE_CY-83-TIME_CY;
- m_PointTrustee[1].x=nWidth-BORDER_CX-TIME_CX+8;
- m_PointTrustee[1].y=nHeight/2-FACE_CY-50-35;
- m_ptWinOrder[1].x=nWidth-BORDER_CX-5-18;
- m_ptWinOrder[1].y=nHeight/2+FACE_CY/2-20;
- m_ptGangScore[1].x = m_ptAvatar[1].x - 100;
- m_ptGangScore[1].y = m_ptAvatar[1].y + 16;
- m_ScoreControl[1].SetBenchmarkPos( nWidth/2+100,nHeight/2-90 );
-
- m_ptAvatar[2].x=nWidth/2-FACE_CX;
- m_ptAvatar[2].y=nHeight/2+350-FACE_CY;
- m_ptNickName[2].x=nWidth/2+5+FACE_CX/2;
- m_ptNickName[2].y=nHeight/2+350-FACE_CY+8;
- m_ptClock[2].x=nWidth/2-FACE_CX/2-TIME_CX-2;
- m_ptClock[2].y=nHeight/2+350-TIME_CY-8+40;
-
- m_ptReady[2].x=nWidth/2-TIME_CX*2-FACE_CX/2-5 +130;
- m_ptReady[2].y = nHeight/2 + 350 - TIME_CY/2 - 10 - 40;
-
- m_UserFlagPos[2].x=nWidth/2-FACE_CX-TIME_CX-32;
- m_UserFlagPos[2].y=nHeight/2+350-35;
- m_PointTrustee[2].x=nWidth/2-FACE_CX-20-FACE_CX/2;
- m_PointTrustee[2].y=nHeight/2+350-FACE_CY-5;
- m_ptWinOrder[2].x=nWidth/2-FACE_CX/2-120;
- m_ptWinOrder[2].y=nHeight/2+350-5-16;
- m_ptGangScore[2].x = m_ptAvatar[2].x + 16;
- m_ptGangScore[2].y = m_ptAvatar[2].y - 100;
- m_ScoreControl[2].SetBenchmarkPos( nWidth/2-120,nHeight/2+70 );
-
- m_ptAvatar[3].x=BORDER_CX+5;
- m_ptAvatar[3].y=nHeight/2-FACE_CY-50;
- m_ptNickName[3].x=BORDER_CX+5;
- m_ptNickName[3].y=nHeight/2-45;
- m_ptClock[3].x=BORDER_CX+22;
- m_ptClock[3].y=nHeight/2-FACE_CY-27-TIME_CY;
- m_ptReady[3].x=BORDER_CX-2+TIME_CX;
- m_ptReady[3].y=nHeight/2-FACE_CY-55-TIME_CY/2+FACE_CY*2+40;
- m_UserFlagPos[3].x=BORDER_CX+8;
- m_UserFlagPos[3].y=nHeight/2-FACE_CY-83-TIME_CY;
- m_PointTrustee[3].x=BORDER_CX+5;
- m_PointTrustee[3].y=nHeight/2-FACE_CY-50-35;
- m_ptWinOrder[3].x=BORDER_CX+5+18;
- m_ptWinOrder[3].y=nHeight/2+FACE_CY/2-20;;
- m_ptGangScore[3].x = m_ptAvatar[3].x + 100;
- m_ptGangScore[3].y = m_ptAvatar[3].y + 16;
- m_ScoreControl[3].SetBenchmarkPos( nWidth/2-260,nHeight/2-90 );
-
- int nXCenter=nWidth/2;
- int nYCenter=nHeight/2-40;
- //用户扑克
- m_UserCard[0].SetControlPoint(nXCenter-200 - 23,nYCenter-213 - 60 + 96); //上
- m_UserCard[1].SetControlPoint(nXCenter+238+60 - 32 ,nHeight/2-255 + 135 - 10);//右
- m_UserCard[2].SetControlPoint(nXCenter-276-80 + 32,nHeight/2+177 + 7);//左
- m_HandCardControl.SetBenchmarkPos(nWidth/2 - 5,nYCenter + 400-FACE_CY-BORDER_CY-5 - 16,enXCenter,enYBottom);
-
- //桌面扑克
- m_TableCard[0].SetControlPoint(nWidth/2-179 - 36,nYCenter-213 - 60 + 94);//上
- m_TableCard[1].SetControlPoint(nXCenter+238+60 - 6,nHeight/2-125 + 34);//右
- m_TableCard[2].SetControlPoint(nWidth/2+185 + 16,nYCenter + 400-FACE_CY-BORDER_CY-15 - 26);//下
- m_TableCard[3].SetControlPoint(nXCenter-276-80 + 5,nHeight/2+125);//左
-
- //堆积扑克
- m_HeapCard[0].SetControlPoint(nXCenter-200 - 2,nYCenter-213 + 87 - 15); //上
- m_HeapCard[1].SetControlPoint(nXCenter+238 - 52 + 5,nYCenter-140 + 89); //右
- m_HeapCard[2].SetControlPoint(nXCenter-189 - 52 + 19,nYCenter+213-5 - 4); //下
- m_HeapCard[3].SetControlPoint(nXCenter-276 + 35 - 5,nYCenter-135 + 84 ); //左
-
- //丢弃扑克
- m_DiscardCard[0].SetControlPoint(nXCenter-175 + 55 - 2,nYCenter-100+12 + 49); //上
- m_DiscardCard[1].SetControlPoint(nXCenter+103 - 15,nYCenter-64+12 + 35); //右
- m_DiscardCard[2].SetControlPoint(nXCenter+150 - 60 + 12,nYCenter+112+12 + 6); //下
- m_DiscardCard[3].SetControlPoint(nXCenter-137 - 24 - 2,nYCenter+76+12 + 21); //左
-
- //组合扑克 上
- m_WeaveCard[0][0].SetControlPoint(nWidth/2+195 - 50 - 97*0,nYCenter-213 - 60 + 96 + 60);
- m_WeaveCard[0][1].SetControlPoint(nWidth/2+195 - 50 - 97*1,nYCenter-213 - 60 + 96 + 60);
- m_WeaveCard[0][2].SetControlPoint(nWidth/2+195 - 50 - 97*2,nYCenter-213 - 60 + 96 + 60);
- m_WeaveCard[0][3].SetControlPoint(nWidth/2+195 - 50 - 97*3,nYCenter-213 - 60 + 96 + 60);
-
- //组合扑克 右
- m_WeaveCard[1][0].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*0,nHeight/2+130 - 30 + 23 - 57*0);
- m_WeaveCard[1][1].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*1,nHeight/2+130 - 30 + 23 - 57*1);
- m_WeaveCard[1][2].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*2,nHeight/2+130 - 30 + 23 - 57*2);
- m_WeaveCard[1][3].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*3,nHeight/2+130 - 30 + 23 - 57*3);
-
- //组合扑克 下
- m_WeaveCard[2][0].SetControlPoint(nWidth/2-240 + 43 + 108*0,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
- m_WeaveCard[2][1].SetControlPoint(nWidth/2-240 + 43 + 108*1,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
- m_WeaveCard[2][2].SetControlPoint(nWidth/2-240 + 43 + 108*2,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
- m_WeaveCard[2][3].SetControlPoint(nWidth/2-240 + 43 + 108*3,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
-
- //组合扑克 左
- m_WeaveCard[3][0].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*0,nHeight/2-210 +30 + 124 + 57*0);
- m_WeaveCard[3][1].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*1,nHeight/2-210 +30 + 124 + 57*1);
- m_WeaveCard[3][2].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*2,nHeight/2-210 +30 + 124 + 57*2);
- m_WeaveCard[3][3].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*3,nHeight/2-210 +30 + 124 + 57*3);
-
- //控制窗口
- m_ControlWnd.SetBenchmarkPos(nWidth/2+298,nHeight-BORDER_CY-120);
-
- //色子窗口
- CRect rcSice;
- m_DrawSiceWnd.GetWindowRect(&rcSice);
- m_DrawSiceWnd.SetBenchmarkPos((nWidth-rcSice.Width())/2,(nHeight-rcSice.Height())/2);
- m_DrawSiceWnd.MoveWindow((nWidth-rcSice.Width())/2,(nHeight-rcSice.Height())/2,rcSice.Width(),rcSice.Height());
-
- //移动按钮
- CRect rcButton;
- HDWP hDwp=BeginDeferWindowPos(32);
- m_btStart.GetWindowRect(&rcButton);
- const UINT uFlags=SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS|SWP_NOSIZE;
-
- //移动调整
- DeferWindowPos(hDwp,m_btStart,NULL,(nWidth-rcButton.Width())/2,nHeight/2 + 270,0,0,uFlags);
- //DeferWindowPos(hDwp,m_btStart,NULL,(nWidth-rcButton.Width())/2,nHeight/2+70,0,0,uFlags);
- //移动调整
- DeferWindowPos(hDwp,m_btStusteeControl,NULL,nWidth-BORDER_CX-(rcButton.Width()+5),nHeight-BORDER_CY-rcButton.Height(),0,0,uFlags);
-
- //结束移动
- EndDeferWindowPos(hDwp);
-
- return;
- }
-
- //绘画界面
- void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight)
- {
- //绘画背景
- DrawViewImage(pDC,m_ImageBack,DRAW_MODE_SPREAD);
- DrawViewImage(pDC,m_ImageCenter,DRAW_MODE_CENTENT);
-
- //单元积分
- m_ImageCellScore.DrawImage( pDC,BORDER_CX+5,BORDER_CY+5 );
- TCHAR szBuffer[32] = TEXT("");
- _sntprintf( szBuffer,CountArray(szBuffer),TEXT("%I64d"),m_lCellScore );
- DrawTextString( pDC,szBuffer,RGB(255,255,255),RGB(0,0,0),BORDER_CX+5+56,BORDER_CY+5+12,true );
-
- //绘画用户
- pDC->SetTextColor(RGB(255,255,0));
- for (WORD i=0;i<GAME_PLAYER;i++)
- {
- //变量定义
- IClientUserItem * pUserData=GetClientUserItem(i);
- //test
- //tagUserData *pUserData = new tagUserData;
- //lstrcpy(pUserData->szName,TEXT("SSSSSssssssssssss"));
- //pUserData->cbUserStatus = US_READY;
- //end test
- if (pUserData!=NULL)
- {
- //用户名字
- pDC->SetTextAlign((i==1)?(TA_RIGHT|TA_TOP):(TA_LEFT|TA_TOP));
- DrawTextString(pDC, pUserData->GetNickName(), RGB(255,255,255), RGB(0,0,0), m_ptNickName[i].x, m_ptNickName[i].y, false);
-
- //胡牌先后
- if( m_cbWinOrder[i] != 0 )
- {
- INT nWinOrderWidth = m_ImageWinOrder.GetWidth()/4;
- INT nWinOrderHeight = m_ImageWinOrder.GetHeight();
- m_ImageWinOrder.TransDrawImage( pDC,m_ptWinOrder[i].x-nWinOrderWidth/2,m_ptWinOrder[i].y-nWinOrderHeight/2,
- nWinOrderWidth,nWinOrderHeight,(m_cbWinOrder[i]-1)*nWinOrderWidth,0,RGB(255,0,255) );
- }
-
- //其他信息
- WORD wUserTimer=GetUserClock(i);
- //test
- //wUserTimer = 30;
- //end test
- if ((wUserTimer!=0)&&(m_wCurrentUser!=INVALID_CHAIR))
- {
- DrawUserClock(pDC,nWidth/2,nHeight/2 + 24,wUserTimer);
- if(m_wCurrentUser==0)
- m_ImageArrow.DrawImage(pDC,
- nWidth/2-15, //X坐标
- nHeight/2-m_ImageArrow.GetHeight()*2 + 24, //Y坐标
- m_ImageArrow.GetWidth()/4, //宽
- m_ImageArrow.GetHeight(), //高
- m_ImageArrow.GetWidth()/4*m_wCurrentUser,//起始位置X
- 0);
- if(m_wCurrentUser==1)
- m_ImageArrow.DrawImage(pDC,nWidth/2+m_ImageArrow.GetWidth()/4,nHeight/2-15 + 24,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*m_wCurrentUser,0);
- if(m_wCurrentUser==2)
- m_ImageArrow.DrawImage(pDC,nWidth/2-15,nHeight/2+m_ImageArrow.GetHeight() + 24,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*m_wCurrentUser,0);
- if(m_wCurrentUser==3)
- m_ImageArrow.DrawImage(pDC,nWidth/2-m_ImageArrow.GetWidth()/4*2,nHeight/2-15 + 24,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*m_wCurrentUser,0);
- }
- if((wUserTimer!=0)&&(m_wCurrentUser==INVALID_CHAIR))
- {
- DrawUserClock(pDC,nWidth/2,nHeight/2,wUserTimer);
- if(i==0)
- m_ImageArrow.DrawImage(pDC,nWidth/2-15,nHeight/2-m_ImageArrow.GetHeight()*2,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*i,0);
- if(i==1)
- m_ImageArrow.DrawImage(pDC,nWidth/2+m_ImageArrow.GetWidth()/4,nHeight/2-15,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*i,0);
- if(i==2)
- m_ImageArrow.DrawImage(pDC,nWidth/2-15,nHeight/2+m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*i,0);
- if(i==3)
- m_ImageArrow.DrawImage(pDC,nWidth/2-m_ImageArrow.GetWidth()/4*2,nHeight/2-15,m_ImageArrow.GetWidth()/4,m_ImageArrow.GetHeight(),m_ImageArrow.GetWidth()/4*i,0);
-
- }
-
- if (pUserData->GetUserStatus() == US_READY)
- {
- DrawUserReady(pDC,m_ptReady[i].x,m_ptReady[i].y);
- }
-
- DrawUserAvatar(pDC,m_ptAvatar[i].x,m_ptAvatar[i].y,pUserData);
-
- //托管
- if(m_bTrustee[i])
- {
- m_ImageTrustee.DrawImage(pDC,m_PointTrustee[i].x,m_PointTrustee[i].y);
- }
- }
- //test
- //delete pUserData;
- //end test
- }
-
- //用户标志
- if (m_wBankerUser!=INVALID_CHAIR)
- {
- //加载位图
- int nImageWidth=m_ImageUserFlag.GetWidth()/4;
- int nImageHeight=m_ImageUserFlag.GetHeight();
-
- //绘画标志
- for (WORD i=0;i<GAME_PLAYER;i++)
- {
- WORD wIndex=((i+GAME_PLAYER)-m_wBankerUser)%GAME_PLAYER;
- m_ImageUserFlag.TransDrawImage(pDC,m_UserFlagPos[i].x,m_UserFlagPos[i].y,nImageWidth,nImageHeight,nImageWidth*wIndex,0,RGB(255,0,255));
- }
- }
-
- //用户扑克
- m_UserCard[0].DrawCardControl(pDC);
- m_TableCard[0].DrawCardControl(pDC);
-
- //组合
- m_WeaveCard[0][0].DrawCardControl(pDC);
- m_WeaveCard[0][1].DrawCardControl(pDC);
- m_WeaveCard[0][2].DrawCardControl(pDC);
- m_WeaveCard[0][3].DrawCardControl(pDC);
-
- m_HeapCard[0].DrawCardControl(pDC); //上
-
- //桌面扑克
- m_TableCard[1].DrawCardControl(pDC);
- m_TableCard[2].DrawCardControl(pDC);
- m_TableCard[3].DrawCardControl(pDC);
- //for (WORD i=0;i<4;i++)
- //{
- // m_TableCard[i].DrawCardControl(pDC); //桌子上的
- // //m_DiscardCard[i].DrawCardControl(pDC); //丢的
-
- //}
-
- m_UserCard[1].DrawCardControl(pDC);
- //组合
- m_WeaveCard[1][3].DrawCardControl(pDC);
- m_WeaveCard[1][2].DrawCardControl(pDC);
- m_WeaveCard[1][1].DrawCardControl(pDC);
- m_WeaveCard[1][0].DrawCardControl(pDC);
-
- //组合
- m_WeaveCard[2][0].DrawCardControl(pDC);
- m_WeaveCard[2][1].DrawCardControl(pDC);
- m_WeaveCard[2][2].DrawCardControl(pDC);
- m_WeaveCard[2][3].DrawCardControl(pDC);
- //组合
- m_WeaveCard[3][0].DrawCardControl(pDC);
- m_WeaveCard[3][1].DrawCardControl(pDC);
- m_WeaveCard[3][2].DrawCardControl(pDC);
- m_WeaveCard[3][3].DrawCardControl(pDC);
-
- //丢弃牌
- m_DiscardCard[0].DrawCardControl(pDC); //丢的
- m_DiscardCard[1].DrawCardControl(pDC); //丢的
- m_DiscardCard[3].DrawCardControl(pDC); //丢的
- m_DiscardCard[2].DrawCardControl(pDC); //丢的
-
- //堆积扑克
- m_HeapCard[3].DrawCardControl(pDC); //左
- //m_HeapCard[0].DrawCardControl(pDC); //上
- m_HeapCard[1].DrawCardControl(pDC); //右
- m_HeapCard[2].DrawCardControl(pDC); //下
-
- //用户扑克
- //m_UserCard[0].DrawCardControl(pDC);
- //m_UserCard[1].DrawCardControl(pDC);
- m_UserCard[2].DrawCardControl(pDC);
- m_HandCardControl.DrawCardControl(pDC);
-
- //出牌提示
- if (m_bOutCard==true)
- {
- m_ImageOutCard.TransDrawImage(pDC,(nWidth-m_ImageOutCard.GetWidth())/2,nHeight/2-40 + 400-145,RGB(255,0,255));
- }
-
- //等待提示
- if (m_bWaitOther==true)
- {
- m_ImageWait.TransDrawImage(pDC,(nWidth-m_ImageWait.GetWidth())/2,nHeight-145,RGB(255,0,255));
- }
-
- //用户状态
- for (WORD i=0;i<GAME_PLAYER;i++)
- {
- if ((m_wOutCardUser==i)||(m_cbUserAction[i]!=0))
- {
- //计算位置
- int nXPos=0,nYPos=0;
- switch (i)
- {
- case 0: //北向 上
- {
- nXPos=nWidth/2 - 22;
- nYPos=nHeight/2 - 100 - 100 - 20;
- break;
- }
- case 1: //东向 右
- {
- nXPos=nWidth/2 - 52 + 100 + 200;
- nYPos=nHeight/2 - 45;
- break;
- }
- case 2: //南向 下
- {
- nXPos=nWidth/2 - 22;
- nYPos=nHeight/2 + 100 + 100 - 50;
- break;
- }
- case 3: //西向 左
- {
- nXPos=nWidth/2 - 22 - 100 - 200;
- nYPos=nHeight/2 - 45;
- break;
- }
- }
-
- //绘画动作
- if (m_cbUserAction[i]!=WIK_NULL)
- {
-
- //绘画动作
- if (m_bBombEffect==true)
- {
-
- //绘画效果
- INT nItemHeight=m_ImageActionAni.GetHeight()/6;
- INT nItemWidth=m_ImageActionAni.GetWidth()/BOMB_EFFECT_COUNT;
-
- //绘画动作
- int nYImagePos=0;
- if (m_cbUserAction[i]&WIK_PENG) nYImagePos=nItemHeight;
- else if (m_cbUserAction[i]&WIK_GANG) nYImagePos=nItemHeight*2;
- else if (m_cbUserAction[i]==WIK_CHI_HU) nYImagePos=nItemHeight*4;
- else if (m_cbUserAction[i]&WIK_ZI_MO) nYImagePos=nItemHeight*5;
- else nYImagePos=0;
- m_ImageActionAni.DrawImage(pDC,nXPos-nItemWidth/2+54,nYPos+42-nItemHeight/2,nItemWidth,nItemHeight,
- nItemWidth*(m_cbBombFrameIndex%BOMB_EFFECT_COUNT),nYImagePos,nItemWidth,nItemHeight);
- }
- }
- else
- {
- //动作背景
- m_ImageActionBack.BlendDrawImage(pDC,nXPos,nYPos,m_ImageActionBack.GetWidth(),m_ImageActionBack.GetHeight(),
- 0,0,RGB(255,0,255),180);
-
-
- //绘画扑克
- g_CardResource.m_ImageUserBottom.DrawCardItem(pDC,m_cbCardData,nXPos+15,nYPos+13);
- }
-
- }
- }
-
- //丢弃效果
- if(m_wDiscUser!=INVALID_CHAIR)
- {
- CSize SizeDisc(m_ImageDisc.GetWidth()/DISC_EFFECT_COUNT,m_ImageDisc.GetHeight());
- CPoint pt=m_DiscardCard[m_wDiscUser].GetLastCardPosition();
- pt.Offset(-SizeDisc.cx/2,-SizeDisc.cy);
- //绘画信息
- m_ImageDisc.DrawImage(pDC,pt.x,pt.y,SizeDisc.cx,SizeDisc.cy,
- m_cbDiscFrameIndex*SizeDisc.cx,0,SizeDisc.cx,SizeDisc.cy);
- }
-
- //绘画成绩框
- for( WORD i = 0; i < GAME_PLAYER; i++ )
- m_ScoreControl[i].DrawScoreControl( pDC );
-
- //杠牌得分动画
- if( m_wGangChairId != INVALID_CHAIR )
- {
- //刮风下雨动画
- if( m_cbXiaYu )
- {
- int nImageWidth = m_PngXiaYu.GetWidth()/4;
- int nImageHeight = m_PngXiaYu.GetHeight();
- m_PngXiaYu.DrawImage( pDC,m_ptGangScore[m_wGangChairId].x,m_ptGangScore[m_wGangChairId].y,
- nImageWidth,nImageHeight,nImageWidth*m_cbGangIndex,0,nImageWidth,nImageHeight );
- }
- else
- {
- int nImageWidth = m_PngGuaFeng.GetWidth()/4;
- int nImageHeight = m_PngGuaFeng.GetHeight();
- m_PngGuaFeng.DrawImage( pDC,m_ptGangScore[m_wGangChairId].x,m_ptGangScore[m_wGangChairId].y,
- nImageWidth,nImageHeight,nImageWidth*m_cbGangIndex,0,nImageWidth,nImageHeight );
- }
- for( WORD i = 0; i < GAME_PLAYER; i++ )
- {
- if( m_lGangScore[i] > 0 )
- DrawNumberString( pDC,m_PngNumWin,m_ptGangScore[i].x,m_ptGangScore[i].y-m_nYGangStep*3,m_lGangScore[i],true,true );
- else DrawNumberString( pDC,m_PngNumLost,m_ptGangScore[i].x,m_ptGangScore[i].y-m_nYGangStep*3,m_lGangScore[i],true,true );
- }
- }
-
- return;
- }
-
- //基础积分
- void CGameClientView::SetCellScore(LONGLONG lCellScore)
- {
- //设置扑克
- if (lCellScore!=m_lCellScore)
- {
- //设置变量
- m_lCellScore=lCellScore;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
-
- return;
- }
-
- //庄家用户
- void CGameClientView::SetBankerUser(WORD wBankerUser)
- {
- //设置用户
- if (wBankerUser!=m_wBankerUser)
- {
- //设置变量
- m_wBankerUser=wBankerUser;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
-
- return;
- }
-
- //状态标志
- void CGameClientView::SetStatusFlag(bool bOutCard, bool bWaitOther)
- {
- //设置变量
- m_bOutCard=bOutCard;
- m_bWaitOther=bWaitOther;
-
- //更新界面
- InvalidGameView(0,0,0,0);
-
- return;
- }
-
- //出牌信息
- void CGameClientView::SetOutCardInfo(WORD wViewChairID, BYTE cbCardData)
- {
- //设置变量
- m_cbCardData=cbCardData;
- m_wOutCardUser=wViewChairID;
-
- //更新界面
- InvalidGameView(0,0,0,0);
-
- return;
- }
-
- //动作信息
- void CGameClientView::SetUserAction(WORD wViewChairID, BYTE bUserAction)
- {
- //设置变量
- if (wViewChairID<GAME_PLAYER)
- {
- m_cbUserAction[wViewChairID]=bUserAction;
- SetBombEffect(true);
- }
- else
- {
- ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
- if(m_bBombEffect)
- SetBombEffect(false);
- }
-
- //更新界面
- InvalidGameView(0,0,0,0);
-
- return;
- }
-
- //设置动作
- bool CGameClientView::SetBombEffect(bool bBombEffect)
- {
- if (bBombEffect==true)
- {
- //设置变量
- m_bBombEffect=true;
- m_cbBombFrameIndex=0;
-
- //启动时间
- SetTimer(IDI_BOMB_EFFECT,250,NULL);
- }
- else
- {
- //停止动画
- if (m_bBombEffect==true)
- {
- //删除时间
- KillTimer(IDI_BOMB_EFFECT);
-
- //设置变量
- m_bBombEffect=false;
- m_cbBombFrameIndex=0;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
- }
-
- return true;
- }
- //丢弃用户
- void CGameClientView::SetDiscUser(WORD wDiscUser)
- {
- if(m_wDiscUser != wDiscUser)
- {
- //更新变量
- m_wDiscUser=wDiscUser;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
- return;
- }
- //定时玩家
- void CGameClientView::SetCurrentUser(WORD wCurrentUser)
- {
- if (m_wCurrentUser != wCurrentUser)
- {
- //更新变量
- m_wCurrentUser=wCurrentUser;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
- return;
- }
- //设置托管
- void CGameClientView::SetTrustee(WORD wTrusteeUser,bool bTrustee)
- {
- //校验数据
- ASSERT(wTrusteeUser>=0&&wTrusteeUser<GAME_PLAYER);
-
- if(m_bTrustee[wTrusteeUser] !=bTrustee)
- {
- //设置数据
- m_bTrustee[wTrusteeUser]=bTrustee;
-
- //更新界面
- InvalidGameView(0,0,0,0);
- }
- return;
- }
-
- //艺术字体
- void CGameClientView::DrawTextString(CDC * pDC, LPCTSTR pszString, COLORREF crText, COLORREF crFrame, int nXPos, int nYPos, bool bDrawCenter)
- {
- //变量定义
- int nStringLength=lstrlen(pszString);
- int nXExcursion[8]={1,1,1,0,-1,-1,-1,0};
- int nYExcursion[8]={-1,0,1,1,1,0,-1,-1};
-
- if( bDrawCenter )
- {
- TEXTMETRIC tm;
- ZeroMemory( &tm,sizeof(tm) );
- GetTextMetrics(pDC->m_hDC,&tm );
- nXPos -= tm.tmAveCharWidth*nStringLength/2;
- nYPos -= tm.tmHeight/2;
- }
-
- //绘画边框
- pDC->SetTextColor(crFrame);
- for (int i=0;i<CountArray(nXExcursion);i++)
- {
- pDC->TextOut(nXPos+nXExcursion[i],nYPos+nYExcursion[i],pszString,nStringLength);
- }
-
- //绘画字体
- pDC->SetTextColor(crText);
- pDC->TextOut(nXPos,nYPos,pszString,nStringLength);
-
- return;
- }
-
- //光标消息
- BOOL CGameClientView::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage)
- {
- //获取光标
- CPoint MousePoint;
- GetCursorPos(&MousePoint);
- ScreenToClient(&MousePoint);
-
- //点击测试
- bool bRePaint=false;
- bool bHandle=m_HandCardControl.OnEventSetCursor(MousePoint,bRePaint);
-
- //重画控制
- if (bRePaint==true)
- InvalidGameView(0,0,0,0);
-
- //光标控制
- if (bHandle==false)
- __super::OnSetCursor(pWnd,nHitTest,uMessage);
-
- return TRUE;
- }
-
- //鼠标消息
- void CGameClientView::OnLButtonDown(UINT nFlags, CPoint Point)
- {
- __super::OnLButtonDown(nFlags, Point);
-
- //获取扑克
- BYTE cbHoverCard=m_HandCardControl.GetHoverCard();
- if (cbHoverCard!=0)
- SendEngineMessage(IDM_OUT_CARD,cbHoverCard,cbHoverCard);
-
- //test
- //LONGLONG lGangScore[GAME_PLAYER] = { -12345,-12345,-12345,12345 };
- //SetGangScore(2,0, lGangScore );
- //end test
-
- return;
- }
-
- //开始按钮
- void CGameClientView::OnStart()
- {
- //发送消息
- SendEngineMessage(IDM_START,0,0);
-
- return;
- }
- //拖管控制
- void CGameClientView::OnStusteeControl()
- {
- SendEngineMessage(IDM_TRUSTEE_CONTROL,0,0);
- return;
- }
-
- //定时器
- void CGameClientView::OnTimer(UINT nIDEvent)
- {
- //动作动画
- if (nIDEvent==IDI_BOMB_EFFECT)
- {
- //停止判断
- if (m_bBombEffect==false)
- {
- KillTimer(IDI_BOMB_EFFECT);
- return;
- }
-
- //设置变量
- if ((m_cbBombFrameIndex+1)>=BOMB_EFFECT_COUNT)
- {
- //删除时间
- KillTimer(IDI_BOMB_EFFECT);
-
- //设置变量
- m_bBombEffect=false;
- m_cbBombFrameIndex=0;
- }
- else m_cbBombFrameIndex++;
-
- //更新界面
- InvalidGameView(0,0,0,0);
-
- return;
- }
- if (nIDEvent==IDI_DISC_EFFECT)
- {
- //设置变量
- if ((m_cbDiscFrameIndex+1)>=DISC_EFFECT_COUNT)
- {
- m_cbDiscFrameIndex=0;
- }
- else m_cbDiscFrameIndex++;
-
- //更新界面
- InvalidGameView(0,0,0,0);
-
- return;
-
- }
- else if( nIDEvent == IDI_GANG_SOCRE )
- {
- m_cbGangIndex = (m_cbGangIndex+1)%4;
- if( ++m_nYGangStep == GANG_MOVE_COUNT )
- {
- KillTimer( IDI_GANG_SOCRE );
- m_wGangChairId = INVALID_CHAIR;
- ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
- }
-
- InvalidGameView(0,0,0,0);
- return;
- }
-
- __super::OnTimer(nIDEvent);
- }
-
- //
- void CGameClientView::SetWinOrder( WORD wChairId, BYTE cbWinOrder )
- {
- if( wChairId == INVALID_CHAIR )
- ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
- else m_cbWinOrder[wChairId] = cbWinOrder;
- InvalidGameView(0,0,0,0);
- }
-
- //
- void CGameClientView::SetGangScore( WORD wChairId, BYTE cbXiaYu, LONGLONG lGangScore[GAME_PLAYER] )
- {
- CopyMemory( m_lGangScore,lGangScore,sizeof(m_lGangScore) );
- m_wGangChairId = wChairId;
- m_cbXiaYu = cbXiaYu;
- for( WORD i = 0; i < GAME_PLAYER; i++ )
- {
- if( m_lGangScore[i] != 0 )
- {
- m_nYGangStep = 0;
- m_cbGangIndex = 0;
- SetTimer( IDI_GANG_SOCRE,TIME_GANG_SCORE,NULL );
- InvalidGameView(0,0,0,0);
- break;
- }
- }
- }
-
- //绘画数字
- void CGameClientView::DrawNumberString( CDC *pDC, CPngImage &PngNumber, int nXPos, int nYPos, LONGLONG lNumber, bool bDrawCenter, bool bDrawSign )
- {
- int nWidthNumber = PngNumber.GetWidth()/12;
- int nHeightNumber = PngNumber.GetHeight();
-
- int nXDrawPos = nXPos, nYDrawPos = nYPos;
- nYDrawPos -= nHeightNumber/2;
-
- TCHAR szNum[256] = {0};
- _sntprintf(szNum,CountArray(szNum),TEXT("%+I64d"),lNumber);
-
- if( bDrawCenter )
- {
- nXDrawPos -= (lstrlen(szNum)+(bDrawSign?0:-1))*nWidthNumber/2;
- }
-
- //正负号
- if( bDrawSign )
- {
- PngNumber.DrawImage( pDC,nXDrawPos,nYDrawPos,nWidthNumber,nHeightNumber,(lNumber<0?1:0)*nWidthNumber,0,
- nWidthNumber,nHeightNumber );
- nXDrawPos += nWidthNumber;
- }
-
- for( int i = 1; i < lstrlen(szNum); i++ )
- {
- if( ::isdigit(szNum[i]) )
- {
- PngNumber.DrawImage( pDC,nXDrawPos,nYDrawPos,nWidthNumber,nHeightNumber,(((int)szNum[i]-48)+2)*nWidthNumber,
- 0,nWidthNumber,nHeightNumber );
- }
- else
- {
- break;
- }
- nXDrawPos += nWidthNumber;
- }
- }
-
- //////////////////////////////////////////////////////////////////////////
|