华容道问题求解_详细设计(7)之布局设计器

本文介绍了如何通过用户输入控制华容道棋局布局的设计,使用Json存储布局,以及实现布局之间的转换检测。作者展示了从布局录入、控件生成、头像功能到布局变换的研究过程,最终目标是理解操作系统工作原理。

(续上文)
尽管横刀立马是经典的也是广为人知的一个华容道开局,这并不意味着,它是唯一的。笔者网搜了一下,发现其经典开局居然有很多。下面开局转自知乎。

知乎华容道经典48开局

48开局如下图所示:
在这里插入图片描述

布局输入

一开始笔者想采用类似VS界面输入控件的方法,发现这样做比较麻烦,就采用了由用户自己输入类型的方法进行布局的录入。录入时,只需要输入对应的类型的,系统自动完成棋子的其余属性的设定。棋子类型前文曾经提起过,为了方便描述再列举如下:

 ///  _type = 5 , the blank block on the board, size is (1,1) (width, height)
 ///        = 1, the soldier block , size is (1,1)
 ///        = 2, the vertical blcok, size is (2,1) 张飞,赵云,马超,黄忠 
 ///        = 3, the horizaontal blcok , size is (1,2) 关羽
 ///        = 4 , the biggest block , size is (2,2) 曹操
 ///        = 0, null, this area is out of the board 
为了保持一致性,布局时的底层输入控件也采用了一个5*4的控件数组,这样在映射实际的布局时,转换比较方便。

控件动态生成,并同时增加了按键的事件处理代码。设计器的界面如下:

在这里插入图片描述
区域1 中进行基本布局的录入,区域2 显示效果,并且可以录入每个棋子的名称。录入时,只需要录入棋子左上角的类型即可,其余部分,程序自动完成。输入部分棋子时的截图如下
在这里插入图片描述

布局保存

保存采用了现成的 三方库 Newtonsoft,它将对象的实例转化为Json格式的文件进行保存。我们仅需把一个对象的定义和实例交给它处理就可以了。

代码实现

包括两部分,文字版和头像版。头像版中,每个棋子将对应一个头像文件。

控件生成

为了便于后续的操作,控件是生成在容器里。为了支持各种容器,使用了模板。

       private void InitDesignControls<T1,T2>(T2 containerCtrl, string preFix) where T1 : Control, new() where T2 : 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值