俄罗斯方块游戏笔记(二)——参数配置窗体
二、参数配置窗体
第一步
- 拖入两个GroupBox控件,gbKeySet(键盘设置)与gbEnvironmentSet(环境设置).
- 并拖入按钮与标签,将按钮属性ReadOnly--True ,最后一个是Label标签,其BorderStyle--3D.形成如下界面:
- 选中键盘设置那一排的全部txtBox控件,双击它们的KeyDown事件。
总结:
- 以前我们老师说它Tag几乎可以做任何事情,因为它是以object的方式来传递的。可以把一些控件的相关数据存放在TAG中,(之所以使用TAG,我认为是出于可以快速的访问与此控件相关的数据,或者说是因为你觉得临时的定义一个变量来存储那个控件的数据的话,有点麻烦,还不如将这个数据直接暂时储存在它的TAG属性中算了,免得去编写定义变量的代码.反正几乎每个控件都有TAG属性,你可以将相关控件的相关数据存放在TAG中。)
- KeyValue:获取 KeyDown 或 KeyUp 事件的键盘值(数字ascii值)。
- KeyCode:获取 KeyDown 或 KeyUp 事件的键盘代码(字符)。
- 综合2与3:KeyCode最为常用,记录了键盘上按了哪个键,当使用组合键时如ctrl+a,其值是"A";KeyData可以记录组合键,当使用组合键时如ctrl+a时,其值为"A,ctrl";KeyValue则是KeyCode的数字值,当使用组合键时如ctrl+a时,其值为65(A),注意不是97(a);注意:这三个属性对于字母键只记录其大写的值(不管你是否开启了caplock或是按下shift键),如果一定要区分到底是大小写,可以使用KeyChar来判断。
- 代码中将e.keyvalue的值赋给txtBox的Tag,再由txtBox的Tag赋给txtBox的Text,它估计是想用Tag来表示键的唯一性。而我是用如下代码直接给TEXT赋值:
第二步
- 双击背景色标签(lblBackColor)的Click事件,写如下代码:
第三步 存储用户选择的参数
1、选用XML方式存储数据,新建XML文件。
2、先写出大体的构造:
3. 再填入具体信息:
第四步 接下来添加对XML文件进行操作的类BlockInfo(在内存中存储方块信息)。
新建BlockInfo类,写如下属性与两个方法:
总结:
1.将数据存储到硬盘的方式:
2.使用BitArray的原因是:BitArray操作更快。其值为BOOL,是一个压缩数组。
3.由于在XML文件中是用String来存储这些信息的,所以代码中的两个方法必不可少。
第五步 添加一个新类InfoArr来存放这25个砖块。BlockInfo只是存放单个方块的信息.
1、新建类InfoArr,并添加两个字段,数组与length变量
2、继续添加两个索引器
3.继续给这个类添加一个StrToBit方法
4.继续添加Add方法(此Add方法有个重载)
总结:
以上类与方法的铺垫是为下面操作XML文件作准备,所有的方法都是为接下来节省代码量做准备。
第六步 添加Config类
1、修改引入的命名空间
2、添加私有变量,变量要与窗体上的按钮一一对应。
3.为每个字段添加一个属性,其中有三个属性需要修改,分别是CoorWidth(水平格子数)、CoorHeight(垂直格子数)、RectPix(方块像素)。
4.创建一个LoadFormXmlFile(),用来从XML文件中读取信息
注:
- 此xml设成了嵌入式文件,嵌入式文件的优点:打包时XML文件会嵌入到EXE文件中。缺点:不可以修改。
- 使用嵌入式文件的原因:考虑到发布游戏时只发布一个EXE文件,玩家拷贝这个游戏时,只需将EXE文件拷贝过去,即可以进入游戏。若玩家需要修改文件,只需在他的硬盘上生成一个XML文件,此时就有两个XML文件。我们读取文件时当然要先读取硬盘上的XML文件(if),若没有(else)就从嵌入式文件中读取。
- XmlTextReader是专门读取XML文件的读取类,其读取速度快,但只能向前读取,不能倒回。但在此用这个读取器已完全可满足我们的需要了。
5、使用xmlTextReader要将其加入TRY-CATCH-FINALLY模块内,无论有没读取都要关闭读取器(FINALLY中)
6、在TRY代码块中写如何读取XML文件中的内容.
注:Color是用索引器保存了,索引器的功能。索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。详见http://msdn.microsoft.com/zh-cn/library/6x16t2tx(v=vs.80).aspx
7、将数据存入XML文档中。
(1)将砖块信息存入XML文档
小结:
LoadXml()这个方法,是将XML文档加载到doc这个文档中。
(2 )将快捷键信息写入XML文档中
(3)将界面信息写入XML文档中[方法同上]
到此,与外部文件的操作就结束了。
第七步 继续完成我们的设置窗体
1、在参数配置窗体里添加一个私有成员变量(对Config类进行实例化)
准备使用这个类进行信息的读取与保存操作
2、双击Config窗体的Load事件,这个事件是在窗体载入的时候发生。我们要在这里对XML文件进行载入,并初始化窗体。首先进行砖块样式读取。
此处Info是Config类的一个属性
3、读取快键键,初始化快捷键。