本部分的程序代码下载:http://www2.cnblogs.com/Files/zhenyulu/HRD_64_HashTable_1.rar
在修改了那么多代码后需要再重新审视一下现在的程序,其实现在的程序代码已经显得很不协调,因为在修改的大量的数据结构后,算法也应当尽量贴近新的数据结构。所以我重新设计了新的布局表示以及棋子的算法。
在原有的华容道程序中,我使用了大量的Position结构来表示棋子的坐标值(x,y)。并且棋子是否可以上下左右移动也是通过计算坐标值得到的。当时之所以选择坐标表示是因为:要计算Int32的布局表示,必须按照坐标进行排序,根据棋子序列得出这个int值。为了便于排序操作,我分离了横、纵坐标。但是当改用Int64来表述布局后,这个坐标的分离就显得多余而且累赘了。为了计算方位不得不将两个变量(x,y)参与到运算当中,可我们完全可以用一个变量实现所有的功能。
基于上述目的,我重新设计了一个全新的坐标体系:
之所以这么设计一个棋局的坐标体系,是因为当棋子可能移出边界时,系统能够及时判断出来。有了这个坐标体系,棋子方位的判断可以变得非常容易。
比如要将坐标为16的棋子上移,只要将其坐标减8就行了。而原来的坐标体系要重新计算x与y的值。针对新坐标设计的程序要减少很多运算次数,进而提高整体效率。
调整后的程序运行时间缩短到了0.6秒。