纵横字谜(基本框架)
来源:互联网 发布:2016年网络购物人数 编辑:程序博客网 时间:2024/06/10 06:07
老婆最喜欢玩纵横字谜,比如对南方周末每期的《小强填字》总是津津乐道。最近我闲来无事,不妨做一个电脑上玩的填字,以博老婆一笑,^-^。
首先应该有一个TPuzzleItem类吧?这个表示谜题的单个条目,包括坐标、方向(横向还是纵向)、谜面、谜底等属性,对了,还应该保存解题人输入的答案。这个TPuzzleItem还应该有一些方法(没有方法的类,也就没有存在的必要了),比较重要的就是根据给定的逻辑坐标返回该单元格的字符(如果给定的坐标不属于该条目,就返回空),为了便于导入和导出,还应该有ExportToXMLNode和ImportFromXMLNode这两个方法,以便于根据XML节点来导入导出。
多个条目应该由TPuzzle类来管理,TPuzzle有一个私有的TList对象来维护条目列表,而不是让TPuzzle从TCollection继承,因为我实在不想过多去了解这个TCollection的内部结构,用委托而不是继承,也是俺一贯的做法。同样,TPuzzle也应该有ExportToXMLNode和ImportFromXMLNode这两个方法。每一个TPuzzle代表一个谜题,为了区分不同的谜题,它具有一个Guid属性。
TPuzzle与TPuzzleItem于GUI完全无关,它只是在提供谜题的逻辑,至于界面上如何实现,如何与用户交互这些工作,交给TPuzzleGUI来处理。TPuzzleGUI委托一个私有字段FPuzzle来处理逻辑方面的问题,自己接受用户的输入、负责在屏幕上绘制出谜题。TPuzzleGUI从TCustomControl继承,并具有WS_VSCROLLBAR和WS_HSCROLLBAR属性,这样可以显示很大的栅格给用户(虽然实际上可以用不到),由于并未对栅格建立二维数组,只是由TPuzzle来维护一组条目列表,所以占用的内存并不因屏幕上显示的栅格多少而增加。
界面的设计可简可繁,反正一切都是绘制出来的,由于绘制的小地方比较多,所以TPuzzleGUI也用一个缓冲区,先将所有要绘制的内容画在缓冲区中,再一次性画上屏幕,有点象DirectDraw的做法,但是这种小玩意就不用劳DX的大驾了吧。界面设计稍微细微一点,带给用户的感觉也就好一点,可惜俺不是美工,没办法把一切都画得那么完美:-(
还剩下一个如何保存多个谜题的问题,这种存储由TPuzzleContainer来完成,这是一个抽象类,才能方便俺以后改变存储方式,比方说今天用XML来存储,明天想通了,或许就用个ACCESS库了呢。抽象工厂模式应该是要用到的吧,虽然现在还看不出有什么好处,呵呵。
- 纵横字谜(基本框架)
- 纵横字谜(重构)
- 纵横字谜的答案(uva 232)
- 纵横字谜的答案
- 纵横字谜的答案
- 纵横字谜的答案
- UVa 232 Crossword Answer(纵横字谜的答案)
- 题解:纵横字谜的答案(UVa 232)
- 纵横字谜的答案 (UVa232)
- UVA-3.6-纵横字谜-232
- UVa232 纵横字谜的答案
- 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
- 习题3-6 纵横字谜的答案(Crossword Answers) UVa 232
- 纵横字谜的答案(Crossword Answers)
- 习题3.6 纵横字谜的答案 UVa232
- UVa 232 纵横字谜的答案
- 纵横字谜的答案(Crossword Answers UVa232)
- 算法竞赛入门经典(第2版)习题3-6 纵横字谜的答案 Crossword Answers UVa232
- Web文件管理系统!
- Redhat9.0+Apache+Mysql+PHP典型配置
- Web文件管理系统!免费使用版
- Book Of The Week #20040728 - 《唐老鸭的幸福生活》[Jun.2004/人民邮电出版社]
- Log4j用法
- 纵横字谜(基本框架)
- 从Windows到Linux—— 快速上手指南
- 在视频格式转换中使用MMX和SSE指令集提高性能
- 软件考古学的有趣报告
- 电子钥匙
- ★ Eclipse 3.0 RC2 热键表 (中英对照版,Default) ★
- 求助,在线等答案!
- 使用open source产品组装你的web应用架构(struts+spring+hibernate)
- 使用 Microsoft .NET 的企业解决方案模式, 好书好书, 学习中