ChessDialog.c
上传用户:cssyzk
上传日期:2022-06-30
资源大小:54k
文件大小:9k
源码类别:

棋牌游戏

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : Dialog_All.c
  16. Purpose     : Example demonstrating DIALOG and widgets
  17. ----------------------------------------------------------------------
  18. */
  19. #include <stddef.h>
  20. #include "GUI.H"
  21. #include "DIALOG.h"
  22. #include "FRAMEWIN_Private.h"
  23. #include "MESSAGEBOX.h"
  24. #include "MENU.h"
  25. #include "FiveChess.h"
  26. #define NEW_GAME_ID 0x100
  27. #define EXIT_GAME_ID 0x101
  28. #define ABOUT_GAME_ID 0x102
  29. #define ABOUT_LAN_ID 0x103
  30. #define MAIN_GAME_ID 0x104
  31. #define MAIN_HELP_ID 0x105
  32. #define GAME_RESID 0
  33. #define GAME_HELP_RESID 1
  34. #define GAME_NEW_RESID 2
  35. #define GAME_EXIT_RESID 3
  36. #define GAME_ABOUT_RESID 4
  37. #define GAME_LAN_RESID 5
  38. #define GAME_MEWIN_RESID 3
  39. #define GAME_CWIN_RESID 4
  40. typedef struct{
  41. MENU_ITEM_DATA MenuData;
  42. int ResID;
  43. } MENU_ITEM_DATA_EXT;
  44. //所有用到的图片...
  45. void* qipanBmp, *whiteBmp, *blackBmp;
  46. extern const GUI_BITMAP bmwhite, bmqipan, bmblack;
  47. static void WinDialog_cbCallback(WM_MESSAGE * pMsg);
  48. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  49.   { FRAMEWIN_CreateIndirect, "FiveChess", 0,              10,  10, 400-20, 420-25, FRAMEWIN_SF_MOVEABLE, 0  },
  50. };
  51. //#ifdef LANGUAGE_EN
  52. int CurrentLan;
  53. static char* language[][2] = {
  54. {"Game", " 游戏"},
  55. {"Help", " 帮助"},
  56. {"New Game", " 新建游戏 "},
  57. {"Exit Game", " 退出游戏 "},
  58. {"About Game", " 关于 "},
  59. {"language", " 语言 "},
  60. {"You Win!", " 你胜了! "},
  61. {"Computer Win!", " 电脑胜了! "},
  62. };
  63. static  MENU_ITEM_DATA_EXT MainMenu[] = {
  64. {{"Game", MAIN_GAME_ID, 0, 0}, GAME_RESID},
  65. {{"Help", MAIN_HELP_ID, 0, 0}, GAME_HELP_RESID}
  66. };
  67. static  MENU_ITEM_DATA_EXT GameMenu[] = {
  68. {{"New Game", NEW_GAME_ID, 0, 0}, GAME_NEW_RESID},
  69. {{0, 0,  MENU_IF_SEPARATOR, 0}, -1},
  70. {{"Exit Game", EXIT_GAME_ID, 0, 0}, GAME_EXIT_RESID}
  71. };
  72. static  MENU_ITEM_DATA_EXT HelpMenu[] = {
  73. {{"About Game", ABOUT_GAME_ID, 0, 0}, GAME_ABOUT_RESID},
  74. {{"language", ABOUT_LAN_ID, 0, 0}, GAME_LAN_RESID}
  75. };
  76. /*
  77. static const MENU_ITEM_DATA MainMenu[] = {
  78. {"Game", 0, 0, 0},
  79. {"Help", 0, 0, 0},
  80. };
  81. static const MENU_ITEM_DATA GameMenu[] = {
  82. {"New Game", NEW_GAME_ID, 0, 0},
  83. {0, 0,  MENU_IF_SEPARATOR, 0},
  84. {"Exit Game", EXIT_GAME_ID, 0, 0},
  85. };
  86. static const MENU_ITEM_DATA HelpMenu[] = {
  87. {"About Game", ABOUT_GAME_ID, 0, 0},
  88. };
  89. typedef struct {
  90.   const char* pText;
  91.   U16         Id;
  92.   U16         Flags;
  93.   MENU_Handle hSubmenu;
  94. } MENU_ITEM_DATA;
  95. */
  96. WM_CALLBACK* OldCallback;
  97. extern GUI_FONT GUI_FontHZ_SimSun_13;
  98. #include "string.h"
  99. void ChangeLanguage(int index)
  100. {
  101. int i = 0, j = 0;
  102. for(j = 0; j < GUI_COUNTOF(HelpMenu); j++){
  103. for(i = 0; i < GUI_COUNTOF(language); i++){
  104. if(i == HelpMenu[j].ResID){
  105. HelpMenu[j].MenuData.pText = language[i][index];
  106. break;
  107. }
  108. }
  109. }
  110. for(j = 0; j < GUI_COUNTOF(GameMenu); j++){
  111. for(i = 0; i < GUI_COUNTOF(language); i++){
  112. if(i == GameMenu[j].ResID){
  113. GameMenu[j].MenuData.pText = language[i][index];
  114. break;
  115. }
  116. }
  117. }
  118. for(j = 0; j < GUI_COUNTOF(MainMenu); j++){
  119. for(i = 0; i < GUI_COUNTOF(language); i++){
  120. if(i == MainMenu[j].ResID){
  121. MainMenu[j].MenuData.pText = language[i][index];
  122. break;
  123. }
  124. }
  125. }
  126. }
  127. static void _AddMenuItem(MENU_Handle hMenu, MENU_Handle hSubmenu,  char* pText, U16 Id, U16 Flags) 
  128. {
  129.   MENU_ITEM_DATA Item;
  130.   Item.pText    = pText;
  131.   Item.hSubmenu = hSubmenu;
  132.   Item.Flags    = Flags;
  133.   Item.Id       = Id;
  134.   MENU_AddItem(hMenu, &Item);
  135. }
  136. static MENU_Handle _CreateMenu(WM_HWIN hWin) 
  137. {
  138. int i = 0;
  139. MENU_Handle hMenu, hMenuGame, hMenuHelp;
  140. // MENU_SetDefaultFont(&GUI_Font10_1);
  141. hMenuGame = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  142. for(i = 0; i < GUI_COUNTOF(GameMenu); i++){
  143. MENU_AddItem(hMenuGame, &GameMenu[i].MenuData);
  144. }
  145. hMenuHelp = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  146. for(i = 0; i < GUI_COUNTOF(HelpMenu); i++){
  147. MENU_AddItem(hMenuHelp, &HelpMenu[i].MenuData);
  148. }
  149. // Create main menu
  150. hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, 0);
  151. MainMenu[0].MenuData.hSubmenu = hMenuGame;
  152. MainMenu[1].MenuData.hSubmenu = hMenuHelp;
  153. for(i = 0; i < GUI_COUNTOF(MainMenu); i++){
  154. MENU_AddItem(hMenu, &MainMenu[i].MenuData);
  155. }
  156. return hMenu;
  157. }
  158. static void _MessageBox(const char* pText, const char* pCaption) 
  159. {
  160.   WM_HWIN hWin;
  161.   hWin = MESSAGEBOX_Create(pText, pCaption, GUI_MESSAGEBOX_CF_MOVEABLE);
  162.   WM_MakeModal(hWin);
  163.   GUI_ExecCreatedDialog(hWin);
  164. }
  165. MENU_Handle hMainMenu, hMainMenu2;
  166. static void OnMenuDeal(WM_MESSAGE* pMsg, WM_HWIN hWin)
  167. {
  168. MENU_MSG_DATA* pData = (MENU_MSG_DATA*)pMsg->Data.p;
  169. MENU_Handle    hMenu = pMsg->hWinSrc;
  170. switch (pData->MsgType)
  171. {
  172. case MENU_ON_ITEMSELECT:
  173. switch (pData->ItemId){
  174. case NEW_GAME_ID:
  175. // NewGame();
  176. WM_SelectWindow(WM_GetFirstChild(hWin));
  177. Game_Init();
  178. break;
  179. case EXIT_GAME_ID: 
  180. GUI_EndDialog(hWin, 1);
  181. // ExitGame();
  182. break;
  183. case ABOUT_GAME_ID:
  184. _MessageBox("UCGUI FiveChess Game!nEmail:ucgui@163.comnhttp://www.ucgui.com", "About");
  185. break;
  186. case ABOUT_LAN_ID:
  187. if(!CurrentLan){
  188. FRAMEWIN_AddMenu(hWin, hMainMenu2);
  189. CurrentLan = 1;
  190. }
  191. else{
  192. CurrentLan = 0; 
  193. FRAMEWIN_AddMenu(hWin, hMainMenu);
  194. }
  195. // _MessageBox("UCGUI FiveChess Game!nEmail:ucgui@163.comnhttp://www.ucgui.com", "About");
  196. break;
  197. }
  198. break;
  199. default:
  200. WM_DefaultProc(pMsg);
  201. }
  202. }
  203. static void _cbCallback(WM_MESSAGE * pMsg) 
  204. {
  205. GUI_PID_STATE* State;
  206. WM_HWIN hWinDlg;
  207. WM_HWIN hWin = pMsg->hWin;
  208. WM_HWIN hDialog = 0;
  209. //  FRAMEWIN_Obj* pObj;
  210. switch (pMsg->MsgId) {
  211. case WM_TOUCH:
  212. State = (GUI_PID_STATE*) pMsg->Data.p;
  213. if(State && !State->Pressed)
  214. {
  215. //The chess is paint to the dialog's client dlg, so select it, 
  216. //if select hWin will not be show chess...
  217. WM_SelectWindow(WM_GetFirstChild(hWin));
  218. if(My_work(State->x, State->y)==0)//如返回的是0,则说明玩家没有走,
  219. return;//则六即返回,让玩家重新输入
  220. if(Check_win()==1)//玩家赢了
  221. {
  222. hWinDlg = MESSAGEBOX_Create("   You Win!!!   ", "Win", GUI_MESSAGEBOX_CF_MOVEABLE);
  223. WM_MakeModal(hWinDlg);
  224. OldCallback = WM_SetCallback(WM_GetFirstChild(hWinDlg), WinDialog_cbCallback);
  225. GUI_ExecCreatedDialog(hWinDlg);
  226. }
  227. Computer_think();
  228. Computer_work();
  229. if(Check_win()==2)// 电脑赢了
  230. {
  231. hWinDlg = MESSAGEBOX_Create("   Computer Win!!!   ", "Failed", GUI_MESSAGEBOX_CF_MOVEABLE);
  232. WM_MakeModal(hWinDlg);
  233. OldCallback = WM_SetCallback(WM_GetFirstChild(hWinDlg), WinDialog_cbCallback);
  234. GUI_ExecCreatedDialog(hWinDlg);
  235. }
  236. }
  237. break;
  238. case WM_MENU:
  239. OnMenuDeal(pMsg, hWin);
  240. break;
  241. case WM_PAINT:
  242. Update_all();
  243. break;
  244. default:
  245. WM_DefaultProc(pMsg);
  246. }
  247. }
  248. static void WinDialog_cbCallback(WM_MESSAGE * pMsg)
  249. {
  250. WM_HWIN hWin = pMsg->hWin;
  251. //Add by ucgui 20051129. Because the parent hwnd should be close.
  252. WM_Obj *pWin;
  253. pWin = WM_H2P(hWin);  
  254. hWin = pWin->hParent;
  255. switch (pMsg->MsgId) {
  256.     case WM_KEY:
  257. {
  258. int Key = ((WM_KEY_INFO*)(pMsg->Data.p))->Key;
  259. switch (Key) {
  260. case GUI_KEY_ESCAPE:
  261. Game_Init();
  262. GUI_EndDialog(hWin, 1);             /* End dialog with return value 1 if <ESC> is pressed */
  263. break;
  264. case GUI_KEY_ENTER:
  265. Game_Init();
  266. GUI_EndDialog(hWin, 0);             /* End dialog with return value 0 if <ENTER> is pressed */
  267. break;
  268. }
  269. }
  270. break;
  271.     case WM_NOTIFY_PARENT:
  272. {
  273. int NCode = pMsg->Data.v;             /* Get notification code */
  274. int Id    = WM_GetId(pMsg->hWinSrc);  /* Get control ID */
  275. switch (NCode) {
  276. case WM_NOTIFICATION_RELEASED:      /* React only if released */
  277. if (Id == GUI_ID_OK) {
  278. Game_Init();
  279. GUI_EndDialog(hWin, 0);         /* End dialog with return value 0 if OK */
  280. }
  281. break;
  282. }
  283. }
  284. break;
  285.     default:
  286. OldCallback(pMsg); //call old callback proc...
  287. // WM_DefaultProc(pMsg);
  288. }
  289. }
  290. void FiveChessTask(void* pdata)
  291. {
  292. int i = 0;
  293. WM_HWIN hWin;
  294. // MENU_Handle hMainMenu, hMainMenu2;
  295. WM_SetDesktopColor(GUI_RED);      /* Automacally update desktop window */
  296. WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
  297. GUI_CURSOR_Select(&GUI_CursorCrossLI);  
  298. GUI_CURSOR_Show(); 
  299. qipanBmp = (void*)&bmqipan;
  300. whiteBmp = (void*)&bmwhite;
  301. blackBmp = (void*)&bmblack;
  302. GUI_SetBkColor(GUI_RED);
  303. GUI_Clear();
  304. //while(1);
  305. Game_Init();
  306.     hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, WM_HBKWIN, 0, 0); 
  307. MENU_SetDefaultFont(&GUI_FontHZ_SimSun_13);
  308. hMainMenu = _CreateMenu(hWin);
  309. ChangeLanguage(1);
  310. hMainMenu2 = _CreateMenu(hWin);
  311. FRAMEWIN_AddMenu(hWin, hMainMenu2);
  312.     GUI_ExecCreatedDialog(hWin);
  313. }