public static void Play(Point point, int player) { if (PlayablePoint.Contains(point)) { int UP = 0; Point pointAudessus = point.Neighbor(UP); PlayablePoint.Remove(point); if (BoardPoint.Contains(pointAudessus)) { PlayablePoint.Add(pointAudessus); } // mise à jour de DicoPointPawn Pawn pawn = DicoPointPawn[point]; pawn.SetColor(Couleurs[player]); pawn.SetPlayer(player); DicoPointPawn.Remove(point); DicoPointPawn.Add(point, pawn); /* * // visualisation de PlayablePoint, pour debug * foreach (Point p in PlayablePoint) { * DicoPointPawn[p].SetColor(Couleurs[playable]); * } */ // mise à jour de PlayedPoint PlayedPoint.Add(point); } }
private void OnMouseDown() { if (gcs.IsRunningGame == true && gcs.GameOver == false) { Point myPoint = new Point(xPosition, zPosition); if (gcs.PlayablePoint.Contains(myPoint)) { SetColor(gcs.humanColor); gcs.Play(myPoint, gcs.human); if (gcs.TestWinner(myPoint) == gcs.human) { Debug.Log("human wins ! "); List <Point> LongestLine = gcs.LongestLine(myPoint, gcs.human); gcs.SetColor(LongestLine, Color.green); Text message = gcs.MessageDisplay.GetComponent <Text>(); message.text = "Vous avez gagné !"; gcs.GameOver = true; } if (gcs.GameOver == false) { Point bestPlayPoint = gcs.ComputerBestPlay(); gcs.Play(bestPlayPoint, gcs.computer); if (gcs.TestWinner(bestPlayPoint) == gcs.computer) { Debug.Log("computer wins ! "); List <Point> LongestLine = gcs.LongestLine(bestPlayPoint, gcs.computer); gcs.SetColor(LongestLine, Color.green); Text message = gcs.MessageDisplay.GetComponent <Text>(); message.text = "L'ordinateur a gagné !"; gcs.GameOver = true; } } } } }
public static string ToString(Point point) { string stringToReturn = ""; if (DicoPointPawn.ContainsKey(point)) { Pawn pawn = DicoPointPawn[point]; stringToReturn = stringToReturn + " ( " + point.p + " , " + point.q + ", " + pawn.Player + " ) -"; } return(stringToReturn); }
public static int TestWinner(Point point) { // recherche d'une ligne de 4 Squares contigus affectés au même joueur int toBeReturned = 0; Pawn pawn = DicoPointPawn[point]; if (Value(point, pawn.Player) > 3) { toBeReturned = pawn.Player; } return(toBeReturned); }
// Use this for initialization void Start() { MessageDisplay = GameObject.Find("Message"); BoardPoint = new List <Point>(); Couleurs = new Dictionary <int, Color> { { human, humanColor }, { computer, computerColor }, { board, boardColor }, { playable, playableColor } }; // initialisation de DicoPointPawn et PlayablePoint DicoPointPawn = new Dictionary <Point, Pawn>(); PlayablePoint = new List <Point>(); PlayedPoint = new List <Point>(); // création de Boardpoint for (int ligne = 0; ligne < nbColonnes; ligne++) { for (int colonne = 0; colonne < nbLignes; colonne++) { Point point = new Point(ligne, colonne); BoardPoint.Add(point); } } // création de DicoPointPawn foreach (Point point in BoardPoint) { GameObject go = (GameObject)Instantiate(PawnPrefab); Pawn pawn = new Pawn(point.p, point.q, 1f, board, 0, go); SetColor(pawn, Couleurs[board]); DicoPointPawn.Add(point, pawn); } // création de la liste des Points Playable foreach (Point point in BoardPoint) { if (point.q == 0) { PlayablePoint.Add(point); Pawn pawn = DicoPointPawn[point]; // SetColor(pawn, Color.white); } } IsRunningGame = true; GameOver = false; }
public static int Value(Point point, int player) { // retourne la longueur de la plus grande chaine contenant point int value = 0; foreach (Point direction in Point.Directions) { List <Point> ligne = PawnGridLib.GetLine(point, direction, PlayedPoint, player); if (ligne.Count > value) { value = ligne.Count; } } return(value); }
public static List <Point> LongestLine(Point point, int player) { // retourne la plus grande chaine contenant point, pour le joueur player int value = 0; List <Point> toBeReturned = new List <Point>(); foreach (Point direction in Point.Directions) { List <Point> ligne = PawnGridLib.GetLine(point, direction, PlayedPoint, player); if (ligne.Count > value) { toBeReturned = ligne; } } return(toBeReturned); }
public static Point PointBestPlay(int player) { Point pointToBeReturned = new Point(); int MaxValue = 0; foreach (Point point in PlayablePoint) { int value = Value(point, player); if (value >= MaxValue) { pointToBeReturned = point; MaxValue = value; } } return(pointToBeReturned); }
public static Point ComputerBestPlay() { Point toBeReturned = new Point(); Point pointBestPlayComputer = PointBestPlay(computer); Point pointBestPlayHuman = PointBestPlay(human); int valueComputer = Value(pointBestPlayComputer, computer); int valueHuman = Value(pointBestPlayHuman, human); // vérifier si >= ne rend pas la tactique de computer +/- agressive if (valueComputer >= valueHuman) { toBeReturned = pointBestPlayComputer; } else { toBeReturned = pointBestPlayHuman; } return(toBeReturned); }