每一个关卡地图都包括二个场景文件,出场对象数据文件.dat和地图障碍模型文件.map,如1*1.dat,1*1.map,场景文件是用LoadMap()来读取的,它的程序作用是用来初始化地图场景,这是大体上的说法,细一点说,它的最终的程序作用是给要出场的各个man[i]的所有分量赋值,.map障碍文件的读取LoadZa()为A*所用,是第七章以后的内容,(书中提到的场景一词就是指.dat中定义的Rs个对象man[i]+卷动中的地面背景,为什么这样说呢,因为.dat中同时定义有地面背景和各个man[i],至于"卷动中的地图"的说法你看我的系列文档的"穿越众林"篇就清楚了,相比之下,.map才是真正的地图数据所在,才是真正的地图主体,因为它指明了地图最本质的特征,即哪里可以去哪里不能去,而.dat只是出场的各个man[i]数据所在,是场景主体,如人或兽,静物等以及它们的特征值,按照OPP用对象和类来描述客观世界的做法,类是一个特殊的数据结构体,它跟普通的数据结构如这里的man[i]不一样,在C++中,类的定义形式跟构造体很为相似,类的概念的提出就是参照构造体来的,但是类在OPP的技术规范里的发展已远远超出了构造体的意义,到后来就是二个在本质上有区别的东西了,假设这本书里的man[i]是以类的形式被定义和以它的实例被构造的,而不是以普通的数据结构形成出现的,那么man[i]在现实中的表示就是一个活生生的人物对象(或者说人物形象),它们各自的属性分量决定了它们的外表,它们的成员函数决定了它们的动作行为,而它在计算机内存中的表示只是man[i]对应的内存块,这个实体的内存块由man[i]的各个分量,也就是变量构成,我们知道变量就是内存单元,去学习OPP的对象模型学吧)由于.dat是文件方式的文件,可以手写也可以用地图编辑器达成)注意:人始终是每个场景第一个出场的man[i],此时man[i]=man[0],LoadMap()是如何通过读取对应的.dat来达到初始化所有的man[i]的各个属性值的呢(即man[i]结构的各个分量如fw,js等)?这个函数用了标准的从一个.txt文件中读取数据到变量的方法(.dat也是.txt文件),这个方法在66页读取偏移值时也用过,这里有大量的数据要读,Rs越多对应的出场对象也就越多,man[i]结构分量初始化的工作量也就越大,在MFC中,.txt文件的读写存在一个"读写头"的概念,由于每个man[i]的特征值都有很多(97页),要对Rs个man[i]的每个分量都通过这个函数赋于初始值(这些初始值是变量,以后可能会发生变化),读取.dat文件中的对应数据只完成了部分特征值的赋于,另外的就要靠程序来赋于,再来谈"读写头",读写头首先在第4行,第5行转到第10行,在一个循环里(实际上LoadMap()对各个man[i]的各个属性赋值的工作是由这个循环体和循环体外的代码这二部分来共同完成的,前面说到的读取.dat只完成了部分属性值的赋于,实际上.dat文件的读取就是由这个循环完成的,.dat文件只给出了大部分的属性值,另外的属性值就由循环体外的代码来手工赋于)给各个对象(man[0]~man[rs])的jisu,lb,js,p,xix,yiy赋值..