注册 登录
编程论坛 VC++/MFC

如何动态生成扫雷的界面

诸葛欧阳 发布于 2015-05-12 17:00, 3733 次点击
在做扫雷游戏中如何不用拖拽按钮的方式而是动态生成的方式绘制扫雷界面
7 回复
#2
诸葛欧阳2015-05-12 17:03
就是用户可以指定雷区大小
#3
yangfrancis2015-05-12 18:52
用户指定雷区大小的话,这样看行不行.

const int TOP_MARGIN=10;const int LEFT_MARGIN=10;
const int WIDTH=10;
HWND tile[x][y];//x,y接受用户的输入值
for(int idx_x=0;idx_x<x;idx_x++)
{
      for(int idx_y=0;idx_y<y;idx_y++)
      {
            tile[x][y]=CreateWindow(TEXT("BUTTON"),TEXT(" "),
WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,LEFT_MARGIN+idx_x*WIDTH,TOP_MARGIN+idy_y*WIDTH,WIDTH,WIDTH,hwnd,(HMENU)((idy_y*x)+idx_x),NULL,NULL);
//这一行设的控件ID号是0到x*y-1的一维序列号,便于区分按钮点击事件点上了哪个按钮.并将按钮设置为矩阵.
      }
}
#4
yangfrancis2015-05-12 18:52
我用的是API,MFC的语法我搞不太清楚,你要用MFC编写的话还需要自己改一下语法
#5
诸葛欧阳2015-05-12 19:46
看来要动态内存申请来分配一个二维数组来指定雷区
#6
yangfrancis2015-05-13 11:19
以为你是要考虑怎么动态生成界面. 如果只是说内存如何分配的话应该还容易一些. 二维数组产生后用指定次数循环随机抽样来设置哪些元素有地雷
#7
诸葛欧阳2015-05-13 13:08
界面也要动态生成,问题是在界面大小变化时其他控件的大小和位置如何变化
#8
yangfrancis2015-05-13 17:04
这好像有点难。我只能想到利用二维数组的横纵下标来设置其他控件的横纵坐标。主要是针对雷区右方和下方的控件。比如一块砖宽度为WIDTH,右方控件的横坐标就设为WIDTH * x + MARGIN. 即便这样,还是得设置用户输入值的上限,不能让用户无节制地输入尽可能大的雷区。并且我觉得这样做的不确定因素有点多,不应该推荐。最好是所有命令都在窗体上方做成菜单,其他控件一个都不用。虽然我这种方法不能算解决问题,只能算回避问题,但还比较利于实际操作。
  如果非要做出控件,并照顾控件的位置,确实想不出什么好办法。
1