📄 winmine.c
字号:
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <commctrl.h>
#include "Htmlhelp.h"
#include "resource.h"
#define WM_CUSTOM WM_USER+100 //自定义消息
#define ID_TIMER1 100
/* *********************************************************************
// 插旗子的状态---------------- -2 插问号的状态---------------- -3
// 空白-----------------------0 地雷的状态----------------- -1
// 数字--------- 1,2 ,3,4,5,6,7,8表示地雷数
************************************************************** */
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK CustomDlgProc(HWND,UINT,WPARAM,LPARAM);
int ilevel=IDM_BEGINNER; //保存信息,以用做初始化自定义对话框
int iWidth=9,iHeight=9,iCount=10; //保存对话框传来的大小数据
int upcount=0,countime1=0; //作为计时器和up记数
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName [] = TEXT ("winmine") ;
HACCEL hAccel;
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 (NULL, szAppName) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("扫雷"),
WS_OVERLAPPEDWINDOW&~WS_MAXIMIZEBOX&~WS_THICKFRAME ,
200, 200,
170, 258,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
hAccel=LoadAccelerators(hInstance,szAppName);
while (GetMessage (&msg, NULL, 0, 0))
{
if(!TranslateAccelerator(hwnd,hAccel,&msg))
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
void initialBob(int iNumLTBob[100][100][2],int iwidth,int iheight) //初始化数组
{
int i,j;
for(i=0;i<=iwidth-1;i++)
for(j=0;j<=iheight-1;j++)
{
iNumLTBob[i][j][0]=0;
iNumLTBob[i][j][1]=0;
}
}
find(int i,int j,int iNumLTBob[100][100][2],HDC hdc,HDC memhdc,int cxBit,int cyBit) // 递归调用找空白
{
if((i<0)||(j<0)||(iNumLTBob[i][j][0]==-1)) return 0;
else
{
if(iNumLTBob[i][j][0]<=8&&iNumLTBob[i][j][0]>=0)
{
if(iNumLTBob[i][j][1]==0&&iNumLTBob[i][j][0]<=8&&iNumLTBob[i][j][0]>=1)
{
iNumLTBob[i][j][1]=iNumLTBob[i][j][0];
BitBlt(hdc,10+i*cxBit,50+j*cyBit,cxBit,cyBit,
memhdc,0,256-(iNumLTBob[i][j][0]+1)*16,SRCCOPY);
}
if(iNumLTBob[i][j][0]==0&&iNumLTBob[i][j][1]==0)
{
BitBlt(hdc,10+i*cxBit,50+j*cyBit,cxBit,cyBit,
memhdc,0,240,SRCCOPY);
iNumLTBob[i][j][1]=9;
}
}
find(i-1,j-1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i-1,j+1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i,j+1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i,j-1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i+1,j-1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i+1,j,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i+1,j+1,iNumLTBob,hdc,memhdc,cxBit,cyBit);
find(i-1,j,iNumLTBob,hdc,memhdc,cxBit,cyBit);
}
}
BOOL CALLBACK CustomDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
TCHAR str[5];
switch(message)
{
case WM_INITDIALOG:
if(ilevel==IDM_BEGINNER)
{
SetDlgItemText(hDlg,IDC_HEIGHT_CUSTOM,"9");
SetDlgItemText(hDlg,IDC_WIDTH_CUSTOM,"9");
SetDlgItemText(hDlg,IDC_COUNT_CUSTOM,"10");
}
else
{
if (ilevel==IDM_INTERMEDIATE)
{
SetDlgItemText(hDlg,IDC_HEIGHT_CUSTOM,"16");
SetDlgItemText(hDlg,IDC_WIDTH_CUSTOM,"16");
SetDlgItemText(hDlg,IDC_COUNT_CUSTOM,"40");
}
else
{
if(ilevel==IDM_ADVANCED)
{
SetDlgItemText(hDlg,IDC_HEIGHT_CUSTOM,"16");
SetDlgItemText(hDlg,IDC_WIDTH_CUSTOM,"30");
SetDlgItemText(hDlg,IDC_COUNT_CUSTOM,"99");
}
else
{
itoa(iHeight,str,10); //把整数转化为字符串
SetDlgItemText(hDlg,IDC_HEIGHT_CUSTOM,str);
itoa(iWidth,str,10);
SetDlgItemText(hDlg,IDC_WIDTH_CUSTOM,str);
itoa(iCount,str,10);
SetDlgItemText(hDlg,IDC_COUNT_CUSTOM,str);
}
}
}
return TRUE ;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg,TRUE);
if(iHeight<9) iHeight=9;
if(iWidth<9) iWidth=9;
if(iCount<10) iCount=10;
if(iCount>=((iHeight-1)*(iWidth-1))) iCount=(iHeight-1)*(iWidth-1);
SendMessage(GetParent(hDlg),WM_CUSTOM,iCount,MAKELONG(iHeight,iWidth));
KillTimer(GetParent(hDlg),ID_TIMER1);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,FALSE);
return TRUE;
case IDC_HEIGHT_CUSTOM:
GetDlgItemText(hDlg,IDC_HEIGHT_CUSTOM,str,5);
iHeight=atoi(str);
return TRUE;
case IDC_WIDTH_CUSTOM:
GetDlgItemText(hDlg,IDC_WIDTH_CUSTOM,str,5);
iWidth=atoi(str);
return TRUE;
case IDC_COUNT_CUSTOM:
GetDlgItemText(hDlg,IDC_COUNT_CUSTOM,str,5);
iCount=atoi(str);
return TRUE;
}
}
return TRUE;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HBITMAP hBitmap1,hBitmap2,hBitmap3,hBitmap4,hBitmap5,hBitmap6;
static HDC hdcMem1,hdcMem2 ,hdcMem3,hdcMem4,hdcMem5,hdcMem6;
HDC hdc;
BITMAP bitmap1,bitmap2,bitmap3,bitmap4,bitmap5,bitmap6;
static HINSTANCE hInstance;
HINSTANCE hLib; //shell32.dll 实例句柄
static FARPROC fpAbout; //ShellAbout 函数入口
static HICON hIcon;
static int cxBitmap1, cyBitmap1, cxBitmap2,cyBitmap2,cxBitmap3,cyBitmap3,
cxBitmap4, cyBitmap4, cxBitmap5,cyBitmap5,cxBitmap6,cyBitmap6,cxClient, cyClient;
static int cxPostion=-1,cyPostion=-1; //保存哪个位置上的砖块被翻
static int count,iCountcopy=10; //作为计数器计数
TCHAR lpAnonymity[255]; //临时变量
HMENU hMenu;
PAINTSTRUCT ps;
POINT pt,pt1;
int x,y;
static RECT rect,rect1,rect2;
static int NumLTBob[100][100][2]; //用于记录地雷的数目和雷的位置,
static int ifind=0,numofBob; //判断是否按中雷区 //以及用于记录按钮显示的状况
int Tmp1, Tmp2,j,i; //临时变量
static int m,n,k,s=0,t=0;
static int flag=0,flag1,finish; //判断是不是应该重新布雷的标志
static int doubledown,singledown,countup; //判断是否双键按下
static countime; //作为计时器和up记数
switch (message)
{
case WM_CREATE: //游戏开始时的界面(默认为初级)
hdc = GetDC (hwnd) ;
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
hdcMem1 = CreateCompatibleDC (hdc) ;
hdcMem2 = CreateCompatibleDC (hdc) ;
hdcMem3 = CreateCompatibleDC (hdc) ;
hdcMem4 = CreateCompatibleDC (hdc) ;
hdcMem5 = CreateCompatibleDC (hdc) ;
hdcMem6 = CreateCompatibleDC (hdc) ;
hBitmap1 =LoadBitmap(hInstance,TEXT("field"));
hBitmap2 =LoadBitmap(hInstance,TEXT("frame"));
hBitmap3 =LoadBitmap(hInstance,TEXT("smallfra"));
hBitmap4 =LoadBitmap(hInstance,MAKEINTRESOURCE(420));
hBitmap5 =LoadBitmap(hInstance,MAKEINTRESOURCE(430));
hBitmap6 =LoadBitmap(hInstance,MAKEINTRESOURCE(410));
ReleaseDC (hwnd, hdc) ;
GetObject(hBitmap1,sizeof(BITMAP),&bitmap1);
GetObject(hBitmap2,sizeof(BITMAP),&bitmap2);
GetObject(hBitmap3,sizeof(BITMAP),&bitmap3);
GetObject(hBitmap4,sizeof(BITMAP),&bitmap4);
GetObject(hBitmap5,sizeof(BITMAP),&bitmap5);
GetObject(hBitmap6,sizeof(BITMAP),&bitmap6);
cxBitmap1=bitmap1.bmWidth;
cyBitmap1=bitmap1.bmHeight/2;
cxBitmap2=bitmap2.bmWidth;
cyBitmap2=bitmap2.bmHeight;
cxBitmap3=bitmap3.bmWidth;
cyBitmap3=bitmap3.bmHeight;
cxBitmap4=bitmap4.bmWidth;
cyBitmap4=bitmap4.bmHeight/12;
cxBitmap5=bitmap5.bmWidth;
cyBitmap5=bitmap5.bmHeight/5;
cxBitmap6=bitmap6.bmWidth;
cyBitmap6=bitmap6.bmHeight/16;
SelectObject (hdcMem1, hBitmap1);
SelectObject (hdcMem2, hBitmap2);
SelectObject (hdcMem3, hBitmap3);
SelectObject (hdcMem4, hBitmap4);
SelectObject (hdcMem5, hBitmap5);
SelectObject (hdcMem6, hBitmap6);
/*/////////////////////////////////////////////////////////
//调入Windows自带的 shell32.dll,为调用"关于"(ShellAbout)做准备
*//////////////////////////////////////////////////////////
hLib=LoadLibrary("shell32.dll");
if (hLib)
{
fpAbout=GetProcAddress(hLib,"ShellAboutW");
}
hIcon=LoadIcon(hInstance,TEXT("ico100")) ;
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -