菜鸟问题 扫雷游戏

发布于 2021-11-13 17:57:59 字数 4701 浏览 720 评论 0

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

 

#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);
}


 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文