same.c
来自「minigui PDA系统 可实现手机功能」· C语言 代码 · 共 659 行 · 第 1/2 页
C
659 行
sync_stones = 0;
}
static void load_scenario (const char *fname)
{
UnloadBitmap (&stones);
if (LoadBitmap (HDC_SCREEN, &stones, fname)) {
exit (1);
}
configure_sync (fname);
nstones = stones.bmWidth / STONE_SIZE;
ncolors = 3;
}
static void create_same_board (const char *fname)
{
load_scenario (fname);
fill_board ();
}
static void sel_scenario (HWND hwnd, int sel)
{
MENUBUTTONITEM mbi;
mbi.which = MB_WHICH_TEXT;
if (sel != cur_sel_scen) {
SendMessage (hwnd_menu, MBM_GETITEMDATA, sel, (LPARAM)&mbi);
load_scenario (mbi.text);
new_game (hwnd);
cur_sel_scen = sel;
}
}
static int fill_menu (HWND hwnd_menu)
{
int i = 0;
MENUBUTTONITEM mbi;
struct dirent *e;
char *dname = "image/same/";
DIR *dir;
char buff [30];
dir = opendir (dname);
if (!dir)
return -1;
while ((e = readdir (dir)) != NULL){
if (!strstr (e->d_name, ".gif")) {
continue;
}
strcpy (buff, "image/same/");
strcat (buff, e->d_name);
mbi.text = buff;
mbi.bmp = NULL;
mbi.data = 0;
SendMessage (hwnd_menu, MBM_ADDITEM, -1, (LPARAM) &mbi);
i ++;
}
closedir (dir);
return i;
}
static HMENU createpmenugame (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"Game";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_NEW;
mii.typedata = (DWORD)"新游戏";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.state = 0;
mii.id = IDM_EXIT;
mii.typedata = (DWORD)"退出";
InsertMenuItem(hmnu, 1, TRUE, &mii);
hmnu = StripPopupHead(hmnu);
return hmnu;
}
static HMENU createpmenuabout (void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"关于";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = IDM_ABOUT;
mii.typedata = (DWORD)"关于";
InsertMenuItem(hmnu, 0, TRUE, &mii);
hmnu = StripPopupHead(hmnu);
return hmnu;
}
static HMENU createmenu (void)
{
HMENU hmnu;
MENUITEMINFO mii;
hmnu = CreateMenu();
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 100;
mii.typedata = (DWORD)"游戏";
mii.hsubmenu = createpmenugame ();
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING;
mii.id = 120;
mii.typedata = (DWORD)"关于";
mii.hsubmenu = createpmenuabout ();
InsertMenuItem(hmnu, 1, TRUE, &mii);
return hmnu;
}
int SameGameProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case MSG_CREATE:
{
RECT rcClient;
MENUBUTTONITEM mbi;
GetClientRect (hWnd, &rcClient);
CreateWindow (CTRL_STATIC, "游戏皮肤: ",
WS_CHILD | WS_VISIBLE | SS_RIGHT, 0,
0, rcClient.bottom - GetSysCharHeight () - 4,
100, GetSysCharHeight () + 4, hWnd, 0);
hwnd_menu = CreateWindow ("menubutton",
"<游戏皮肤>",
WS_CHILD | WS_VISIBLE, 100,
100, rcClient.bottom - GetSysCharHeight () - 4,
100, GetSysCharHeight () + 4, hWnd, 0);
if (fill_menu (hwnd_menu) <= 0) {
fprintf (stderr, "Can not find scenario.\n");
return -1;
}
SendMessage (hwnd_menu, MBM_SETCURITEM, 0, 0);
hwnd_score = CreateWindow (CTRL_STATIC, "成绩:",
WS_CHILD | WS_VISIBLE | SS_RIGHT, 0,
200, rcClient.bottom - GetSysCharHeight () - 4,
rcClient.right - 200, GetSysCharHeight () + 4, hWnd, 0);
mbi.which = MB_WHICH_TEXT;
SendMessage (hwnd_menu, MBM_GETITEMDATA, 0, (LPARAM)&mbi);
create_same_board (mbi.text);
new_game (hWnd);
}
break;
case MSG_COMMAND:
if (LOWORD(wParam) == 100 && HIWORD (wParam) == MBN_CHANGED) {
int sel = SendMessage (hwnd_menu, MBM_GETCURITEM, 0, 0);
if (sel >= 0)
sel_scenario (hWnd, sel);
break;
}
switch (wParam) {
case IDM_NEW:
new_game (hWnd);
break;
case IDM_EXIT:
SendMessage (hWnd, MSG_CLOSE, 0, 0L);
break;
case IDM_ABOUT:
MessageBox(hWnd, "快准很 游戏 V1.0\n2007/11/10", "关于", MB_OK);
break;
break;
}
break;
case MSG_ERASEBKGND:
return 0;
case MSG_PAINT:
{
HDC hdc;
hdc = BeginPaint (hWnd);
paint (hWnd, hdc);
EndPaint (hWnd, hdc);
return 0;
}
case MSG_LBUTTONDOWN:
{
int x = LOWORD (lParam);
int y = HIWORD (lParam);
kill_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE);
old_x = -1;
old_y = -1;
}
break;
case MSG_MOUSEMOVE:
{
int x = LOWORD (lParam);
int y = HIWORD (lParam);
if (PtInRect (&rcBoard, x, y))
mark_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE);
else
unmark_balls (hWnd);
}
break;
case MSG_NCMOUSEMOVE:
if (wParam != HT_CLIENT)
unmark_balls (hWnd);
break;
case MSG_MOUSEMOVEIN:
if (!wParam)
unmark_balls (hWnd);
break;
case MSG_TIMER:
if (wParam == ID_TIMER) {
HDC hdc = GetClientDC (hWnd);
move_tagged_balls (hdc);
ReleaseDC (hdc);
}
break;
case MSG_CLOSE:
if (MessageBox (hWnd,"你确认要退出?", "快准很", MB_YESNO | MB_ICONQUESTION | MB_BASEDONPARENT) != IDYES)
return 0;
DestroyAllControls (hWnd);
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
}
return DefaultMainWinProc (hWnd, message, wParam, lParam);
}
static void InitCreateInfo (PMAINWINCREATE pCreateInfo)
{
rcBoard.left = 0;
rcBoard.top = 0;
rcBoard.right = STONE_COLS * STONE_SIZE;
rcBoard.bottom = STONE_LINES * STONE_SIZE;
pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER;
pCreateInfo->dwExStyle = WS_EX_NONE;
pCreateInfo->spCaption = "快准很";
pCreateInfo->hMenu = createmenu ();
pCreateInfo->hCursor = GetSystemCursor(0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = SameGameProc;
pCreateInfo->lx = 0;
pCreateInfo->ty = 0;
pCreateInfo->rx = pCreateInfo->lx +
ClientWidthToWindowWidth (WS_CAPTION | WS_BORDER,
STONE_COLS * STONE_SIZE);
pCreateInfo->by = pCreateInfo->ty +
ClientHeightToWindowHeight (WS_CAPTION | WS_BORDER,
STONE_LINES * STONE_SIZE, TRUE);
pCreateInfo->by += GetSysCharHeight () + 4;
pCreateInfo->iBkColor = PIXEL_black;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = HWND_DESKTOP;
}
int sameGame ( HWND hWnd )
{
HWND hMainWnd;
MSG Msg;
MAINWINCREATE CreateInfo;
const char* layer = NULL;
RECT max_rect = {0, 0, 0, 0};
InitCreateInfo (&CreateInfo);
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return 0;
srand (time (NULL));
ShowWindow (hMainWnd, SW_SHOWNORMAL);
while( GetMessage (&Msg, hMainWnd) ) {
TranslateMessage (&Msg);
DispatchMessage (&Msg);
}
MainWindowThreadCleanup (hMainWnd);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?