简单地图障碍编辑器文件写入操作部分
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();
第一次用到这个是因为要做一个地图编辑器,用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();
相关文章推荐
- Android对文件的操作(简单的文件读取与写入)
- OC中(简单)自定义时间|操作文件部分一(文件的拷贝|归档与解归档)
- 文件部分-----(3)ASCII码文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- 文章标题 Java中io流的一些简单操作(包含文件复制,向硬盘中写入文本文件,以及io流高级应用序列化和反序列化)
- JXL简单操作xls表格文件--写入文件
- 向文件中写入数据的简单操作
- 以行形式写入文件并以行形式读取文件(不带缓存的文件操作且无部分读取)
- 在 Eclipse Workbench 之外使用 Eclipse GUI,第 3 部分: 添加操作、菜单和工具栏完成简单的文件资源管理器应用程序
- Java创建文件并向文件写入内容:I/0流简单操作
- 简单文件操作(Linux下C++实现) 打开,读取 写入 关闭
- java 文件的读取与写入(简单操作)
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 文件部分-----(6 )二进制文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- android文件的写入与读取---简单的文本读写context.openFileInput() context.openFileOutput()
- lua简单的文件写入日志
- C++ 简单的文件操作_适合初学者
- Objective-c:NSFileHandle类,创建流对象,对文件进行写入、读取的操作
- Scala深入浅出实战经典:18,Scala中文件的读取、写入、控制台输入操作代码实战
- 使用chmod改变文件属性简单操作g