Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以使用jGraphT检查Tictaoe游戏的获胜条件?_Java_Tic Tac Toe_Jgrapht - Fatal编程技术网

Java 是否可以使用jGraphT检查Tictaoe游戏的获胜条件?

Java 是否可以使用jGraphT检查Tictaoe游戏的获胜条件?,java,tic-tac-toe,jgrapht,Java,Tic Tac Toe,Jgrapht,我找到了这个有效的解决方案: private int[] winningPatterns = { 0b111000000, 0b000111000, 0b000000111, // rows 0b100100100, 0b010010010, 0b001001001, // cols 0b100010001, 0b001010100 // diagonals }; /** Returns true if thePlayer wins */ private boo

我找到了这个有效的解决方案:

private int[] winningPatterns = { 0b111000000, 0b000111000, 0b000000111, // rows
        0b100100100, 0b010010010, 0b001001001, // cols
        0b100010001, 0b001010100 // diagonals
};

/** Returns true if thePlayer wins */
private boolean hasWon(int thePlayer) {
    int pattern = 0b000000000; // 9-bit pattern for the 9 cells
    for (int row = 0; row < 3; ++row) {
        for (int col = 0; col < 3; ++col) {
            if (cells[row][col].content == thePlayer) {
                pattern |= (1 << (row * 3 + col));
            }
        }
    }
    for (int winningPattern : winningPatterns) {
        if ((pattern & winningPattern) == winningPattern)
            return true;
    }
    return false;
}
private int[]winningPatterns={0b111000000,0b000111000,0b000000111,//行
0b100100100、0b010010010、0b001001001、//cols
0B100010011,0b001010100//对角线
};
/**如果玩家获胜,则返回true*/
私有布尔值haswen(整数层){
int pattern=0b000000000;//9个单元格的9位模式
对于(int行=0;行<3;++行){
用于(整数列=0;列<3;++列){
if(单元格[行][col].content==图层){

模式|=(1对于25乘25的电路板,我认为您的方法是可行的,但改进方法如下

  • 在用户添加片段时创建模式,因为这样只需要花时间遍历winningPatterns数组

  • 为了改进第二部分,您可以尝试更有效地存储它。以一种可以同时检查多个赢模式的方式存储赢模式。 例如,如果第一个位置为0,则它可以从Winning Patterns中删除3种可能性,而不是仅删除一种(111000000100100010001)

  • 你可以通过检查最有可能正确的位置来改进平均情况。例如,玩家有4种方法可以通过将棋子放在中间而获胜,所以按顺序检查

  • 如果你将玩家的位置存储在一个单独的数组中,其中p1Tiles和p2Tiles。那么这可能会大大增加平均情况,因为大多数情况下,棋盘都是空的。在棋盘重置之前,只有一个游戏实例的棋盘是满的

  • 你实际上不需要检查玩家赢得的所有棋子,你只需要检查当前用户放置的棋子是否成功。因此,使用此方法,你只需要检查最坏情况下的12个其他点,即使棋盘大小为99..999 x 99..999。(12因为当前插槽周围有所有插槽,加上如果有两个相同颜色的插槽在旁边,则必须查看以下插槽)


  • 这看起来非常优雅--您还想要什么?我想在图形的设置上投入更多,然后可以简单地调用myGraph.isItWon()这种方法很好,可以轻松扩展到64个单元(即8x8)板。老实说,这看起来很棒。我想说可以使用它。