Tag: tic tac toe

Tic Tac Toe with Minimax:当玩家先行时,计算机有时会失败; 否则

我正在为无与伦比的Tic Tac Toe开发Minimax算法。 我需要它同时适用于计算机何时首先以及何时首先播放。 使用当前版本,计算机在首先出现时永远不会丢失。 但是,如果玩家先行,Minimax似乎永远不会找到最佳移动(总是返回-1作为分数)。 如果玩家进行第一次移动,导致Minimax得分返回为-1的原因是什么? 例: board.addMark( 1, Mark2.PLAYER ); // add a ‘PLAYER’ mark to an arbitrary location Minimax.minimax( board, Mark2.COMPUTER ); // will always return -1 这是’Minimax’课程: public class Minimax { public static int minimax( Board board, Mark2 currentMark ) { int score = (currentMark == Mark2.COMPUTER) ? -1 : 1; […]

Tic Tac Toe完美的AI算法:更深入的“创建分叉”步骤

我已经在StackOverflow上阅读了许多Tic Tac Toe主题。 我发现维基百科的策略适合我的演示项目: 如果玩家在下表中选择具有最高优先级的移动,则玩家可以玩完美的井字游戏[3]。 1)胜利:如果你连续两次,则打三分之一连续三次。 2)阻挡:如果对手连续两个,则玩第三个阻挡它们。 3)福克斯:创造一个可以通过两种方式获胜的机会。 4)阻挡对手的分叉: 选项1:连续创建两个以强制对手进行防守,只要它不会导致他们创建分叉或获胜。 例如,如果“X”有一个角,“O”有中心,“X”也有相反的角,“O”一定不能在角落里获胜。 (在这个场景中扮演角球会为“X”赢得一个分叉。) 选项2:如果有对手可以分叉的配置,则阻止该分叉。 5)中心:打中锋。 6)对角:如果对手在角落,则对角。 7)空角:打空角。 8)空的一面:空洞的一面。 我按照这一步,计算机永远不会丢失。 但是,它的攻击方式并不完美。 因为我不知道如何做第3步。这是我在第3步中所做的:扫描每个单元格,检查是否在该单元格上放置标记创建了一个fork,然后将其放在那里。 private void step3() // Create Fork. { int[] dummyField = (int[])field.Clone(); // Try Level 1 Dummy for (int i = 0; i = 2) { nextCell = i; return; } dummyField[i] = 0; } } […]

您好我正在为自己创建一个TicTacToe游戏,以便更好地理解Java

但是我不确定我应该在哪里输入whoWins()方法。 我是否在按钮的actionperformed方法中输入此方法,或者我需要不同的东西。 请帮忙。 public class TTT extends JFrame implements ActionListener { private JButton buttons[] = new JButton[9]; private JButton exitButton; public JLabel title; public JPanel titlePanel, panel; private int count = 0; int symbolCount = 0; private boolean win = false; public TTT() { title = new JLabel(“Welcome to my Tic Tac Toe Game!”); titlePanel […]