诸暨麻将添加redis
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1092 rivejä
31 KiB

  1. #include "StdAfx.h"
  2. #include "Resource.h"
  3. #include "GameClientView.h"
  4. //////////////////////////////////////////////////////////////////////////
  5. //按钮标识
  6. #define IDC_START 100 //开始按钮
  7. #define IDC_TRUSTEE_CONTROL 104 //托管控制
  8. #define IDI_GANG_SOCRE 105 //
  9. //动作标识
  10. #define IDI_BOMB_EFFECT 101 //动作标识
  11. //动作数目
  12. #define BOMB_EFFECT_COUNT 12 //动作数目
  13. #define DISC_EFFECT_COUNT 8 //丢弃效果
  14. #define TIME_GANG_SCORE 70 //
  15. #define GANG_MOVE_COUNT 14 //
  16. #define TIME_CX 65
  17. #define TIME_CY 69
  18. #define BORDER_CX 0
  19. #define BORDER_CY 0
  20. //////////////////////////////////////////////////////////////////////////
  21. BEGIN_MESSAGE_MAP(CGameClientView, CGameFrameViewGDI)
  22. ON_WM_CREATE()
  23. ON_WM_SETCURSOR()
  24. ON_WM_LBUTTONDOWN()
  25. ON_BN_CLICKED(IDC_START, OnStart)
  26. ON_BN_CLICKED(IDC_TRUSTEE_CONTROL,OnStusteeControl)
  27. ON_WM_TIMER()
  28. END_MESSAGE_MAP()
  29. //////////////////////////////////////////////////////////////////////////
  30. //构造函数
  31. CGameClientView::CGameClientView()
  32. {
  33. //标志变量
  34. m_bOutCard=false;
  35. m_bWaitOther=false;
  36. ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
  37. m_wGangChairId = INVALID_CHAIR;
  38. //游戏属性
  39. m_lCellScore=0L;
  40. m_wBankerUser=INVALID_CHAIR;
  41. m_wCurrentUser=INVALID_CHAIR;
  42. ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
  43. //动作动画
  44. m_bBombEffect=false;
  45. m_cbBombFrameIndex=0;
  46. //丢弃效果
  47. m_wDiscUser=INVALID_CHAIR;
  48. m_cbDiscFrameIndex=0;
  49. //用户状态
  50. m_cbCardData=0;
  51. m_wOutCardUser=INVALID_CHAIR;
  52. ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
  53. ZeroMemory(m_bTrustee,sizeof(m_bTrustee));
  54. //加载位图
  55. HINSTANCE hInstance=AfxGetInstanceHandle();
  56. m_ImageWait.LoadFromResource(hInstance, IDB_WAIT_TIP);
  57. m_ImageBack.LoadFromResource(hInstance, IDB_VIEW_BACK);
  58. m_ImageUserFlag.LoadFromResource(hInstance, IDB_USER_FLAG);
  59. m_ImageOutCard.LoadFromResource(hInstance, IDB_OUT_CARD_TIP);
  60. m_ImageUserAction.LoadFromResource(hInstance, IDB_USER_ACTION);
  61. m_ImageActionBack.LoadFromResource(hInstance, IDB_ACTION_BACK);
  62. m_ImageTrustee.LoadImage(hInstance,TEXT("TRUSTEE"));
  63. m_ImageActionAni.LoadImage(AfxGetInstanceHandle(),TEXT("ActionAni"));
  64. m_ImageDisc.LoadImage(AfxGetInstanceHandle(),TEXT("DISC"));
  65. m_ImageArrow.LoadImage(AfxGetInstanceHandle(),TEXT("ARROW"));
  66. m_ImageCenter.LoadFromResource(hInstance, IDB_VIEW_CENTER);
  67. m_ImageWinOrder.LoadFromResource(hInstance, IDB_WIN_ORDER);
  68. m_ImageCellScore.LoadImage(AfxGetInstanceHandle(),TEXT("CELL_SCORE"));
  69. m_PngNumLost.LoadImage(AfxGetInstanceHandle(),TEXT("NUM_LOST"));
  70. m_PngNumWin.LoadImage(AfxGetInstanceHandle(),TEXT("NUM_WIN"));
  71. m_PngXiaYu.LoadImage(AfxGetInstanceHandle(),TEXT("XIAO_YU"));
  72. m_PngGuaFeng.LoadImage(AfxGetInstanceHandle(),TEXT("GUA_FENG"));
  73. return;
  74. }
  75. //析构函数
  76. CGameClientView::~CGameClientView(void)
  77. {
  78. }
  79. //建立消息
  80. int CGameClientView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  81. {
  82. if (__super::OnCreate(lpCreateStruct)==-1) return -1;
  83. //变量定义
  84. enDirection Direction[]={Direction_North,Direction_East,Direction_South,Direction_West};
  85. //设置控件
  86. for (WORD i=0;i<4;i++)
  87. {
  88. //用户扑克
  89. m_HeapCard[i].SetDirection(Direction[i]);
  90. m_TableCard[i].SetDirection(Direction[i]);
  91. m_DiscardCard[i].SetDirection(Direction[i]);
  92. //组合扑克
  93. m_WeaveCard[i][0].SetDisplayItem(true);
  94. m_WeaveCard[i][1].SetDisplayItem(true);
  95. m_WeaveCard[i][2].SetDisplayItem(true);
  96. m_WeaveCard[i][3].SetDisplayItem(true);
  97. m_WeaveCard[i][0].SetDirection(Direction[i]);
  98. m_WeaveCard[i][1].SetDirection(Direction[i]);
  99. m_WeaveCard[i][2].SetDirection(Direction[i]);
  100. m_WeaveCard[i][3].SetDirection(Direction[i]);
  101. }
  102. //设置控件
  103. m_UserCard[0].SetDirection(Direction_North);
  104. m_UserCard[1].SetDirection(Direction_East);
  105. m_UserCard[2].SetDirection(Direction_West);
  106. //创建控件
  107. CRect rcCreate(0,0,0,0);
  108. m_ControlWnd.Create(NULL,NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,10,NULL);
  109. m_DrawSiceWnd.Create(NULL,NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,11,NULL);
  110. //创建控件
  111. m_btStart.Create(NULL,WS_CHILD|WS_CLIPCHILDREN,rcCreate,this,IDC_START);
  112. m_btStart.SetButtonImage(IDB_BT_START,AfxGetInstanceHandle(),false,false);
  113. //托管按钮
  114. m_btStusteeControl.Create(TEXT(""),WS_CHILD|WS_DISABLED|WS_VISIBLE,rcCreate,this,IDC_TRUSTEE_CONTROL);
  115. m_btStusteeControl.SetButtonImage(IDB_BT_START_TRUSTEE,AfxGetInstanceHandle(),false,false);
  116. SetTimer(IDI_DISC_EFFECT,250,NULL);
  117. //test
  118. //m_btStart.ShowWindow( SW_SHOW );
  119. //BYTE byCard[] = {
  120. // 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
  121. // 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
  122. // 0x01,0x02,0x03,0x04,0x05,0x06
  123. //};
  124. //BYTE byCardCount = 14;
  125. //m_HandCardControl.SetDisplayItem(true);
  126. //m_HandCardControl.SetPositively(true);
  127. //m_HandCardControl.SetCardData(byCard,MAX_COUNT-1-3,byCard[MAX_COUNT-1]);
  128. //for( BYTE i = 0; i < GAME_PLAYER; i++ )
  129. //{
  130. // m_HeapCard[i].SetCardData(0,0,HEAP_FULL_COUNT);
  131. // m_TableCard[i].SetCardData(byCard,byCardCount);
  132. // m_DiscardCard[i].SetCardData(byCard,byCardCount);
  133. // m_WeaveCard[i][0].SetCardData(byCard,3);
  134. // if( i < 3 )
  135. // m_UserCard[i].SetCardData(MAX_COUNT-1,false);
  136. // m_bTrustee[i] = true;
  137. // m_cbUserAction[i] = WIK_PENG;
  138. // m_cbWinOrder[i] = i+1;
  139. //}
  140. //m_bWaitOther = true;
  141. //m_bOutCard = true;
  142. //m_wOutCardUser = 0;
  143. //m_cbCardData = 0x01;
  144. //m_cbUserAction[0] = WIK_NULL;
  145. //m_wDiscUser = 1;
  146. //SetBombEffect(true);
  147. //tagScoreInfo si;
  148. //ZeroMemory( &si,sizeof(si) );
  149. //for( WORD i = 0; i < GAME_PLAYER; i++ )
  150. // lstrcpy( si.szUserName[i],TEXT("杨杨得意") );
  151. //for( WORD i = 0; i < GAME_PLAYER; i++ )
  152. //{
  153. // si.wMeChairId = i;
  154. // si.cbGenCount = i+1;
  155. // si.cbWinOrder= i+1;
  156. // if( i%2==0 )
  157. // {
  158. // si.dwChiHuRight[0] = CHR_QING_LONG_QI_DUI;
  159. // si.lGameScore = 1234L;
  160. // }
  161. // else si.lGameScore = -1234L;
  162. // si.wLostFanShu[(i+1)%GAME_PLAYER] = 5;
  163. // si.wLostFanShu[(i+2)%GAME_PLAYER] = 6;
  164. // si.lGameTax = 1234L;
  165. // si.lGangScore = 124L;
  166. // si.wProvideUser = 3;
  167. // m_ScoreControl[i].SetScoreInfo( si );
  168. //}
  169. //end test
  170. return 0;
  171. }
  172. //重置界面
  173. void CGameClientView::ResetGameView()
  174. {
  175. //标志变量
  176. m_bOutCard=false;
  177. m_bWaitOther=false;
  178. ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
  179. m_wGangChairId = INVALID_CHAIR;
  180. //游戏属性
  181. m_lCellScore=0L;
  182. m_wBankerUser=INVALID_CHAIR;
  183. m_wCurrentUser=INVALID_CHAIR;
  184. ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
  185. //动作动画
  186. m_bBombEffect=false;
  187. m_cbBombFrameIndex=0;
  188. //丢弃效果
  189. m_wDiscUser=INVALID_CHAIR;
  190. m_cbDiscFrameIndex=0;
  191. //用户状态
  192. m_cbCardData=0;
  193. m_wOutCardUser=INVALID_CHAIR;
  194. ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
  195. //界面设置
  196. m_btStart.ShowWindow(SW_HIDE);
  197. m_ControlWnd.ShowWindow(SW_HIDE);
  198. for( WORD i = 0; i < GAME_PLAYER; i++ )
  199. m_ScoreControl[i].RestorationData();
  200. //禁用控件
  201. m_btStusteeControl.EnableWindow(FALSE);
  202. //扑克设置
  203. m_UserCard[0].SetCardData(0,false);
  204. m_UserCard[1].SetCardData(0,false);
  205. m_UserCard[2].SetCardData(0,false);
  206. m_HandCardControl.SetPositively(false);
  207. m_HandCardControl.SetDisplayItem(false);
  208. m_HandCardControl.SetCardData(NULL,0,0);
  209. //扑克设置
  210. for (WORD i=0;i<GAME_PLAYER;i++)
  211. {
  212. m_HeapCard[i].SetCardData(0,0,0);
  213. m_TableCard[i].SetCardData(NULL,0);
  214. m_DiscardCard[i].SetCardData(NULL,0);
  215. m_WeaveCard[i][0].SetCardData(NULL,0);
  216. m_WeaveCard[i][1].SetCardData(NULL,0);
  217. m_WeaveCard[i][2].SetCardData(NULL,0);
  218. m_WeaveCard[i][3].SetCardData(NULL,0);
  219. }
  220. //销毁定时器
  221. KillTimer(IDI_DISC_EFFECT);
  222. KillTimer(IDI_BOMB_EFFECT);
  223. return;
  224. }
  225. //调整控件
  226. void CGameClientView::RectifyControl(int nWidth, int nHeight)
  227. {
  228. //设置坐标
  229. m_ptAvatar[0].x=nWidth/2-FACE_CX;
  230. m_ptAvatar[0].y=nHeight/2 - 280;
  231. m_ptNickName[0].x=nWidth/2+5;
  232. m_ptNickName[0].y=nHeight/2 - 280 + 15;
  233. m_ptClock[0].x=nWidth/2-FACE_CX-TIME_CX-2;
  234. m_ptClock[0].y=17+BORDER_CY;
  235. m_ptReady[0].x=nWidth/2-FACE_CX-TIME_CX*2-5 + 130;
  236. m_ptReady[0].y=nHeight/2 - 280+TIME_CY/2 + 40;
  237. m_UserFlagPos[0].x=nWidth/2-FACE_CX-TIME_CX-32;
  238. m_UserFlagPos[0].y=nHeight/2 - 280;
  239. m_PointTrustee[0].x=nWidth/2-FACE_CX-20-FACE_CX/2;
  240. m_PointTrustee[0].y=nHeight/2 - 280;
  241. m_ptWinOrder[0].x=nWidth/2-FACE_CX/2-150;
  242. m_ptWinOrder[0].y=nHeight/2 - 280+18;
  243. m_ptGangScore[0].x = m_ptAvatar[0].x+16;
  244. m_ptGangScore[0].y = m_ptAvatar[0].y+100;
  245. m_ScoreControl[0].SetBenchmarkPos( nWidth/2-120,nHeight/2-250 );
  246. m_ptAvatar[1].x=nWidth-BORDER_CX-FACE_CX-5;
  247. m_ptAvatar[1].y=nHeight/2-FACE_CY-50;
  248. m_ptNickName[1].x=nWidth-BORDER_CX-5;
  249. m_ptNickName[1].y=nHeight/2-45;
  250. m_ptClock[1].x=nWidth-BORDER_CX-FACE_CX+5;
  251. m_ptClock[1].y=nHeight/2-FACE_CY-27-TIME_CY;
  252. m_ptReady[1].x=nWidth-BORDER_CX-TIME_CX+3;
  253. m_ptReady[1].y=nHeight/2-FACE_CY-55-TIME_CY/2+FACE_CY*2+40;
  254. m_UserFlagPos[1].x=nWidth-BORDER_CX-TIME_CX+8;
  255. m_UserFlagPos[1].y=nHeight/2-FACE_CY-83-TIME_CY;
  256. m_PointTrustee[1].x=nWidth-BORDER_CX-TIME_CX+8;
  257. m_PointTrustee[1].y=nHeight/2-FACE_CY-50-35;
  258. m_ptWinOrder[1].x=nWidth-BORDER_CX-5-18;
  259. m_ptWinOrder[1].y=nHeight/2+FACE_CY/2-20;
  260. m_ptGangScore[1].x = m_ptAvatar[1].x - 100;
  261. m_ptGangScore[1].y = m_ptAvatar[1].y + 16;
  262. m_ScoreControl[1].SetBenchmarkPos( nWidth/2+100,nHeight/2-90 );
  263. m_ptAvatar[2].x=nWidth/2-FACE_CX;
  264. m_ptAvatar[2].y=nHeight/2+350-FACE_CY;
  265. m_ptNickName[2].x=nWidth/2+5+FACE_CX/2;
  266. m_ptNickName[2].y=nHeight/2+350-FACE_CY+8;
  267. m_ptClock[2].x=nWidth/2-FACE_CX/2-TIME_CX-2;
  268. m_ptClock[2].y=nHeight/2+350-TIME_CY-8+40;
  269. m_ptReady[2].x=nWidth/2-TIME_CX*2-FACE_CX/2-5 +130;
  270. m_ptReady[2].y = nHeight/2 + 350 - TIME_CY/2 - 10 - 40;
  271. m_UserFlagPos[2].x=nWidth/2-FACE_CX-TIME_CX-32;
  272. m_UserFlagPos[2].y=nHeight/2+350-35;
  273. m_PointTrustee[2].x=nWidth/2-FACE_CX-20-FACE_CX/2;
  274. m_PointTrustee[2].y=nHeight/2+350-FACE_CY-5;
  275. m_ptWinOrder[2].x=nWidth/2-FACE_CX/2-120;
  276. m_ptWinOrder[2].y=nHeight/2+350-5-16;
  277. m_ptGangScore[2].x = m_ptAvatar[2].x + 16;
  278. m_ptGangScore[2].y = m_ptAvatar[2].y - 100;
  279. m_ScoreControl[2].SetBenchmarkPos( nWidth/2-120,nHeight/2+70 );
  280. m_ptAvatar[3].x=BORDER_CX+5;
  281. m_ptAvatar[3].y=nHeight/2-FACE_CY-50;
  282. m_ptNickName[3].x=BORDER_CX+5;
  283. m_ptNickName[3].y=nHeight/2-45;
  284. m_ptClock[3].x=BORDER_CX+22;
  285. m_ptClock[3].y=nHeight/2-FACE_CY-27-TIME_CY;
  286. m_ptReady[3].x=BORDER_CX-2+TIME_CX;
  287. m_ptReady[3].y=nHeight/2-FACE_CY-55-TIME_CY/2+FACE_CY*2+40;
  288. m_UserFlagPos[3].x=BORDER_CX+8;
  289. m_UserFlagPos[3].y=nHeight/2-FACE_CY-83-TIME_CY;
  290. m_PointTrustee[3].x=BORDER_CX+5;
  291. m_PointTrustee[3].y=nHeight/2-FACE_CY-50-35;
  292. m_ptWinOrder[3].x=BORDER_CX+5+18;
  293. m_ptWinOrder[3].y=nHeight/2+FACE_CY/2-20;;
  294. m_ptGangScore[3].x = m_ptAvatar[3].x + 100;
  295. m_ptGangScore[3].y = m_ptAvatar[3].y + 16;
  296. m_ScoreControl[3].SetBenchmarkPos( nWidth/2-260,nHeight/2-90 );
  297. int nXCenter=nWidth/2;
  298. int nYCenter=nHeight/2-40;
  299. //用户扑克
  300. m_UserCard[0].SetControlPoint(nXCenter-200 - 23,nYCenter-213 - 60 + 96); //上
  301. m_UserCard[1].SetControlPoint(nXCenter+238+60 - 32 ,nHeight/2-255 + 135 - 10);//右
  302. m_UserCard[2].SetControlPoint(nXCenter-276-80 + 32,nHeight/2+177 + 7);//左
  303. m_HandCardControl.SetBenchmarkPos(nWidth/2 - 5,nYCenter + 400-FACE_CY-BORDER_CY-5 - 16,enXCenter,enYBottom);
  304. //桌面扑克
  305. m_TableCard[0].SetControlPoint(nWidth/2-179 - 36,nYCenter-213 - 60 + 94);//上
  306. m_TableCard[1].SetControlPoint(nXCenter+238+60 - 6,nHeight/2-125 + 34);//右
  307. m_TableCard[2].SetControlPoint(nWidth/2+185 + 16,nYCenter + 400-FACE_CY-BORDER_CY-15 - 26);//下
  308. m_TableCard[3].SetControlPoint(nXCenter-276-80 + 5,nHeight/2+125);//左
  309. //堆积扑克
  310. m_HeapCard[0].SetControlPoint(nXCenter-200 - 2,nYCenter-213 + 87 - 15); //上
  311. m_HeapCard[1].SetControlPoint(nXCenter+238 - 52 + 5,nYCenter-140 + 89); //右
  312. m_HeapCard[2].SetControlPoint(nXCenter-189 - 52 + 19,nYCenter+213-5 - 4); //下
  313. m_HeapCard[3].SetControlPoint(nXCenter-276 + 35 - 5,nYCenter-135 + 84 ); //左
  314. //丢弃扑克
  315. m_DiscardCard[0].SetControlPoint(nXCenter-175 + 55 - 2,nYCenter-100+12 + 49); //上
  316. m_DiscardCard[1].SetControlPoint(nXCenter+103 - 15,nYCenter-64+12 + 35); //右
  317. m_DiscardCard[2].SetControlPoint(nXCenter+150 - 60 + 12,nYCenter+112+12 + 6); //下
  318. m_DiscardCard[3].SetControlPoint(nXCenter-137 - 24 - 2,nYCenter+76+12 + 21); //左
  319. //组合扑克 上
  320. m_WeaveCard[0][0].SetControlPoint(nWidth/2+195 - 50 - 97*0,nYCenter-213 - 60 + 96 + 60);
  321. m_WeaveCard[0][1].SetControlPoint(nWidth/2+195 - 50 - 97*1,nYCenter-213 - 60 + 96 + 60);
  322. m_WeaveCard[0][2].SetControlPoint(nWidth/2+195 - 50 - 97*2,nYCenter-213 - 60 + 96 + 60);
  323. m_WeaveCard[0][3].SetControlPoint(nWidth/2+195 - 50 - 97*3,nYCenter-213 - 60 + 96 + 60);
  324. //组合扑克 右
  325. m_WeaveCard[1][0].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*0,nHeight/2+130 - 30 + 23 - 57*0);
  326. m_WeaveCard[1][1].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*1,nHeight/2+130 - 30 + 23 - 57*1);
  327. m_WeaveCard[1][2].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*2,nHeight/2+130 - 30 + 23 - 57*2);
  328. m_WeaveCard[1][3].SetControlPoint(nXCenter+238+44 + 33 - 26 - 10*3,nHeight/2+130 - 30 + 23 - 57*3);
  329. //组合扑克 下
  330. m_WeaveCard[2][0].SetControlPoint(nWidth/2-240 + 43 + 108*0,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
  331. m_WeaveCard[2][1].SetControlPoint(nWidth/2-240 + 43 + 108*1,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
  332. m_WeaveCard[2][2].SetControlPoint(nWidth/2-240 + 43 + 108*2,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
  333. m_WeaveCard[2][3].SetControlPoint(nWidth/2-240 + 43 + 108*3,nYCenter + 400-FACE_CY-BORDER_CY-73 - 4);
  334. //组合扑克 左
  335. m_WeaveCard[3][0].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*0,nHeight/2-210 +30 + 124 + 57*0);
  336. m_WeaveCard[3][1].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*1,nHeight/2-210 +30 + 124 + 57*1);
  337. m_WeaveCard[3][2].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*2,nHeight/2-210 +30 + 124 + 57*2);
  338. m_WeaveCard[3][3].SetControlPoint(nXCenter-276-23 + 33 + 31 - 10*3,nHeight/2-210 +30 + 124 + 57*3);
  339. //控制窗口
  340. m_ControlWnd.SetBenchmarkPos(nWidth/2+298,nHeight-BORDER_CY-120);
  341. //色子窗口
  342. CRect rcSice;
  343. m_DrawSiceWnd.GetWindowRect(&rcSice);
  344. m_DrawSiceWnd.SetBenchmarkPos((nWidth-rcSice.Width())/2,(nHeight-rcSice.Height())/2);
  345. m_DrawSiceWnd.MoveWindow((nWidth-rcSice.Width())/2,(nHeight-rcSice.Height())/2,rcSice.Width(),rcSice.Height());
  346. //移动按钮
  347. CRect rcButton;
  348. HDWP hDwp=BeginDeferWindowPos(32);
  349. m_btStart.GetWindowRect(&rcButton);
  350. const UINT uFlags=SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS|SWP_NOSIZE;
  351. //移动调整
  352. DeferWindowPos(hDwp,m_btStart,NULL,(nWidth-rcButton.Width())/2,nHeight/2 + 270,0,0,uFlags);
  353. //DeferWindowPos(hDwp,m_btStart,NULL,(nWidth-rcButton.Width())/2,nHeight/2+70,0,0,uFlags);
  354. //移动调整
  355. DeferWindowPos(hDwp,m_btStusteeControl,NULL,nWidth-BORDER_CX-(rcButton.Width()+5),nHeight-BORDER_CY-rcButton.Height(),0,0,uFlags);
  356. //结束移动
  357. EndDeferWindowPos(hDwp);
  358. return;
  359. }
  360. //绘画界面
  361. void CGameClientView::DrawGameView(CDC * pDC, int nWidth, int nHeight)
  362. {
  363. //绘画背景
  364. DrawViewImage(pDC,m_ImageBack,DRAW_MODE_SPREAD);
  365. DrawViewImage(pDC,m_ImageCenter,DRAW_MODE_CENTENT);
  366. //单元积分
  367. m_ImageCellScore.DrawImage( pDC,BORDER_CX+5,BORDER_CY+5 );
  368. TCHAR szBuffer[32] = TEXT("");
  369. _sntprintf( szBuffer,CountArray(szBuffer),TEXT("%I64d"),m_lCellScore );
  370. DrawTextString( pDC,szBuffer,RGB(255,255,255),RGB(0,0,0),BORDER_CX+5+56,BORDER_CY+5+12,true );
  371. //绘画用户
  372. pDC->SetTextColor(RGB(255,255,0));
  373. for (WORD i=0;i<GAME_PLAYER;i++)
  374. {
  375. //变量定义
  376. IClientUserItem * pUserData=GetClientUserItem(i);
  377. //test
  378. //tagUserData *pUserData = new tagUserData;
  379. //lstrcpy(pUserData->szName,TEXT("SSSSSssssssssssss"));
  380. //pUserData->cbUserStatus = US_READY;
  381. //end test
  382. if (pUserData!=NULL)
  383. {
  384. //用户名字
  385. pDC->SetTextAlign((i==1)?(TA_RIGHT|TA_TOP):(TA_LEFT|TA_TOP));
  386. DrawTextString(pDC, pUserData->GetNickName(), RGB(255,255,255), RGB(0,0,0), m_ptNickName[i].x, m_ptNickName[i].y, false);
  387. //胡牌先后
  388. if( m_cbWinOrder[i] != 0 )
  389. {
  390. INT nWinOrderWidth = m_ImageWinOrder.GetWidth()/4;
  391. INT nWinOrderHeight = m_ImageWinOrder.GetHeight();
  392. m_ImageWinOrder.TransDrawImage( pDC,m_ptWinOrder[i].x-nWinOrderWidth/2,m_ptWinOrder[i].y-nWinOrderHeight/2,
  393. nWinOrderWidth,nWinOrderHeight,(m_cbWinOrder[i]-1)*nWinOrderWidth,0,RGB(255,0,255) );
  394. }
  395. //其他信息
  396. WORD wUserTimer=GetUserClock(i);
  397. //test
  398. //wUserTimer = 30;
  399. //end test
  400. if ((wUserTimer!=0)&&(m_wCurrentUser!=INVALID_CHAIR))
  401. {
  402. DrawUserClock(pDC,nWidth/2,nHeight/2 + 24,wUserTimer);
  403. if(m_wCurrentUser==0)
  404. m_ImageArrow.DrawImage(pDC,
  405. nWidth/2-15, //X坐标
  406. nHeight/2-m_ImageArrow.GetHeight()*2 + 24, //Y坐标
  407. m_ImageArrow.GetWidth()/4, //宽
  408. m_ImageArrow.GetHeight(), //高
  409. m_ImageArrow.GetWidth()/4*m_wCurrentUser,//起始位置X
  410. 0);
  411. if(m_wCurrentUser==1)
  412. 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);
  413. if(m_wCurrentUser==2)
  414. 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);
  415. if(m_wCurrentUser==3)
  416. 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);
  417. }
  418. if((wUserTimer!=0)&&(m_wCurrentUser==INVALID_CHAIR))
  419. {
  420. DrawUserClock(pDC,nWidth/2,nHeight/2,wUserTimer);
  421. if(i==0)
  422. 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);
  423. if(i==1)
  424. 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);
  425. if(i==2)
  426. 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);
  427. if(i==3)
  428. 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);
  429. }
  430. if (pUserData->GetUserStatus() == US_READY)
  431. {
  432. DrawUserReady(pDC,m_ptReady[i].x,m_ptReady[i].y);
  433. }
  434. DrawUserAvatar(pDC,m_ptAvatar[i].x,m_ptAvatar[i].y,pUserData);
  435. //托管
  436. if(m_bTrustee[i])
  437. {
  438. m_ImageTrustee.DrawImage(pDC,m_PointTrustee[i].x,m_PointTrustee[i].y);
  439. }
  440. }
  441. //test
  442. //delete pUserData;
  443. //end test
  444. }
  445. //用户标志
  446. if (m_wBankerUser!=INVALID_CHAIR)
  447. {
  448. //加载位图
  449. int nImageWidth=m_ImageUserFlag.GetWidth()/4;
  450. int nImageHeight=m_ImageUserFlag.GetHeight();
  451. //绘画标志
  452. for (WORD i=0;i<GAME_PLAYER;i++)
  453. {
  454. WORD wIndex=((i+GAME_PLAYER)-m_wBankerUser)%GAME_PLAYER;
  455. m_ImageUserFlag.TransDrawImage(pDC,m_UserFlagPos[i].x,m_UserFlagPos[i].y,nImageWidth,nImageHeight,nImageWidth*wIndex,0,RGB(255,0,255));
  456. }
  457. }
  458. //用户扑克
  459. m_UserCard[0].DrawCardControl(pDC);
  460. m_TableCard[0].DrawCardControl(pDC);
  461. //组合
  462. m_WeaveCard[0][0].DrawCardControl(pDC);
  463. m_WeaveCard[0][1].DrawCardControl(pDC);
  464. m_WeaveCard[0][2].DrawCardControl(pDC);
  465. m_WeaveCard[0][3].DrawCardControl(pDC);
  466. m_HeapCard[0].DrawCardControl(pDC); //上
  467. //桌面扑克
  468. m_TableCard[1].DrawCardControl(pDC);
  469. m_TableCard[2].DrawCardControl(pDC);
  470. m_TableCard[3].DrawCardControl(pDC);
  471. //for (WORD i=0;i<4;i++)
  472. //{
  473. // m_TableCard[i].DrawCardControl(pDC); //桌子上的
  474. // //m_DiscardCard[i].DrawCardControl(pDC); //丢的
  475. //}
  476. m_UserCard[1].DrawCardControl(pDC);
  477. //组合
  478. m_WeaveCard[1][3].DrawCardControl(pDC);
  479. m_WeaveCard[1][2].DrawCardControl(pDC);
  480. m_WeaveCard[1][1].DrawCardControl(pDC);
  481. m_WeaveCard[1][0].DrawCardControl(pDC);
  482. //组合
  483. m_WeaveCard[2][0].DrawCardControl(pDC);
  484. m_WeaveCard[2][1].DrawCardControl(pDC);
  485. m_WeaveCard[2][2].DrawCardControl(pDC);
  486. m_WeaveCard[2][3].DrawCardControl(pDC);
  487. //组合
  488. m_WeaveCard[3][0].DrawCardControl(pDC);
  489. m_WeaveCard[3][1].DrawCardControl(pDC);
  490. m_WeaveCard[3][2].DrawCardControl(pDC);
  491. m_WeaveCard[3][3].DrawCardControl(pDC);
  492. //丢弃牌
  493. m_DiscardCard[0].DrawCardControl(pDC); //丢的
  494. m_DiscardCard[1].DrawCardControl(pDC); //丢的
  495. m_DiscardCard[3].DrawCardControl(pDC); //丢的
  496. m_DiscardCard[2].DrawCardControl(pDC); //丢的
  497. //堆积扑克
  498. m_HeapCard[3].DrawCardControl(pDC); //左
  499. //m_HeapCard[0].DrawCardControl(pDC); //上
  500. m_HeapCard[1].DrawCardControl(pDC); //右
  501. m_HeapCard[2].DrawCardControl(pDC); //下
  502. //用户扑克
  503. //m_UserCard[0].DrawCardControl(pDC);
  504. //m_UserCard[1].DrawCardControl(pDC);
  505. m_UserCard[2].DrawCardControl(pDC);
  506. m_HandCardControl.DrawCardControl(pDC);
  507. //出牌提示
  508. if (m_bOutCard==true)
  509. {
  510. m_ImageOutCard.TransDrawImage(pDC,(nWidth-m_ImageOutCard.GetWidth())/2,nHeight/2-40 + 400-145,RGB(255,0,255));
  511. }
  512. //等待提示
  513. if (m_bWaitOther==true)
  514. {
  515. m_ImageWait.TransDrawImage(pDC,(nWidth-m_ImageWait.GetWidth())/2,nHeight-145,RGB(255,0,255));
  516. }
  517. //用户状态
  518. for (WORD i=0;i<GAME_PLAYER;i++)
  519. {
  520. if ((m_wOutCardUser==i)||(m_cbUserAction[i]!=0))
  521. {
  522. //计算位置
  523. int nXPos=0,nYPos=0;
  524. switch (i)
  525. {
  526. case 0: //北向 上
  527. {
  528. nXPos=nWidth/2 - 22;
  529. nYPos=nHeight/2 - 100 - 100 - 20;
  530. break;
  531. }
  532. case 1: //东向 右
  533. {
  534. nXPos=nWidth/2 - 52 + 100 + 200;
  535. nYPos=nHeight/2 - 45;
  536. break;
  537. }
  538. case 2: //南向 下
  539. {
  540. nXPos=nWidth/2 - 22;
  541. nYPos=nHeight/2 + 100 + 100 - 50;
  542. break;
  543. }
  544. case 3: //西向 左
  545. {
  546. nXPos=nWidth/2 - 22 - 100 - 200;
  547. nYPos=nHeight/2 - 45;
  548. break;
  549. }
  550. }
  551. //绘画动作
  552. if (m_cbUserAction[i]!=WIK_NULL)
  553. {
  554. //绘画动作
  555. if (m_bBombEffect==true)
  556. {
  557. //绘画效果
  558. INT nItemHeight=m_ImageActionAni.GetHeight()/6;
  559. INT nItemWidth=m_ImageActionAni.GetWidth()/BOMB_EFFECT_COUNT;
  560. //绘画动作
  561. int nYImagePos=0;
  562. if (m_cbUserAction[i]&WIK_PENG) nYImagePos=nItemHeight;
  563. else if (m_cbUserAction[i]&WIK_GANG) nYImagePos=nItemHeight*2;
  564. else if (m_cbUserAction[i]==WIK_CHI_HU) nYImagePos=nItemHeight*4;
  565. else if (m_cbUserAction[i]&WIK_ZI_MO) nYImagePos=nItemHeight*5;
  566. else nYImagePos=0;
  567. m_ImageActionAni.DrawImage(pDC,nXPos-nItemWidth/2+54,nYPos+42-nItemHeight/2,nItemWidth,nItemHeight,
  568. nItemWidth*(m_cbBombFrameIndex%BOMB_EFFECT_COUNT),nYImagePos,nItemWidth,nItemHeight);
  569. }
  570. }
  571. else
  572. {
  573. //动作背景
  574. m_ImageActionBack.BlendDrawImage(pDC,nXPos,nYPos,m_ImageActionBack.GetWidth(),m_ImageActionBack.GetHeight(),
  575. 0,0,RGB(255,0,255),180);
  576. //绘画扑克
  577. g_CardResource.m_ImageUserBottom.DrawCardItem(pDC,m_cbCardData,nXPos+15,nYPos+13);
  578. }
  579. }
  580. }
  581. //丢弃效果
  582. if(m_wDiscUser!=INVALID_CHAIR)
  583. {
  584. CSize SizeDisc(m_ImageDisc.GetWidth()/DISC_EFFECT_COUNT,m_ImageDisc.GetHeight());
  585. CPoint pt=m_DiscardCard[m_wDiscUser].GetLastCardPosition();
  586. pt.Offset(-SizeDisc.cx/2,-SizeDisc.cy);
  587. //绘画信息
  588. m_ImageDisc.DrawImage(pDC,pt.x,pt.y,SizeDisc.cx,SizeDisc.cy,
  589. m_cbDiscFrameIndex*SizeDisc.cx,0,SizeDisc.cx,SizeDisc.cy);
  590. }
  591. //绘画成绩框
  592. for( WORD i = 0; i < GAME_PLAYER; i++ )
  593. m_ScoreControl[i].DrawScoreControl( pDC );
  594. //杠牌得分动画
  595. if( m_wGangChairId != INVALID_CHAIR )
  596. {
  597. //刮风下雨动画
  598. if( m_cbXiaYu )
  599. {
  600. int nImageWidth = m_PngXiaYu.GetWidth()/4;
  601. int nImageHeight = m_PngXiaYu.GetHeight();
  602. m_PngXiaYu.DrawImage( pDC,m_ptGangScore[m_wGangChairId].x,m_ptGangScore[m_wGangChairId].y,
  603. nImageWidth,nImageHeight,nImageWidth*m_cbGangIndex,0,nImageWidth,nImageHeight );
  604. }
  605. else
  606. {
  607. int nImageWidth = m_PngGuaFeng.GetWidth()/4;
  608. int nImageHeight = m_PngGuaFeng.GetHeight();
  609. m_PngGuaFeng.DrawImage( pDC,m_ptGangScore[m_wGangChairId].x,m_ptGangScore[m_wGangChairId].y,
  610. nImageWidth,nImageHeight,nImageWidth*m_cbGangIndex,0,nImageWidth,nImageHeight );
  611. }
  612. for( WORD i = 0; i < GAME_PLAYER; i++ )
  613. {
  614. if( m_lGangScore[i] > 0 )
  615. DrawNumberString( pDC,m_PngNumWin,m_ptGangScore[i].x,m_ptGangScore[i].y-m_nYGangStep*3,m_lGangScore[i],true,true );
  616. else DrawNumberString( pDC,m_PngNumLost,m_ptGangScore[i].x,m_ptGangScore[i].y-m_nYGangStep*3,m_lGangScore[i],true,true );
  617. }
  618. }
  619. return;
  620. }
  621. //基础积分
  622. void CGameClientView::SetCellScore(LONGLONG lCellScore)
  623. {
  624. //设置扑克
  625. if (lCellScore!=m_lCellScore)
  626. {
  627. //设置变量
  628. m_lCellScore=lCellScore;
  629. //更新界面
  630. InvalidGameView(0,0,0,0);
  631. }
  632. return;
  633. }
  634. //庄家用户
  635. void CGameClientView::SetBankerUser(WORD wBankerUser)
  636. {
  637. //设置用户
  638. if (wBankerUser!=m_wBankerUser)
  639. {
  640. //设置变量
  641. m_wBankerUser=wBankerUser;
  642. //更新界面
  643. InvalidGameView(0,0,0,0);
  644. }
  645. return;
  646. }
  647. //状态标志
  648. void CGameClientView::SetStatusFlag(bool bOutCard, bool bWaitOther)
  649. {
  650. //设置变量
  651. m_bOutCard=bOutCard;
  652. m_bWaitOther=bWaitOther;
  653. //更新界面
  654. InvalidGameView(0,0,0,0);
  655. return;
  656. }
  657. //出牌信息
  658. void CGameClientView::SetOutCardInfo(WORD wViewChairID, BYTE cbCardData)
  659. {
  660. //设置变量
  661. m_cbCardData=cbCardData;
  662. m_wOutCardUser=wViewChairID;
  663. //更新界面
  664. InvalidGameView(0,0,0,0);
  665. return;
  666. }
  667. //动作信息
  668. void CGameClientView::SetUserAction(WORD wViewChairID, BYTE bUserAction)
  669. {
  670. //设置变量
  671. if (wViewChairID<GAME_PLAYER)
  672. {
  673. m_cbUserAction[wViewChairID]=bUserAction;
  674. SetBombEffect(true);
  675. }
  676. else
  677. {
  678. ZeroMemory(m_cbUserAction,sizeof(m_cbUserAction));
  679. if(m_bBombEffect)
  680. SetBombEffect(false);
  681. }
  682. //更新界面
  683. InvalidGameView(0,0,0,0);
  684. return;
  685. }
  686. //设置动作
  687. bool CGameClientView::SetBombEffect(bool bBombEffect)
  688. {
  689. if (bBombEffect==true)
  690. {
  691. //设置变量
  692. m_bBombEffect=true;
  693. m_cbBombFrameIndex=0;
  694. //启动时间
  695. SetTimer(IDI_BOMB_EFFECT,250,NULL);
  696. }
  697. else
  698. {
  699. //停止动画
  700. if (m_bBombEffect==true)
  701. {
  702. //删除时间
  703. KillTimer(IDI_BOMB_EFFECT);
  704. //设置变量
  705. m_bBombEffect=false;
  706. m_cbBombFrameIndex=0;
  707. //更新界面
  708. InvalidGameView(0,0,0,0);
  709. }
  710. }
  711. return true;
  712. }
  713. //丢弃用户
  714. void CGameClientView::SetDiscUser(WORD wDiscUser)
  715. {
  716. if(m_wDiscUser != wDiscUser)
  717. {
  718. //更新变量
  719. m_wDiscUser=wDiscUser;
  720. //更新界面
  721. InvalidGameView(0,0,0,0);
  722. }
  723. return;
  724. }
  725. //定时玩家
  726. void CGameClientView::SetCurrentUser(WORD wCurrentUser)
  727. {
  728. if (m_wCurrentUser != wCurrentUser)
  729. {
  730. //更新变量
  731. m_wCurrentUser=wCurrentUser;
  732. //更新界面
  733. InvalidGameView(0,0,0,0);
  734. }
  735. return;
  736. }
  737. //设置托管
  738. void CGameClientView::SetTrustee(WORD wTrusteeUser,bool bTrustee)
  739. {
  740. //校验数据
  741. ASSERT(wTrusteeUser>=0&&wTrusteeUser<GAME_PLAYER);
  742. if(m_bTrustee[wTrusteeUser] !=bTrustee)
  743. {
  744. //设置数据
  745. m_bTrustee[wTrusteeUser]=bTrustee;
  746. //更新界面
  747. InvalidGameView(0,0,0,0);
  748. }
  749. return;
  750. }
  751. //艺术字体
  752. void CGameClientView::DrawTextString(CDC * pDC, LPCTSTR pszString, COLORREF crText, COLORREF crFrame, int nXPos, int nYPos, bool bDrawCenter)
  753. {
  754. //变量定义
  755. int nStringLength=lstrlen(pszString);
  756. int nXExcursion[8]={1,1,1,0,-1,-1,-1,0};
  757. int nYExcursion[8]={-1,0,1,1,1,0,-1,-1};
  758. if( bDrawCenter )
  759. {
  760. TEXTMETRIC tm;
  761. ZeroMemory( &tm,sizeof(tm) );
  762. GetTextMetrics(pDC->m_hDC,&tm );
  763. nXPos -= tm.tmAveCharWidth*nStringLength/2;
  764. nYPos -= tm.tmHeight/2;
  765. }
  766. //绘画边框
  767. pDC->SetTextColor(crFrame);
  768. for (int i=0;i<CountArray(nXExcursion);i++)
  769. {
  770. pDC->TextOut(nXPos+nXExcursion[i],nYPos+nYExcursion[i],pszString,nStringLength);
  771. }
  772. //绘画字体
  773. pDC->SetTextColor(crText);
  774. pDC->TextOut(nXPos,nYPos,pszString,nStringLength);
  775. return;
  776. }
  777. //光标消息
  778. BOOL CGameClientView::OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT uMessage)
  779. {
  780. //获取光标
  781. CPoint MousePoint;
  782. GetCursorPos(&MousePoint);
  783. ScreenToClient(&MousePoint);
  784. //点击测试
  785. bool bRePaint=false;
  786. bool bHandle=m_HandCardControl.OnEventSetCursor(MousePoint,bRePaint);
  787. //重画控制
  788. if (bRePaint==true)
  789. InvalidGameView(0,0,0,0);
  790. //光标控制
  791. if (bHandle==false)
  792. __super::OnSetCursor(pWnd,nHitTest,uMessage);
  793. return TRUE;
  794. }
  795. //鼠标消息
  796. void CGameClientView::OnLButtonDown(UINT nFlags, CPoint Point)
  797. {
  798. __super::OnLButtonDown(nFlags, Point);
  799. //获取扑克
  800. BYTE cbHoverCard=m_HandCardControl.GetHoverCard();
  801. if (cbHoverCard!=0)
  802. SendEngineMessage(IDM_OUT_CARD,cbHoverCard,cbHoverCard);
  803. //test
  804. //LONGLONG lGangScore[GAME_PLAYER] = { -12345,-12345,-12345,12345 };
  805. //SetGangScore(2,0, lGangScore );
  806. //end test
  807. return;
  808. }
  809. //开始按钮
  810. void CGameClientView::OnStart()
  811. {
  812. //发送消息
  813. SendEngineMessage(IDM_START,0,0);
  814. return;
  815. }
  816. //拖管控制
  817. void CGameClientView::OnStusteeControl()
  818. {
  819. SendEngineMessage(IDM_TRUSTEE_CONTROL,0,0);
  820. return;
  821. }
  822. //定时器
  823. void CGameClientView::OnTimer(UINT nIDEvent)
  824. {
  825. //动作动画
  826. if (nIDEvent==IDI_BOMB_EFFECT)
  827. {
  828. //停止判断
  829. if (m_bBombEffect==false)
  830. {
  831. KillTimer(IDI_BOMB_EFFECT);
  832. return;
  833. }
  834. //设置变量
  835. if ((m_cbBombFrameIndex+1)>=BOMB_EFFECT_COUNT)
  836. {
  837. //删除时间
  838. KillTimer(IDI_BOMB_EFFECT);
  839. //设置变量
  840. m_bBombEffect=false;
  841. m_cbBombFrameIndex=0;
  842. }
  843. else m_cbBombFrameIndex++;
  844. //更新界面
  845. InvalidGameView(0,0,0,0);
  846. return;
  847. }
  848. if (nIDEvent==IDI_DISC_EFFECT)
  849. {
  850. //设置变量
  851. if ((m_cbDiscFrameIndex+1)>=DISC_EFFECT_COUNT)
  852. {
  853. m_cbDiscFrameIndex=0;
  854. }
  855. else m_cbDiscFrameIndex++;
  856. //更新界面
  857. InvalidGameView(0,0,0,0);
  858. return;
  859. }
  860. else if( nIDEvent == IDI_GANG_SOCRE )
  861. {
  862. m_cbGangIndex = (m_cbGangIndex+1)%4;
  863. if( ++m_nYGangStep == GANG_MOVE_COUNT )
  864. {
  865. KillTimer( IDI_GANG_SOCRE );
  866. m_wGangChairId = INVALID_CHAIR;
  867. ZeroMemory( m_lGangScore,sizeof(m_lGangScore) );
  868. }
  869. InvalidGameView(0,0,0,0);
  870. return;
  871. }
  872. __super::OnTimer(nIDEvent);
  873. }
  874. //
  875. void CGameClientView::SetWinOrder( WORD wChairId, BYTE cbWinOrder )
  876. {
  877. if( wChairId == INVALID_CHAIR )
  878. ZeroMemory( m_cbWinOrder,sizeof(m_cbWinOrder) );
  879. else m_cbWinOrder[wChairId] = cbWinOrder;
  880. InvalidGameView(0,0,0,0);
  881. }
  882. //
  883. void CGameClientView::SetGangScore( WORD wChairId, BYTE cbXiaYu, LONGLONG lGangScore[GAME_PLAYER] )
  884. {
  885. CopyMemory( m_lGangScore,lGangScore,sizeof(m_lGangScore) );
  886. m_wGangChairId = wChairId;
  887. m_cbXiaYu = cbXiaYu;
  888. for( WORD i = 0; i < GAME_PLAYER; i++ )
  889. {
  890. if( m_lGangScore[i] != 0 )
  891. {
  892. m_nYGangStep = 0;
  893. m_cbGangIndex = 0;
  894. SetTimer( IDI_GANG_SOCRE,TIME_GANG_SCORE,NULL );
  895. InvalidGameView(0,0,0,0);
  896. break;
  897. }
  898. }
  899. }
  900. //绘画数字
  901. void CGameClientView::DrawNumberString( CDC *pDC, CPngImage &PngNumber, int nXPos, int nYPos, LONGLONG lNumber, bool bDrawCenter, bool bDrawSign )
  902. {
  903. int nWidthNumber = PngNumber.GetWidth()/12;
  904. int nHeightNumber = PngNumber.GetHeight();
  905. int nXDrawPos = nXPos, nYDrawPos = nYPos;
  906. nYDrawPos -= nHeightNumber/2;
  907. TCHAR szNum[256] = {0};
  908. _sntprintf(szNum,CountArray(szNum),TEXT("%+I64d"),lNumber);
  909. if( bDrawCenter )
  910. {
  911. nXDrawPos -= (lstrlen(szNum)+(bDrawSign?0:-1))*nWidthNumber/2;
  912. }
  913. //正负号
  914. if( bDrawSign )
  915. {
  916. PngNumber.DrawImage( pDC,nXDrawPos,nYDrawPos,nWidthNumber,nHeightNumber,(lNumber<0?1:0)*nWidthNumber,0,
  917. nWidthNumber,nHeightNumber );
  918. nXDrawPos += nWidthNumber;
  919. }
  920. for( int i = 1; i < lstrlen(szNum); i++ )
  921. {
  922. if( ::isdigit(szNum[i]) )
  923. {
  924. PngNumber.DrawImage( pDC,nXDrawPos,nYDrawPos,nWidthNumber,nHeightNumber,(((int)szNum[i]-48)+2)*nWidthNumber,
  925. 0,nWidthNumber,nHeightNumber );
  926. }
  927. else
  928. {
  929. break;
  930. }
  931. nXDrawPos += nWidthNumber;
  932. }
  933. }
  934. //////////////////////////////////////////////////////////////////////////