TicTacToe游戏规则很简单,在一个3*3的方格中,游戏双方轮流占领其中的方格.当一方占有连续的3个方格时(水平\垂直或对角均可),则获胜,游戏结束。
Game类封装了本游戏用到的相关逻辑和算法,其中所有可能取胜的位置组合和所有可能成为平局的情况的代码不是很明白,向各位前辈请教,望赐教!class Game
{
  //所有可能取胜的位置组合
  private final int[] WINS=
  {
    //水平排列
    bit(0)|bit(1)|bit(2),
    bit(3)|bit(4)|bit(5),
    bit(6)|bit(7)|bit(8),
    //垂直排列
    bit(0)|bit(3)|bit(6),
    bit(1)|bit(4)|bit(7),
    bit(2)|bit(5)|bit(8),
    //两个对角线
    bit(0)|bit(4)|bit(8),
    bit(2)|bit(4)|bit(6)
  };
  //所有可能成为平局的情况
  private final int DRAWN_GAME=
    bit(0)|bit(1)|bit(2)|
    bit(3)|bit(4)|bit(5)|
    bit(6)|bit(7)|bit(8);         ......
  private int bit(int i)
  {
    return 1<<i;
  }
}请问:数组WINS和常整形变量DRAWN_GAME为什么可以分别表示可能出现的取胜组合和平局情况?

解决方案 »

  1.   

    数组wins里表示所有可能取胜的情况时一方棋子所在的位置,判断在这几个位置是不是一方的棋子,来分辨结果。bit(0)表示在棋盘最左上角的位置,依此类推。
      

  2.   

    saighost(光仔来了) :
        多谢你的回复,不过,你说的表示我也明白,可能是我没有说清楚.我不明白的地方是:为什么这样就可以表示相应位置旗子,原理是什么?
      

  3.   

    是不是deitail的书?他们父子很喜欢用这个做例子。