编译,连接都通过了,就是运行不起来,扫雷,小弟很菜,求助神人
时间:2011-12-02
来源:互联网
#include<stdio.h>
#include<math.h>
#include<time.h>
#define MineS_MX 40//宽//
#define MineS_MY 30//高,个数//
#define MineS_SIZE 20
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int Change(int);//坐标转换//
void DrawGrid(HDC);//画格子//
void DrawSquare(HDC);//显示分数//
void DrawTip(HDC,HWND);
void Recursion(int,int);//递归搜索相邻//
UINT g_uTimer;
POINT MineS_Mouse;//鼠标位置//
int MineS[MineS_MX+2][MineS_MY+2];//底//
int MineS_YN[MineS_MX+2][MineS_MY+2];//遮挡//
int MineS_Num=100;//雷数//
int MineS_Nu=0;//已挖出的方块数//
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("MineSweeper!");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This Program Requires WindowsNT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,
TEXT("MineSweeper"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
MineS_SIZE*MineS_MX+40,
MineS_SIZE*MineS_MY+60,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT pt;
RECT rect,winxy;
int i,j,x,y,n=0,m;
HDC hdcMem;
HBITMAP hbmpMem;
HBRUSH hBrushBK;
switch(message)
{
case WM_CREATE:
g_uTimer=SetTimer(hwnd,1,10,NULL);
srand((unsigned)time(NULL));//随机数发生器的初始化函数//
for(i=1;i<=MineS_MX;i++)//初始化方块矩阵//
for(j=1;i<=MineS_MY;j++)
{
MineS[i][j]=0;
MineS_YN[i][j]=1;
}
for(i=0;i<=MineS_MX+1;i++)
{
MineS[i][0]=11;
MineS[i][MineS_MY+1]=11;
}
for(i=0;i<=MineS_MY+1;i++)
{
MineS[0][i]=11;
MineS[MineS_MX+1][i]=11;
}
m=MineS_Num;
while(m)//布雷//
{
x=rand()%MineS_MX+1;
y=rand()%MineS_MY+1;
if(MineS[x][y]!=10)
{
MineS[x][y]=10;
m--;
}
}
for(i=1;i<=MineS_MX;i++)//初始化数字//
for(j=1;j<=MineS_MY;j++)
{
if(MineS[i][j]!=10)
{
MineS[i][j]+=(MineS[i-1][j-1]==10);
MineS[i][j]+=(MineS[i-1][j]==10);
MineS[i][j]+=(MineS[i-1][j+1]==10);
MineS[i][j]+=(MineS[i][j-1]==10);
MineS[i][j]+=(MineS[i][j+1]==10);
MineS[i][j]+=(MineS[i+1][j-1]==10);
MineS[i][j]+=(MineS[i+1][j]==10);
MineS[i][j]+=(MineS[i+1][j+1]==10);
}
}
return 0;
case WM_KEYDOWN:
if(wParam=='O')
{
g_uTimer=SetTimer(hwnd,1,10,NULL);
}
if(wParam=='P')
{
KillTimer(hwnd,g_uTimer);
}
return 0;
case WM_KEYUP:
return 0;
case WM_LBUTTONDOWN:
GetCursorPos(&MineS_Mouse);
GetWindowRect(hwnd,&winxy);
x=(MineS_Mouse.x-winxy.left-20)/MineS_SIZE+1;
y=(MineS_Mouse.y-winxy.top-40)/MineS_SIZE+1;
if(x>=1&&x<=MineS_MX&&y>=1&&y<=MineS_MY)
{
if(MineS[x][y]>0&&MineS[x][y]||MineS[x][y]==11)
{
if(MineS_YN==0)
MineS_YN[x][y]=0;
MineS_Nu++;
}
}
if(MineS[x][y]==0)
{
Recursion(x,y);
}
if(MineS[x][y]==10)
{
MessageBox(hwnd,"over","over",MB_OK);
KillTimer(hwnd,g_uTimer);
exit(0);
}
return 0;
case WM_RBUTTONDOWN:
return 0;
case WM_TIMER:
GetClientRect(hwnd,&rect);
InvalidateRect(hwnd,&rect,FALSE);
return 0;
case WM_PAINT:
{
hdc=BeginPaint(hwnd,&pt);
GetClientRect(hwnd,&rect);
hdcMem=CreateCompatibleDC(hdc);
hbmpMem=CreateCompatibleBitmap(hdc,rect.right,rect.bottom);
SelectObject(hdcMem,hbmpMem);
hBrushBK=CreateSolidBrush(RGB(255,255,255));
FillRect(hdcMem,&rect,hBrushBK);
DeleteObject(hBrushBK);
DrawGrid(hdcMem);
DrawSquare(hdcMem);
DrawTip(hdcMem,hwnd);
if((MineS_Nu+MineS_Num)==MineS_MX*MineS_MY)
{
KillTimer(hwnd,g_uTimer);
MessageBox(hwnd,"ok","ok",MB_OK);
exit(0);
}
EndPaint(hwnd,&pt);
}
return 0;
case WM_MOUSEMOVE:
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
int Change(int n)
{
return (n-1)*MineS_SIZE+10;
}
void DrawGrid(HDC hdc)
{
int i;
Rectangle(hdc,10,10,10+MineS_MX*MineS_SIZE+1,10+MineS_MY*MineS_SIZE+1);
for(i=10;i<10+MineS_MY*MineS_SIZE;i+=MineS_SIZE)
{
MoveToEx(hdc,i,10,NULL);
LineTo(hdc,i,MineS_MY*MineS_SIZE+10);
}
for(i=10;i<10+MineS_MY*MineS_SIZE;i+=MineS_SIZE)
{
MoveToEx(hdc,10,i,NULL);
LineTo(hdc,MineS_MX*MineS_SIZE+10,i);
}
}
void DrawSquare(HDC hdc)
{
int i,j;
RECT rc;
TCHAR tip[2];
for(i=1;i<=MineS_MX;i++)
for(j=1;j<=MineS_MY;j++)
{
if(MineS_YN[i][j])
{
Rectangle(hdc,Change(i)+1,Change(j)+1,Change(i)+MineS_SIZE-1,Change(j)+MineS_SIZE-1);
Rectangle(hdc,Change(i)+3,Change(j)+3,Change(i)+MineS_SIZE-2,Change(j)+MineS_SIZE-2);
Rectangle(hdc,Change(i)+5,Change(j)+5,Change(i)+MineS_SIZE-3,Change(j)+MineS_SIZE-3);
}
else
{
if(MineS[i][j]>0&&MineS[i][j]<9)
{
sprintf(tip,"%d",MineS[i][j]);
rc.left=Change(i);
rc.top=Change(j)+1;
rc.right=rc.left+MineS_SIZE;
rc.bottom=rc.top+MineS_SIZE;
DrawText(hdc,tip,-1,&rc,DT_CENTER);
Rectangle(hdc,Change(i)+2,Change(j)+2,Change(i)+MineS_SIZE-1,Change(j)+MineS_SIZE-1);
}
if(MineS[i][j]==10)
{
Rectangle(hdc,Change(i)+2,Change(j)+2,Change(i)+MineS_SIZE-1,Change(j)+MineS_SIZE-1);
Rectangle(hdc,Change(i)+3,Change(j)+3,Change(i)+MineS_SIZE-2,Change(j)+MineS_SIZE-2);
Rectangle(hdc,Change(i)+4,Change(j)+4,Change(i)+MineS_SIZE-3,Change(j)+MineS_SIZE-3);
Rectangle(hdc,Change(i)+5,Change(j)+5,Change(i)+MineS_SIZE-4,Change(j)+MineS_SIZE-4);
}
}
}
}
void DrawTip(HDC hdc,HWND hwnd)
{
RECT rc,winxy;
TCHAR szTip[255];
int x,y;
GetCursorPos(&MineS_Mouse);
GetWindowRect(hwnd,&winxy);
x=(MineS_Mouse.x-winxy.left-20)/MineS_SIZE+1;
y=(MineS_Mouse.y-winxy.top-40)/MineS_SIZE+1;
sprintf(szTip,"分数:%d,d%",x,MineS_Nu);
rc.left=500;
rc.top=200;
rc.right=600;
rc.bottom=240;
DrawText(hdc,szTip,-1,&rc,DT_BOTTOM|DT_LEFT);
}
void Recursion(int x,int y)
{
if(x>0&&x<=MineS_MX&&y>0&&y<=MineS_MY)
{
if(MineS_YN[x][y]==1)
{
MineS_YN[x][y]=0;
MineS_Nu++;
}
if(MineS[x][y]==0)
{
MineS[x][y]=11;
Recursion(x-1,y-1);
Recursion(x-1,y);
Recursion(x-1,y+1);
Recursion(x,y-1);
Recursion(x,y+1);
Recursion(x+1,y-1);
Recursion(x+1,y);
Recursion(x+1,y+1);
}
}
}
作者: open864 发布时间: 2011-12-02
作者: happyparrot 发布时间: 2011-12-02
作者: hai296 发布时间: 2011-12-02
作者: gold_water 发布时间: 2011-12-02
作者: fight_in_dl 发布时间: 2011-12-02
作者: abc137508277 发布时间: 2011-12-02
第一个case for循环里面有错,i换成j,不过还有其他问题。放断点一步步调试吧
注意数组越界问题。
作者: dream0411 发布时间: 2011-12-02
for(i=1;i<=MineS_MX;i++)//初始化方块矩阵// [color=#FF0000]for(j=1;i<=MineS_MY;j++)[/color]{ MineS[i][j]=0; MineS_YN[i][j]=1; }
看看这个就能明白了。。。不过显示都是空白!!!
作者: shen_wei 发布时间: 2011-12-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28