<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 *
 */
package computer;

import game.TicTacToeFrame;

/**
 * @author alexis
 * Objet imutable de computer de ticTacToe
 */
public class Computer {

	private Computer() {}

	/**
	 * @param game la parti de tictactoe en cour
	 * @param isX true si le computer est le X
	 * @return la position ou placer le X ou O
	 * sois un int de 0a8 pour X et 9a18 pour O
	 * @throws Exception
	 */
	static public int getSolution(TicTacToeFrame game, boolean isX) throws Exception{
		int temp[] = new int[9];
		int count = 0;

		for(int i = 0; i &lt; 9; i++)			//permet de regarder pour gagner avant tout le reste
		{
			TicTacToeFrame previsionGame;

			if(isX)
			{
				if(!game.getO(i, 0)&amp;&amp;!game.getX(i,0)){
					previsionGame = game.setX(i,0);
					if(previsionGame.getWinnerX())
						return i;
				}
			}
			else
			{
				if(!game.getO(i, 0)&amp;&amp;!game.getX(i,0)){
					previsionGame = game.setO(i,0);
					if(previsionGame.getWinnerO())
						return i;
				}
			}
		}

		for(int i = 0; i &lt; 9; i++)			//permet de regarder pour bloquer lautre avant tout le reste
		{
				TicTacToeFrame tempo;

				if(isX)
				{
					if(!game.getO(i, 0)&amp;&amp;!game.getX(i,0)){
						tempo = game.setO(i,0);
						if(tempo.getWinnerO())
							return i;
					}
				}
				else
				{
					if(!game.getO(i,0)&amp;&amp;!game.getX(i,0)){
						tempo = game.setX(i,0);
						if(tempo.getWinnerX())
						{
							return i;
						}
					}
				}
		}

		for(int i = 0; i &lt; 9; i++)			//si on peut pas gagner ou bloquer, jouer strategiquement
		{
			if(isX)
				if(!game.getO(i, 0)&amp;&amp;!game.getX(i,0))
					temp[count] = solve(game.setX(i,0),isX,!isX);
				else
					temp[count]-= 1000;
			else
				if(!game.getO(i, 0)&amp;&amp;!game.getX(i,0))
					temp[count] = solve(game.setO(i,0),isX,!isX);
				else
					temp[count]-= 1000;
			count++;
		}

		return highestOfTable(temp);
	}

	/**
	 * @param _game jeux de tictactoe modifier
	 * @param isX  true si le computer est le X
	 * @param currentTurn true si cest le tour des X
	 * @return la probabilite de gagner
	 * @throws Exception
	 */
	static private int solve(TicTacToeFrame _game, boolean isX, boolean currentTurn) throws Exception{
		int probabilite = 0;

		for(int i = 0; i &lt; 9; i++)
			if(currentTurn)
				if(!_game.getX(i,0) &amp;&amp; !_game.getO(i, 0))
					probabilite = solve(_game.setX(i,0),isX,!currentTurn);

			else
				if(!_game.getX(i,0) &amp;&amp; !_game.getO(i, 0))
					probabilite = solve(_game.setO(i,0),isX,!currentTurn);


		if(_game.getWinnerX())
		{
			if(isX)
				probabilite++;
			else
				probabilite -= 5;
		}
		else if(_game.getWinnerO())
		{
			if(!isX)
				probabilite++;
			else
				probabilite -= 5;
		}

		return probabilite;
	}

	/**
	 * @param table table d'int
	 * @return le plus grand int
	 */
	static private int highestOfTable(int table[]){
		int temp = 0;

		for(int i = 0; i &lt; 9; i++)
			if(table[i] &gt; table[temp])
				temp = i;
		return temp;
	}

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		TicTacToeFrame game = TicTacToeFrame.fromEmpty();

		game = game.setX(2, 2);
		System.out.println(Computer.getSolution(game,false));
		game = game.setO(Computer.getSolution(game,false),0);
		System.out.println(game.toString());

		game=game.setX(1, 1);
		System.out.println(Computer.getSolution(game,false));
		game = game.setO(Computer.getSolution(game,false),0);
		System.out.println(game.toString());


		game=game.setX(0, 1);
		System.out.println(Computer.getSolution(game,false));
		game = game.setO(Computer.getSolution(game,false),0);
		System.out.println(game.toString());
	}

}
</pre></body></html>