示例#1
0
    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);
        }
    }
示例#2
0
 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;
                 }
             }
         }
     }
 }
示例#3
0
    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);
    }
示例#4
0
    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);
    }
示例#5
0
    // 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;
    }
示例#6
0
    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);
    }
示例#7
0
    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);
    }
示例#8
0
    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);
    }
示例#9
0
    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);
    }