算法简介

  从游戏规则可以看出,无论是使棋子消失,还是统计得分,都需要判断连在一起的棋子是哪些。现在,我简要介绍一下我的算法。这种算法思路清晰,容易理解,代码量较小,程序设计简单;缺点是执行效率较低。但由于本程序对速度要求很低,使用这种算法并不能感觉到速度的不足。
   
  1、在鼠标所在位置的棋子上打上一种记号(上图中标有星号的棋子)。
  2、搜索棋盘找到所有打有第一种记号的棋子,将棋子打上第二种记号(上图打勾的棋子)。然后查询该棋子上、下、左、右的棋子,如有没有被打上记号且和它同色的,就打上第一种记号(上图中的星号)。
  3、重复第二步,直到棋盘中不再存在打第一种记号的棋子为止。这时,所有标有第二种记号的棋子就是连成一片的棋子了(打勾的棋子)。
  那么,记号打在什么地方呢?在Doc类中,我们构造了一个数组,保存棋盘数据;是否还要在构造一个数组来保存“记号”呢?其实大可不必。棋盘上每个点有“红”、“绿”、“蓝”、“无”四种状态,需要使用两个二进制位来记录,而我们保存点使用的变量是char型,有8位。我们只要把它的前几位随便拿两位出来就可以供打记号用了。