杂论五随笔-四十

2020-03-26 chapter

2020.3.26 中午 用C++写的部分为:最基础的为unit类,表示一个元胞对象,但是元胞对象总是可以复用的。所以又有网格对象webfield类,其初始化时会检索已有的元胞,并为元胞写入一个动态属性:即附属于该表格的值(这个应该是动态的,用完即释放),但数据需要依存于元胞对象上。同时还有cycle类,也是初始化或生成网格时需要扩展的。还需要有scaner扫描器类,scaner应该是附带不同操作的,如何实现操作先看网格的基本结构。首先,webfield网格对象应该是一个指针集合(指针们应该是从中心到四周一圈一圈开始排列的),指向了unit上的对应于某表格的某个状态值(N,暂时不定义为True或False,方便以后使用新规则),webfield网格对象的方法是:1.生成一个栈,从中心开始扫描,首先,例如,确定一个圈数计数器,当前为第一圈,把C1_1放进栈里,检测是拐角,放一个“拐角”标记,C1_2,C1_3,C1_4,同理,同时,结束时放一个“第N轮结束”的栈块,然后将计数器转到第二圈,把C2_1放进栈里,放一个“拐角”,放C2_2进去,跟一个“特殊部位”标记。这可以理解为一次预扫描。至于拐角标记等,分为第一拐角,第二拐角,第三拐角,和第四拐角。四种拐角的方向设计都有规律可循。注意,这些栈块标记,不纯粹是只表明开始或结束等的,拐角和特殊部位会标记其在圈内的特殊位置,如拐角-1位和加1位。而结束栈块,则会表明这一轮的圈序。然后一个长栈可能就生成了。2.接下来是对该栈的读取,这里先讲推演算法的实现,由于放置位置问题,这时候是反向读取的,即从最外圈开始读取的。比如4圈的图案,先从左上角下方第一个元胞开始逆时针读取,先读取到第4圈的结束标识符,圈数记到4,然后读取到特殊部位块,调用特殊部位方法。