#include "Monkey24.h"
////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
/////////////////////////////////////////////////////////////////
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("Monkey2004");
HWND hwnd;
MSG msg ;
WNDCLASS wndclass ;
///////////////////注册窗口类////////////////////////
wndclass.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICONMAIN)) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//(HBRUSH) GetSysColorBrush(COLOR_BTNFACE);
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
g_hinst=hInstance;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
//建立窗口
hwnd = CreateWindow (szAppName, TEXT ("Monkey Year 2004 - Wuzg"),
WS_BORDER|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
CW_USEDEFAULT,CW_USEDEFAULT,
20,
20,
NULL,
(HMENU)LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)),
hInstance, NULL);
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
WriteGameSetting();
return msg.wParam ;
}
void InitAllBombInfo(int nType)
{
FreeBombInfoMatrix();
switch(nType)
{
case TYPE_BEGINNER:
g_nBlockCX=MAXCOUNTX;
g_nBlockCY=MAXCOUNTY;
g_nBombCount=MAXBOMBCOUNT;
break;
case TYPE_MIDDLE:
g_nBlockCX=MMAXCOUNTX;
g_nBlockCY=MMAXCOUNTY;
g_nBombCount=MMAXBOMBCOUNT;
break;
case TYPE_MASTER:
g_nBlockCX=HMAXCOUNTX;
g_nBlockCY=HMAXCOUNTY;
g_nBombCount=HMAXBOMBCOUNT;
break;
}
AllocBombInfoMatrix();
InitBombInfoMatrix();
nMarkedCount=0;
nRightMarkedCount=0;
g_bPlaying=TRUE;
g_nTimecount=0;
rcMap.left=MAPINITX;
rcMap.top=MAPINITY;
rcMap.right=MAPINITX+BLOCKBMPCX*g_nBlockCX;
rcMap.bottom=MAPINITY+BLOCKBMPCY*g_nBlockCY;
}
//////////////////////////////////////////////////////
BOOL CALLBACK UserDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
int tempW,tempH,tempBomb;
switch (message)
{
case WM_INITDIALOG :
SetDlgItemInt(hDlg,IDC_EDITW,g_nBlockCX,FALSE);
SetDlgItemInt(hDlg,IDC_EDITH,g_nBlockCY,FALSE);
SetDlgItemInt(hDlg,IDC_EDITBOMB,g_nBombCount,FALSE);
return FALSE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
tempW=min(36,max(2,GetDlgItemInt(hDlg,IDC_EDITW,NULL,FALSE)));
tempH=min(36,max(2,GetDlgItemInt(hDlg,IDC_EDITH,NULL,FALSE)));
tempBomb=GetDlgItemInt(hDlg,IDC_EDITBOMB,NULL,FALSE);
if((tempBomb>=tempW*tempH)||(tempBomb<=0))
tempBomb=max(1,(int)((tempW*tempH)/2));
g_nBlockCX=tempW;
g_nBlockCY=tempH;
g_nBombCount=tempBomb;
EndDialog (hDlg, 0) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, 1) ;
return TRUE;
}
break ;
}
return FALSE ;
}
//////////////////////////////////////////////////////
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG :
return FALSE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
EndDialog (hDlg, 0) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, 1) ;
return TRUE;
}
break ;
}
return FALSE ;
}
//////////////////////////////////////////////////////
BOOL CALLBACK ScoreDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
int score1,score2,score3;
TCHAR name1[20],name2[20],name3[20];
TCHAR szBuf[10];
switch (message)
{
case WM_INITDIALOG :
score1=GetPrivateProfileInt(TEXT("SCORE"),TEXT("Score1"),999,szProfilePath);
score2=GetPrivateProfileInt(TEXT("SCORE"),TEXT("Score2"),999,szProfilePath);
score3=GetPrivateProfileInt(TEXT("SCORE"),TEXT("Score3"),999,szProfilePath);
GetPrivateProfileString(TEXT("SCORE"),TEXT("Name1"),TEXT("佚名"),name1,20,szProfilePath);
GetPrivateProfileString(TEXT("SCORE"),TEXT("Name2"),TEXT("佚名"),name2,20,szProfilePath);
GetPrivateProfileString(TEXT("SCORE"),TEXT("Name3"),TEXT("佚名"),name3,20,szProfilePath);
wsprintf(szBuf,TEXT("%d 秒"),score1);
SetDlgItemText(hDlg,IDC_SSCORE1,szBuf);
wsprintf(szBuf,TEXT("%d 秒"),score2);
SetDlgItemText(hDlg,IDC_SSCORE2,szBuf);
wsprintf(szBuf,TEXT("%d 秒"),score3);
SetDlgItemText(hDlg,IDC_SSCORE3,szBuf);
SetDlgItemText(hDlg,IDC_SNAME1,name1);
SetDlgItemText(hDlg,IDC_SNAME2,name2);
SetDlgItemText(hDlg,IDC_SNAME3,name3);
return FALSE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
EndDialog (hDlg, 0) ;
return TRUE ;
case IDCANCEL:
EndDialog (hDlg, 1) ;
return TRUE;
case IDC_BTNCLEAR:
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score1"),TEXT("999"),szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Name1"),TEXT("佚名"),szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score2"),TEXT("999"),szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Name2"),TEXT("佚名"),szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score3"),TEXT("999"),szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Name3"),TEXT("佚名"),szProfilePath);
EndDialog (hDlg, 1) ;
return TRUE;
}
break ;
}
return FALSE ;
}
//////////////////////////////////////////////////////
BOOL CALLBACK NameDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
TCHAR szName[20],szScore[10];
switch (message)
{
case WM_INITDIALOG :
if(g_nGameLev==TYPE_BEGINNER)
SetDlgItemText(hDlg,IDC_NTYPE,TEXT("已破初级记录。"));
else if(g_nGameLev==TYPE_MIDDLE)
SetDlgItemText(hDlg,IDC_NTYPE,TEXT("已破中级记录。"));
else if(g_nGameLev==TYPE_MASTER)
SetDlgItemText(hDlg,IDC_NTYPE,TEXT("已破高级记录。"));
SetDlgItemText(hDlg,IDC_EDITNAME,TEXT("佚名"));
SetFocus(GetDlgItem(hDlg,IDC_EDITNAME));
return FALSE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDOK :
GetDlgItemText(hDlg,IDC_EDITNAME,szName,20);
wsprintf(szScore,TEXT("%d"),g_nTimecount);
if(g_nGameLev==TYPE_BEGINNER)
{
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score1"),szScore,szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Name1"),szName,szProfilePath);
}
else if(g_nGameLev==TYPE_MIDDLE)
{
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score2"),szScore,szProfilePath);
WritePrivateProfileString(TEXT("SCORE"),TEXT("Name2"),szName,szProfilePath);
}
else if(g_nGameLev==TYPE_MASTER)
{
WritePrivateProfileString(TEXT("SCORE"),TEXT("Score3"),szScore,szProfilePath);
WritePrivateProfileString(TEXT(