Java Tic Tac Toe AI不工作

Java Tic Tac Toe AI不工作,java,artificial-intelligence,tic-tac-toe,Java,Artificial Intelligence,Tic Tac Toe,我的电脑播放器的人工智能代码没有按预期工作。我想让它随机移动,但阻挡对手的获胜回合。然而,它有时会完全停止工作,而其他时候即使没有即将到来的赢连击,也会执行特定的移动。我的电脑AI代码如下 public void compturn() { count++ ; if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)

我的电脑播放器的人工智能代码没有按预期工作。我想让它随机移动,但阻挡对手的获胜回合。然而,它有时会完全停止工作,而其他时候即使没有即将到来的赢连击,也会执行特定的移动。我的电脑AI代码如下

public void compturn()
    {


        count++ ;

        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
        if (b1.getText() == b2.getText() && b2.getText() != "" && b3.getText() == "")
            {
                b3.setText(letter);
                b3bool = false ;
            }
            else if (b4.getText() == b5.getText()  && b6.getText() == "")
            {
                b6.setText(letter);
                b6bool = false ;
            }
            else if (b7.getText() == b8.getText() && b9.getText() == "")
            {
                b9.setText(letter);
                b9bool = false ;
            }
            else if (b1.getText() == b4.getText() && b4.getText() != "" && b7.getText() == "")
            {
                b7.setText(letter);
                b7bool = false ;
            }
            else if (b2.getText() == b5.getText() && b8.getText() == "")
            {
                b8.setText(letter);
                b8bool = false ;
            }
            else if (b3.getText() == b6.getText() && b9.getText() == "")
            {
                b9.setText(letter);
                b9bool = false ;
            }
            else if (b1.getText() == b5.getText() && b5.getText() != "" && b9.getText() == "")
            {
                b9.setText(letter) ;
                b9bool = false ;
            }
            else if (b3.getText() == b5.getText() && b7.getText() == "")
            {
               b7.setText(letter);
               b7bool = false ;
            }
            else
            {
                randomMove();
            }
        }


    public void randomMove()
    {
       int randomnum = (int)(Math.random() * 10);
        if(randomnum == 1 )
        {
            if(b1.getText().equals("X") || b1.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b1.setText(letter);
            }
        }
        if(randomnum == 2 )
        {
            if(b2.getText().equals("X") || b2.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b2.setText(letter);
            }
        }
        if(randomnum == 3 )
        {
            if(b3.getText().equals("X") || b3.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b3.setText(letter);
            }
        }
        if(randomnum == 4 )
        {
            if(b4.getText().equals("X") || b4.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b4.setText(letter);
            }
        }
        if(randomnum == 5 )
        {
            if(b5.getText().equals("X") || b5.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b5.setText(letter);
            }
        }
        if(randomnum == 6 )
        {
            if(b6.getText().equals("X") || b6.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b6.setText(letter);
            }
        }
        if(randomnum == 7 )
        {
            if(b7.getText().equals("X") || b7.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b7.setText(letter);
            }
        }
        if(randomnum == 8 )
        {
            if(b8.getText().equals("X") || b8.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b8.setText(letter);
            }
        }
        if(randomnum == 9 )
        {
            if(b9.getText().equals("X") || b9.getText().equals("O"))
            {
                randomMove();
            }
            else 
            {
                b9.setText(letter);
            }
        }


     }
我的主游戏的完整代码在这里

        public int oneplayergame()
        {
            // ----=---------------------- CREATING ALL JBUTTONS ON THE GAME SCREEN AND ADDING ACTION LISTENERS AND REACTIONS -----------------------------------------

            b1 = new JButton("");
            b1.setToolTipText("Mark this box");
            b1.setFont(TToeFont);
            b1.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                   if (b1bool == true){ count++;
                    if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                b1.setText(letter);
                b1bool = false ;
                calculatevictory();
                compturn();                    
                processturn();

            }}});

            b2 = new JButton("");
            b2.setFont(TToeFont);
            b2.setToolTipText("Mark this box");
            b2.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                   if (b2bool == true){ count++;
                    if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                b2.setText(letter);
                b2bool = false ;
                calculatevictory();
                compturn();                    
                processturn();
            }}
                });


            b3 = new JButton("");
            b3.setToolTipText("Mark this box");
            b3.setFont(TToeFont);
            b3.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                     if(b3bool == true){
                         count++;
                    if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                b3.setText(letter);
                b3bool = false ;
                calculatevictory();
                compturn();                    
                processturn();
            }}

            });

            b4 = new JButton("");
            b4.setToolTipText("Mark this box");
            b4.setFont(TToeFont);
            b4.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                    if(b4bool == true){

                    count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b4.setText(letter);
                    b4bool = false ;
                    calculatevictory();
                    compturn();                    
                    processturn();
                }}
            });

            b5 = new JButton("");
            b5.setToolTipText("Mark this box");
            b5.setFont(TToeFont);
            b5.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                    if (b5bool == true){
                        count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b5.setText(letter);
                    b5bool = false ;
                    calculatevictory();
                    compturn();                    
                    processturn();
                }}
            });

            b6 = new JButton("");
            b6.setToolTipText("Mark this box");
            b6.setFont(TToeFont);
            b6.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                    if (b6bool == true){
                        count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b6.setText(letter);
                    b6bool = false ;
                    calculatevictory();
                    compturn();                    
                    processturn();
                }}
            });

            b7 = new JButton("");
            b7.setToolTipText("Mark this box");
            b7.setFont(TToeFont);
            b7.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                    if (b7bool == true){
                        count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b7.setText(letter);
                    b7bool = false ;
                    calculatevictory();
                    compturn();                    
                    processturn();
                }}
            });

            b8 = new JButton("");
            b8.setToolTipText("Mark this box");
            b8.setFont(TToeFont);
            b8.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                    if(b8bool == true){
                        count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b8.setText(letter);
                    b8bool = false ;
                    calculatevictory();
                    compturn();                    
                    processturn();
                }}
            });

            b9 = new JButton("");
            b9.setToolTipText("Mark this box");
            b9.setFont(TToeFont);
            b9.addActionListener(new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent onclickb1)
                {
                   if(b9bool == true){
                       count++;
                        if(count == 1||count == 3 || count == 5 || count == 7 || count == 9 || count == 11)
                    {
                      letter = "O" ;

                }
                else if ( count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
                {
                    letter = "X" ;                  

                }
                    b9.setText(letter);
                    b9bool = false ;
                    calculatevictory();
                    compturn();
                    processturn();
                }}
            });

            //CREATING GAME SCREEN LAYOUT


            //CREAING GAME SCREEN CONTENT PANE AND ADDING BUTTONS TO IT



        // This method checks if someone won the game every time you click a button 

        public void calculatevictory(){
            if (b1.getText() == b2.getText() && b2.getText() == b3.getText() && b1.getText() != "")
            {
                win = true ;
            }
            else if (b4.getText() == b5.getText() && b5.getText() == b6.getText() && b4.getText() != "")
            {
                win = true ;
            }
            else if (b7.getText() == b8.getText() && b8.getText() == b9.getText() && b7.getText() != "")
            {
                win = true ;
            }
            else if (b1.getText() == b4.getText() && b4.getText() == b7.getText() && b1.getText() != "")
            {
                win = true ;
            }
            else if (b2.getText() == b5.getText() && b5.getText() == b8.getText() && b2.getText() != "")
            {
                win = true ;
            }
            else if (b3.getText() == b6.getText() && b6.getText() == b9.getText() && b3.getText() != "")
            {
                win = true ;
            }
            else if (b1.getText() == b5.getText() && b5.getText() == b9.getText() && b1.getText() != "")
            {
                win = true ;
            }
            else if (b3.getText() == b5.getText() && b5.getText() == b7.getText() && b3.getText() != "")
            {
                win = true ;
            }
            else 
            {
                win = false ;
            }
        }

        // This method sends the win message




            public void processturn()

        }
         // This method resets all game variables 

        public void resetgame()
        {
         count = 1 ; 

         b1bool = true ;
         b2bool = true ;
         b3bool = true ;
         b4bool = true ;
         b5bool = true ;
         b6bool = true ;
         b7bool = true ;
         b8bool = true ;
         b9bool = true ;
         win = false ;
         gameinit = true ;
         b1.setText("");
         b2.setText("");
         b3.setText("");
         b4.setText("");
         b5.setText("");
         b6.setText("");
         b7.setText("");
         b8.setText("");
         b9.setText("");
        }


    public void compturn()
    {
        }


    public void randomMove()
    {























     }
}

欢迎来到AI。。。有很多方法可以做到这一点。我给你一些建议

我想计数是用来决定轮到谁了。我建议您创建一个整数“回合”,然后简单地执行以下操作:

turn = 1 -turn
…当前递增计数的位置。如果是0,则轮到o,否则是x。然后可以删除这两个长if语句。(您也可以使用布尔标志,而不是每次都使用它,例如so turn=!turn。)

现在剩下的。。。我看你没有数组。你用起来舒服吗

如果是这样的话,请定义获胜顺序。例如:

int[][] win = new int[][]{{1,2,3}, {4,5,6}, {7,8,9}, {1,4,7}, ...}
然后,你要做的就是确定你是否能赢,去看看你是否有两个代币在spot win[i][0]、win[i][1]或win[i][2]中。如果第三个位置空了,你可以赢,应该搬到那里

如果你赢不了,重复以上步骤进行防守

如果你不需要防守,也无法获胜,那么就在中路移动。如果取中心,则取一个角,否则随机移动

这将给你一个人工智能,有时仍然会丢失,但会显示一些智能。如果你真的想建立一个无与伦比的东西,看看minimax搜索算法


祝你好运

欢迎来到堆栈溢出!所以,这不是一个“调试我的代码”的网站-如果这是你正在寻找的,你可能应该聘请专家为你做这件事。如果您在处理该问题时遇到特定的技术问题,请随意编辑相应的问题。是否有堆栈跟踪@RoboticMoneylender@Thomas不,一点也没有。我建议您学习调试代码或编写单元测试,以找出哪些测试用例通过,哪些失败。要求我们为你做这一切不是这个网站的目的。就像上面提到的@MichaelPetrotta,如果你有具体的问题,那么你可以从这里得到帮助。