Java Tic Tac Toe AI 不工作

我的计算机玩家AI代码未按预期工作。我希望它能随机移动,但同时能阻止对手即将获胜的回合。然而,有时它完全停止工作,其他时候即使没有即将获胜的组合,它也会进行特定的移动。我的计算机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()        {            // ----=---------------------- 创建游戏屏幕上的所有JButton并添加动作监听器和反应 -----------------------------------------            b1 = new JButton("");            b1.setToolTipText("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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("标记此框");            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();                }}            });            //创建游戏屏幕布局            //创建游戏屏幕内容窗格并将按钮添加到其中        // 每次点击按钮时,此方法检查是否有人赢得了游戏         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 ;            }        }        // 此方法发送获胜消息            public void processturn()        }         // 此方法重置所有游戏变量         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… 实现这个有很多方法。我给你一些建议。

我假设count是用来确定轮到谁的。我建议你创建一个整数’turn’,然后简单地这样做:

turn = 1 -turn

…在你当前增加count的地方。如果它是0,那么轮到O,否则轮到X。你可以删除那两个长的if语句。(你也可以使用一个布尔标志,每次取反它,比如turn = !turn。)

现在剩下的部分… 我看到你没有使用数组。你是否习惯使用它们?

如果是的话,定义获胜序列。例如:

int[][] win = new int[][]{{1,2,3}, {4,5,6}, {7,8,9}, {1,4,7}, ...}

然后,你要做的就是检查你是否在win[i][0], win[i][1]或win[i][2]位置有两个你的标记。如果第三个位置是空的,你可以赢并应该移动到那里,

如果你不能赢,重复上述过程来防御。

如果你不需要防御并且不能赢,移动到中心。如果中心被占用,选择一个角,否则随机移动。

这将给你一个有时仍会输但会显示一些智能的AI。如果你真的想构建一个不可战胜的AI,可以看看极小极大搜索算法。

祝你好运!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注