开发者社区> 问答> 正文

菜鸟问题 扫雷游戏? 400 报错

菜鸟问题 扫雷游戏? 400 报错

我希望 按下按钮的时候 用个一矩形 把这个按钮给铺上 我确实 给铺上了 但是 当我在按别的按钮的时候 原先铺上的矩形又变成按钮了 我百思不得其解 请哪位大牛 帮着 解决一下 求救!!!!!!!

 

#include<windows.h>
#include<time.h>

//----------------雷和按钮的节点------------------------------
typedef struct Node
{
 int x;
 int y;
}Node;

//----------------定义全局变量---------------------------
const int buttonNumber=20;    //每行每列按钮的数目
const int buttonLenght=30;    //按钮的长宽高

Node Lei[400];
Node button[buttonNumber][buttonNumber];

int leiCount=0;     //雷的个数
int buttonCount=0;

 

HDC hdc;
HWND hwnd;
HINSTANCE hInst;
PAINTSTRUCT ps;


//----------------扫雷 函数声明-----------------------------

//埋雷地点是否重复
int chongfu(int i)
{
 for(int j=0;j<leiCount;j++)
 {
  if(j==i)
  {
   continue;
  }
  else
  {
   if((Lei[i].x==Lei[j].x)&&(Lei[i].y==Lei[i].y))
   {
    return TRUE;
   }
  }
 }
 return FALSE;
}

//初始化游戏 即 埋雷 画地图
void InitGame()
{
 int count=40;   //把雷都确定
 srand((unsigned)time(NULL)); 
 for(int i=0;i<count;i++)
 {
  Lei[i].x=rand()%20*buttonLenght;
  Lei[i].y=rand()%20*buttonLenght;
  leiCount++;
  //while(chongfu(i))     //记着要检查 雷是否有重复的 (     注意!!!!!!!!!   )  都弄完了 在写
  //{
  // Lei[i].x=rand()%20*buttonLenght;
  // Lei[i].y=rand()%20*buttonLenght;
  //}
 }

 hdc=GetDC(hwnd);    //把按钮都弄上去

 for(int n=0;n<buttonNumber;n++)
 {
  for(int m=0;m<buttonNumber;m++)
  { 
 
   button[n][m].x=n*buttonLenght;
   button[n][m].y=m*buttonLenght;
   CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,button[n][m].x,button[n][m].y,buttonLenght,buttonLenght,hwnd,(HMENU)buttonCount,hInst,NULL);
   buttonCount++; 
  }
 }
}

//点击按钮的反应
void dianji(WPARAM wParam)
{
 int x=wParam/20*30;
 int y=wParam%20*30;

 Rectangle(hdc,x,y,x+buttonLenght,y+buttonLenght);    //用个矩形 把按钮铺上
}

//雷炸掉了
void bomb();

//应用程序窗口主体函数

char className[20]="windowsMode";
LRESULT CALLBACK wndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
 WNDCLASSEX wndClass;
 HWND hWnd;
 MSG msg;
 hInst=hInstance;

 wndClass.cbClsExtra=0;
 wndClass.cbSize=sizeof(WNDCLASSEX);
 wndClass.cbWndExtra=0;
 wndClass.hbrBackground=(HBRUSH)COLOR_WINDOW;
 wndClass.hCursor=NULL;
 wndClass.hIcon=NULL;
 wndClass.hIconSm=NULL;
 wndClass.hInstance=hInstance;
 wndClass.lpfnWndProc=wndProc;
 wndClass.lpszClassName=className;
 wndClass.lpszMenuName=NULL;
 wndClass.style=CS_VREDRAW|CS_HREDRAW;

 RegisterClassEx(&wndClass);

 hWnd=CreateWindow(className,"新窗口",WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU,400,100,600,600,NULL,NULL,hInstance,NULL);
 hwnd=hWnd;

 if(!hWnd)
 {
  MessageBox(hWnd,"创建窗口失败!","提示",MB_OK);
 }
 else
 {
  ShowWindow(hWnd,nShowCmd);
 }

 //===========游戏初始化区域============

 InitGame();

 //===========消息循环==================
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return 0;
}
LRESULT CALLBACK wndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 switch(message)
 {
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 case WM_COMMAND:
  dianji(wParam);   //用个矩形 给按钮 铺上 但是 卧铺上了之后 再按一个别的按钮 原先 铺的 就消失了 请哪位 大牛 帮着弄弄啊 就是让我原先按下的按钮不消失 求解!!!
  break;
 }
 return DefWindowProc(hWnd,message,wParam,lParam);
}


 

展开
收起
爱吃鱼的程序员 2020-06-04 16:17:57 463 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

     CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON| BS_OWNERDRAW,button[n][m].x,button[n][m].y,buttonLenght,buttonLenght,hwnd,(HMENU)buttonCount,hInst,NULL);

    2020-06-04 17:47:21
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
你的游戏,真的安全吗 立即下载
你的游戏,真的安全么? 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多