您的位置:首页 > 其它

简单地图障碍编辑器文件写入操作部分

2008-11-25 16:00 274 查看
嘿嘿,第一次写这东西。

第一次用到这个是因为要做一个地图编辑器,用0和1来代表地图中的障碍和可行区域,二用鼠标点击来指示出地图中的哪个区域是否可行。

首先要建立一个网格,然后把网格和图片对应上,我的例子中是 15*20,长宽各为32像素的网格,也就是说将地图也给显示成这种规格,需要用来和二维数组关联

然后就取得鼠标单击消息咯GetCursorPos(&pt);用这个函数,然后要转换窗口坐标系 ScreenToClient(hwnd, &pt);用这个函数,pt就是一个POINT结构

typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

也就是指的鼠标指针的坐标。

由于网格是平均划分的,所以就用int w=pt.x/32来得到当前鼠标点击在网格中的哪行,用int h=pt.y/32来得到当前鼠标点击在网格中的哪列。

但是一定要注意咯,在二维数组里要这么写a[pt.y/32][pt.x/32] ;

现在其实已经完成一大部分了,就差在把鼠标点击消息的值转换成0或1存到文件中。

首先要在全局定义一个二维数组int a[15][20];//用我的例子中的网格

然后要在初始化部分将数组中的每个元素都赋为1

再转到消息处理那里,因为我们提前确定要使用鼠标左键单击消息,所以在这里来编写我们需要的东东。

case WM_LBUTTONDOWN:

{

if(a[pt.y/32][pt.x/32]==1)

a[pt.y/32][pt.x/32]=0;

else a[pt.y/32][pt.x/32]=1;

}break;

其实也就是通过鼠标的坐标来判断数组中的元素值,然后使之改变

最后也就是将二维数组中的个个元素输出到file.txt中

我的方法是将二维数组中的每个元素按照原有的顺序存到一个一维数组中

ofstream temp("file.txt");//打开文件,如果没有则系统会自动为我们创建一个

int m=0,b[15*20];

for(int i=0;i<15;i++)
for(int j=0;j<20;j++)
{
b[m++]=a[i][j];
}

然后在C++已经给我们重载好的运算符<<来完成对文件的操作。

for(int n=0;n<15*20;n++)
{
temp<<b
;
}

当然这样输出之后所有的0和1都会连成一片,为了看起来更直观,我们可以改成

for(int n=0;n<15;n++)
{
for(int k=0;k<20;k++)
temp<<b[n*20+k];
temp<<endl;
}

最后一定要记得将缓存区的东东也要存入文件哦~~~!

temp.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐