Sign-up....

有时间的来帮忙看看^_^谢谢了

#include<iostream>

#include<fstream>

using namespace std;

int map_w,map_h; //地图宽度,高度

unsigned char*map;

int title_num(int x,int y){return x*map_w+y;}//将 x,y 坐标转换为地图上块的编号

int title_x(int n){return n/map_w;}//由块编号得出 x,y 坐标

int title_y(int n){return n%map_w;}

int main()

{

int i,j;

ifstream fin("input.dat");

fin>>map_w>>map_h;

map=new unsigned char[map_w*map_h];

for(i=0;i<map_w*map_h;++i)fin>>map[i];

fin.close();

ofstream fout("output.dat");

for(i=0;i<map_h;++i)

{

for(j=0;j<map_w;++j)fout<<map[title_num(i,j)];

fout<<endl;

}

fout.close();

delete [] map;

system("PAUSE");

return 0;

}

这个程序从文件input.dat读取地图然后输出到output.dat文件上,编译的时候没出错,可是输出的时候老不对,帮忙看看,谢谢了,下面是读取文件

80 24

ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

o-----------------------------------------------------------------------------o

o--s--------------------------------------------------------------------------o

o----------------------------oooooooooooooo-----------------------------------o

o-----------------------------------------o-----------------------------------o

ooooooooooo-------------------------------o-----------------------------------o

o---------o------ooooooo-----oooooooooooooo-------oooooooo--------------------o

o----oooooo------o-----oooo-----------------------o------o--------------------o

o----------------o--------o-----------------------ooo ooo---------------------o

o----------------oooo--oooo---------------------------------------------------o

o--------------------------------oooooooooooooooooooooooooooooooooooooooooooooo

o-----------------------------------------------------------------------------o

o-----------------------------------------------------------------------------o

o-----------------------------------------------------------------------------o

oooooooooooooooooooooooooooooooooooooooooooo----------------------------------o

o-------o-----------------------------------------------------------ooooooooooo

o-------o---ooooooo--------------------------------------oooooooo-------------o

o-------o---------o--------------------------------------o------o-------------o

o-------ooooooooooo--------oooooooooo--------------------o------o-------------o

o--------------------------oe-------ooo------------------o------o-------------o

o--------------------------ooooo------o------------------o------o-------------o

o-------------------------------------o------------------o--------------------o

o------------------------------o------o------------------o--------------------o

ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

[2595 byte] By [msdn] at [2007-8-14 13:02:43]
# 1 Re: 有时间的来帮忙看看^_^谢谢了

21 6

ooooooooooooooooooooo

o--ooooooo--o

o--s----o

o--ooooo--o

o----o

ooooooooooooooooooooo

像这么小的地图可以正常输出,可大点的地图就不行了

foochow at 2005-5-13 18:26:16 >
# 2 Re: 有时间的来帮忙看看^_^谢谢了

这样的帖我喜欢...

如果学校批的话...

我就开始学游戏编程了.................

到时候大家支持..帮助

flying_dancing at 2005-5-13 18:41:54 >
# 3 Re: 有时间的来帮忙看看^_^谢谢了

map=new unsigned char[map_w*map_h];这里分配的空间太小了吧

flying_dancing at 2005-5-13 18:43:59 >
# 4 Re: 有时间的来帮忙看看^_^谢谢了

程序没出错的话我怀疑是你窗口的问题(显示范围不够,就换行显示), 你设置一下窗口的属性.

FromNoWhere at 2005-5-13 18:44:26 >
# 5 Re: 有时间的来帮忙看看^_^谢谢了

不好意思, 看错了, 你是文件输出的.

FromNoWhere at 2005-5-13 18:46:04 >
# 6 Re: 有时间的来帮忙看看^_^谢谢了

to:flying_dancing(小混混-_-) 是分配空间大小

我是输出到文件output.dat,应该不存在窗口问题吧

foochow at 2005-5-13 18:48:56 >
# 7 Re: 有时间的来帮忙看看^_^谢谢了

你忽视了文件中的换行符。

Panic_1 at 2005-5-13 19:11:48 >
# 8 Re: 有时间的来帮忙看看^_^谢谢了

那要怎么改,楼上的帮忙下,还有那小地图就可以不用考虑换行符了吗

foochow at 2005-5-13 19:23:20 >
# 9 Re: 有时间的来帮忙看看^_^谢谢了

要改两个地方:

1,文件打开方式要改成二进制方式,避免系统对换行符的特殊处理。

参考文章: http://www.vckbase.com/document/viewdoc/?id=1439

2,分配内存要分配文件大小而不是长乘宽

Panic_1 at 2005-5-13 19:33:52 >
# 10 Re: 有时间的来帮忙看看^_^谢谢了

好,我去看看先,多谢

foochow at 2005-5-13 20:17:07 >
# 11 Re: 有时间的来帮忙看看^_^谢谢了

晕咯,改半天还是不对,谁来帮忙下,谢谢了

foochow at 2005-5-13 20:48:13 >
# 12 Re: 有时间的来帮忙看看^_^谢谢了

mark

zhousqy at 2005-5-13 20:57:13 >
# 13 Re: 有时间的来帮忙看看^_^谢谢了

好,谢谢大家了^_^嘿嘿,

还有个问题就是为什么地图比较小的时候不考虑换行符问题,也可以正常输出,而地图大了就必须要考虑呢

foochow at 2005-5-13 21:14:52 >
# 14 Re: 有时间的来帮忙看看^_^谢谢了

to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))

还是不对咯,输出会有乱码

foochow at 2005-5-13 21:27:07 >
# 15 Re: 有时间的来帮忙看看^_^谢谢了

呵呵....我认为没换行

存入和取出是相反的...存入之前,在文件能显示...取出也应该是一样

----

只是猜测

flying_dancing at 2005-5-13 21:29:38 >
# 16 Re: 有时间的来帮忙看看^_^谢谢了

我就是把你的地图copy过来测试的,没问题啊。

你把我的源代码copy过去试多一次

horisly at 2005-5-13 21:29:38 >
# 17 Re: 有时间的来帮忙看看^_^谢谢了

不好意思咯,刚才搞错了,

foochow at 2005-5-13 21:37:13 >
# 18 Re: 有时间的来帮忙看看^_^谢谢了

还有为什么小地图可以一起读,而不用一行一行的读?^_^

foochow at 2005-5-13 21:39:10 >
# 19 Re: 有时间的来帮忙看看^_^谢谢了

我试怎么不对

这是结果output.dat

oooooooooooooooooooo

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

input.dat 存的是小的地图...

flying_dancing at 2005-5-13 21:44:34 >
# 20 Re: 有时间的来帮忙看看^_^谢谢了

小地图在我写的程序里面可以正常显示

foochow at 2005-5-13 21:51:12 >
# 21 Re: 有时间的来帮忙看看^_^谢谢了

to: horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))

小地图在你的程序里面怎么不能正常显示了

oooooooooooooooooooo

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

屯屯屯屯屯屯屯屯屯屯

foochow at 2005-5-13 21:55:25 >
# 22 Re: 有时间的来帮忙看看^_^谢谢了

呵呵,我也发现了。再研究研究,io这东西是挺烦的。

horisly at 2005-5-13 21:58:47 >
# 23 Re: 有时间的来帮忙看看^_^谢谢了

char* temp = new char[map_w];

fin.getline(temp,map_w);

delete[] temp;

删了,就没了..所以就不能保存了

flying_dancing at 2005-5-13 22:06:46 >
# 24 Re: 有时间的来帮忙看看^_^谢谢了

这个不是删除第一行吗,怎么大地图里面删除了就没事

foochow at 2005-5-13 22:11:29 >
# 25 Re: 有时间的来帮忙看看^_^谢谢了

UP。。。。。。。。。。。。

foochow at 2005-5-13 22:34:46 >
# 26 Re: 有时间的来帮忙看看^_^谢谢了

每次读的时候要比实际的字符多读一个。

fin.getline((char*)(map+i*map_w),map_w+1);

所以分配空间应该为:

map=new unsigned char[(map_w+1)*map_h];

horisly at 2005-5-13 22:39:17 >
# 27 Re: 有时间的来帮忙看看^_^谢谢了

哦,懂了,是我粗心了,谢谢你了horisly(SUN YAT-SEN UNIVERSITY (逸仙先生)) ^_^

foochow at 2005-5-13 22:57:22 >
# 28 Re: 有时间的来帮忙看看^_^谢谢了

好样的........

flying_dancing at 2005-5-13 23:01:09 >

C/C++

All Classified