Example #1
0
    public void JouerLeCoup()
    {
        if (Dir == null)
        {
            Console.WriteLine(Mur.ToString());
        }
        else
        {
            switch (Dir)
            {
            case Direction.DROITE:
                Console.WriteLine("RIGHT");
                break;

            case Direction.GAUCHE:
                Console.WriteLine("LEFT");
                break;

            case Direction.HAUT:
                Console.WriteLine("UP");
                break;

            case Direction.BAS:
                Console.WriteLine("DOWN");
                break;
            }
        }
    }
Example #2
0
 public override string ToString()
 {
     if (Dir != null)
     {
         return(Dir.ToString());
     }
     else
     {
         return(Mur.ToString());
     }
 }
Example #3
0
    public static void Play(Plateau plateau, Joueur myPlayer, List <Joueur> opposants)
    {
        var move          = plateau.Dikstra(myPlayer.Pos, myPlayer.Objectif);
        var vainqueur     = myPlayer;
        var coupVainqueur = move.Count();

        foreach (var joueur in opposants)
        {
            var result = plateau.Dikstra(joueur.Pos, joueur.Objectif).Count;
            if (result < coupVainqueur)
            {
                vainqueur     = joueur;
                coupVainqueur = result;
            }
        }
        Mur bestMur  = null;
        int bestCoup = coupVainqueur;

        if (vainqueur != myPlayer && myPlayer.MurRestant > 0)
        {
            var monCoup = move.Count();
            Console.Error.WriteLine(" on bloque " + vainqueur.PlayerId);
            for (int i = 0; i < plateau.Width; i++)
            {
                for (int j = 0; j < plateau.Height; j++)
                {
                    for (int k = 0; k < 2; k++)
                    {
                        var mur = new Mur(new Position(i, j), k == 0);
                        if (plateau.AddMur(mur))
                        {
                            try
                            {
                                var resultWithMur = plateau.Dikstra(vainqueur.Pos, vainqueur.Objectif).Count;
                                if (resultWithMur > bestCoup)
                                {
                                    var monCoupWithMur = plateau.Dikstra(myPlayer.Pos, myPlayer.Objectif).Count;
                                    if (monCoup >= monCoupWithMur)
                                    {
                                        resultWithMur = bestCoup;
                                        bestMur       = mur;
                                    }
                                }
                            }
                            catch (NoPathException)
                            {
                                Console.Error.WriteLine("no issue");
                            }
                            finally
                            {
                                plateau.RemoveMur(mur);
                            }
                        }
                    }
                }
            }
            if (bestMur != null)
            {
                Console.WriteLine(bestMur.ToString());
            }
            else
            {
                Console.Error.WriteLine("no wall : try to go " + move[move.Count - 1].Pos.ToString());
                myPlayer.MoveToNextCase(move[0]);
            }
        }
        else
        {
            Console.Error.WriteLine("try to go " + move[move.Count - 1].Pos.ToString());
            myPlayer.MoveToNextCase(move[0]);
        }
    }
Example #4
0
    public bool MurIsValid(Mur murAdd)
    {
        if (murAdd.ToString() == "")
        {
            Console.Error.WriteLine("validation");
        }
        // vérification qu'il est bien sur le plateu
        var x = murAdd.Pos.X;
        var y = murAdd.Pos.Y;

        if (murAdd.IsVertical)
        {
            if (!(y < Height - 1 && x > 0 && x < Width))
            {
                return(false);
            }
        }
        else
        {
            if (!(x < Width - 1 && y > 0 && y < Width))
            {
                return(false);
            }
        }

        // vérification des intersections (inclus le cas ou le mur existe déjà)
        var pointCentral = murAdd.PointCentral;

        foreach (var mur in Murs)
        {
            if (pointCentral == mur.PointCentral || (mur.IsVertical == murAdd.IsVertical && (pointCentral == mur.Pos || murAdd.Pos == mur.PointCentral)))
            {
                return(false);
            }
        }

        if (murAdd.ToString() == "")
        {
            Console.Error.WriteLine("placement ok");
        }

        foreach (var joueur in Joueurs)
        {
            if (murAdd.ToString() == "")
            {
                Console.Error.WriteLine("test joueur " + joueur.PlayerId);
            }
            if (AddMur(murAdd, true))
            {
                try
                {
                    var result = Dikstra(joueur.Pos, joueur.Objectif);
                    if (murAdd.ToString() == "")
                    {
                        foreach (var item in result)
                        {
                            Console.Error.WriteLine(item.Pos.ToString());
                        }
                    }
                }
                catch (NoPathException)
                {
                    if (murAdd.ToString() == "")
                    {
                        Console.Error.WriteLine("No Path");
                    }
                    return(false);
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine(e.Message);
                    return(false);
                }
                finally
                {
                    RemoveMur(murAdd);
                }
            }
        }
        return(true);
    }