求助各位!!!一个简单的windows api程序问题!!!!
初学api,在写这个扫雷游戏,提示错误啊啊啊啊啊!!!请问哪位能帮我看看问题在哪里啊?实在感谢!!!
下面是代码,谢谢!!!
/************************************************ MineSweeper Program ******************************************** ********************************************************************************************************************************/#include"stdafx.h" #include <windows.h>#include <stdio.h>#include"mineswepper.h"#define MineNum 10 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);struct Block { bool ifOpened; //if the block has been clicked bool ifMined; //if the block contains a mine bool ifFlaged; //if user has flgged the block as a mine int surroundedMines; //How many mines around the target block };static Block blocks[20][20];int minesAround(int i,int l);void looping(int i,int l);static int bmX = 0;static int bmY = 0;static int mouseX;static int mouseY;static int row = 20;static int coloum = 20; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ TCHAR szAppName[]=TEXT("Minesweeper"); TCHAR szClassName[]=TEXT("MinesweeperClassName"); 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 =szClassName; RegisterClass(&wndclass); hwnd=CreateWindow(szClassName,TEXT("Mineswepper"), WS_OVERLAPPEDWINDOW &~ WS_SIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nCmdShow); 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){ PAINTSTRUCT ps; HDC hdc , hdcMem; HBITMAP hBitmap; BITMAP bm; switch (message) { case WM_CREATE: { for(int i=0;i<row;++i) { for(int l=0;l<coloum;++l) { blocks[i][l].ifMined=false; blocks[i][l].ifFlaged=false; blocks[i][l].ifOpened=false; } } for(int i=0;i<10;++i) { int x=rand()%20; int y=rand()%20; blocks[x][y].ifMined=true; } hBitmap=(HBITMAP)LoadImage(NULL,TEXT("Blocks.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); GetObject(hBitmap,sizeof(BITMAP),&bm); bmX=bm.bmWidth; bmY=bm.bmHeight; return 0; } case WM_PAINT: { hdc=BeginPaint(hwnd,&ps); hdcMem=CreateCompatibleDC(hdc); for(int i=0;i<row;++i) { for(int l=0;l<coloum;++l) { if(blocks[i][l].ifOpened==true) { if(blocks[i][l].ifMined==true) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("openMneBlk.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else { if(blocks[i][l].surroundedMines==0) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("mineKEYDOWN.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==1) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("1.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==2) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("2.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==3) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("3.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==4) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("4.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==5) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("5.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==6) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("6.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==7) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("7.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } else if(blocks[i][l].surroundedMines==8) { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("8.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } } } else { hBitmap=(HBITMAP)LoadImage(NULL,TEXT("Blocks.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); DeleteObject(SelectObject(hdcMem,hBitmap)); } BitBlt(hdc,(i*bmX),(l*bmY),bmX,bmY,hdcMem,0,0,SRCCOPY); } } EndPaint(hwnd,&ps); DeleteDC(hdcMem); return 0; } case WM_LBUTTONUP: { mouseX=LOWORD(lParam); mouseY=HIWORD(lParam); int box_Y = (mouseX/bmX); int box_X = (mouseY/bmY); if( (mouseX<(coloum*bmX)) && (mouseY<(row*bmY)) ) { if(blocks[box_Y][box_X].ifOpened==true) {return 0;} else { looping(box_Y,box_X); InvalidateRect(hwnd,NULL,true); return 0; } } return 0; } case WM_CHAR: switch(wParam) {case 'x': for(int i=0;i<row;++i) { for(int l=0;l<coloum;++l) { blocks[i][l].ifOpened=true; blocks[i][l].surroundedMines=minesAround(i,l); } } InvalidateRect(hwnd,NULL,true); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd,message,wParam,lParam);}int minesAround(int i,int l){ int MineNumCount=0; //for counting the mines around // They are the codes for counting the mines around the block(down) if( (i != 0) && (l != 0) ) { if(blocks[i-1][l-1].ifMined==true) {++MineNumCount;} } if(i != 0) { if(blocks[i-1][l].ifMined==true) {++MineNumCount;} if( l<(coloum-1) ) {if(blocks[i-1][l+1].ifMined==true) {++MineNumCount;} } } if(l != 0) { if(blocks[i][l-1].ifMined==true) {++MineNumCount;} if( i<(row-1) ) {if(blocks[i+1][l-1].ifMined==true) {++MineNumCount;}} } if( l<(coloum-1) ) { if(blocks[i][l+1].ifMined==true) {++MineNumCount;} if( i<(row-1) ) {if(blocks[i+1][l+1].ifMined==true) {++MineNumCount;}} } if( i<(row-1) ) {if(blocks[i+1][l].ifMined==true) {++MineNumCount;}} return MineNumCount;}void looping(int i,int l){ blocks[i][l].ifOpened=true; if(minesAround(i,l)>0) { blocks[i][l].surroundedMines=minesAround(i,l); return; } else { if(blocks[i-1][l-1].ifOpened==false) {looping((i-1),(l-1));} if(blocks[i-1][l].ifOpened==false) {looping((i-1),l);} if(blocks[i][l-1].ifOpened==false) {looping(i,(l-1));} if(blocks[i][l+1].ifOpened==false) {looping(i,(l+1));} if(blocks[i+1][l-1].ifOpened==false) {looping((i+1),(l-1));} if(blocks[i+1][l].ifOpened==false) {looping((i+1),l);} if(blocks[i+1][l].ifOpened==false) {looping((i+1),l);} if(blocks[i+1][l+1].ifOpened==false) {looping((i+1),(l+1));} }}