Пример #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;
            }
        }
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (!mouvementEnCours && !mouvementActif && mainActive && (Input.GetButton("TriggerRight") || Input.GetButton("TriggerLeft")))
        {
            mouvementEnCours = true;
            mouvementActif   = true;
            gereMouvement.choisitMainActuelle();

            /*GameObject murObjet = transform.parent.gameObject;
             * Mur murPiece = CreeNiveau.renvoieMur(murObjet);
             * gereMouvement.changePiece(murPiece);*/
        }
        else if (mouvementEnCours && (!Input.GetButton("TriggerRight") && !Input.GetButton("TriggerLeft")))
        {
            mouvementEnCours = false;
            mouvementActif   = false;
            GameObject murObjet = transform.parent.gameObject;
            Mur        murPiece = CreeNiveau.renvoieMur(murObjet);
            gereMouvement.choisitPiece(murPiece);
        }
        else if (mouvementEnCours)
        {
            gereMouvement.recaleCameraRig();
        }
    }
Пример #3
0
 public bool RemoveMur(Mur mur)
 {
     if (Murs.Contains(mur))
     {
         Murs.Remove(mur);
         var  case1 = GetCase(mur.Pos);
         Case case2;
         if (mur.IsVertical)
         {
             case2 = GetCase(mur.Pos.GetPositionBas());
             case1.AddVoisine(GetCase(case1.Pos.GetPositionGauche()));
             case2.AddVoisine(GetCase(case2.Pos.GetPositionGauche()));
         }
         else
         {
             case2 = GetCase(mur.Pos.GetPositionDroite());
             case1.AddVoisine(GetCase(case1.Pos.GetPositionHaut()));
             case2.AddVoisine(GetCase(case2.Pos.GetPositionHaut()));
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #4
0
 public bool AddMur(Mur mur, bool noValidation = false)
 {
     if (!Murs.Contains(mur) && (noValidation || MurIsValid(mur)))
     {
         Murs.Add(mur);
         var  case1 = GetCase(mur.Pos);
         Case case2;
         if (mur.IsVertical)
         {
             case2 = GetCase(mur.Pos.GetPositionBas());
             case1.RemoveVoisine(GetCase(case1.Pos.GetPositionGauche()));
             case2.RemoveVoisine(GetCase(case2.Pos.GetPositionGauche()));
         }
         else
         {
             case2 = GetCase(mur.Pos.GetPositionDroite());
             case1.RemoveVoisine(GetCase(case1.Pos.GetPositionHaut()));
             case2.RemoveVoisine(GetCase(case2.Pos.GetPositionHaut()));
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
        private static Case CréerPorteFantôme(Coordonnée p_coordonnée)
        {
            Mur mur = new Mur(p_coordonnée)
            {
                EstPorteFantôme = true
            };

            return(mur);
        }
Пример #6
0
 void testeUnMur(Salle salle, Mur contact, Vector3 direction)
 {
     if (contact.porte == EtatPorte.EXTERIEUR)
     {
         Vector3    positionMur  = salle.tuile.transform.position + direction;
         Quaternion directionMur = Quaternion.LookRotation(direction);
         Instantiate(murmur, positionMur, directionMur);
     }
 }
Пример #7
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetButtonDown("Jump"))
     {
         murChoisi = CreeNiveau.renvoieMur(murReference);
         BougeCameraRig bouge = GetComponent <BougeCameraRig>();
         bouge.choisitPiece(murChoisi);
     }
 }
Пример #8
0
 public void choisitPiece(Mur ma)
 {
     murActuel = ma;
     repositionnementEnCours = true;
     dureeRepositionnement   = 0.0f;
     objetSalle        = trouveSalleChoisie();
     positionDepart    = cameraRig.transform.position;
     positionSouhaitee = objetSalle.transform.position;
     calculeValeursRotation();
 }
Пример #9
0
 public override string ToString()
 {
     if (Dir != null)
     {
         return(Dir.ToString());
     }
     else
     {
         return(Mur.ToString());
     }
 }
Пример #10
0
 public override void Afficher(Graphics gr)
 {
     Escalier.Afficher(gr);
     barre1.Afficher(gr);
     barre2.Afficher(gr);
     barre3.Afficher(gr);
     barre4.Afficher(gr);
     Barre.Afficher(gr);
     Mur.Afficher(gr);
     vide.Afficher(gr);
     vider.Afficher(gr);
 }
Пример #11
0
 public override void Cacher(IntPtr handle)
 {
     Escalier.Cacher(handle);
     Barre.Cacher(handle);
     barre1.Cacher(handle);
     barre2.Cacher(handle);
     barre3.Cacher(handle);
     barre4.Cacher(handle);
     Mur.Cacher(handle);
     vide.Cacher(handle);
     vider.Cacher(handle);
 }
Пример #12
0
    static public Mur renvoieMur(GameObject objet)
    {
        Mur retour = null;

        foreach (Mur mur in contacts)
        {
            if (mur.mur == objet)
            {
                retour = mur;
                break;
            }
        }
        return(retour);
    }
Пример #13
0
    public static void InitAvailableMur(Plateau plateau)
    {
        AvailableMur = new List <Mur>();

        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);
                    AvailableMur.Add(mur);
                }
            }
        }
    }
Пример #14
0
        public void HashCodeMur()
        {
            List <int> hashs = new List <int>();

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    for (int k = 0; k < 2; k++)
                    {
                        var a = new Mur(new Position(i, j), k == 0);
                        Assert.IsFalse(hashs.Contains(a.GetHashCode()));
                        hashs.Add(a.GetHashCode());
                    }
                }
            }
        }
Пример #15
0
        /// <summary>
        /// Créations des zombies, des soldats et du mur.
        /// </summary>
        public void Init()
        {
            IsFini       = false;
            EquipeHumain = new List <Personnages>();
            EquipeZombie = new List <Personnages>();
            Defense      = new Mur();

            for (int i = 0; i < nbZombieBase; ++i)
            {
                Zombie zombie = new Zombie(i + 1);
                EquipeZombie.Add(zombie);
            }

            for (int i = 0; i < nbHumainBase; ++i)
            {
                Soldat soldat = new Soldat(i + 1);
                EquipeHumain.Add(soldat);
            }
        }
Пример #16
0
    public void changePiece(Mur porte)
    {
        Salle nouvelleSalle = null;

        if (porte.salle1 != salleActive)
        {
            nouvelleSalle = porte.salle1;
        }
        else
        {
            nouvelleSalle = porte.salle2;
        }
        cameraRig.transform.position = nouvelleSalle.tuile.transform.position;
        Vector3 eulerRig = cameraRig.transform.rotation.eulerAngles;

        eulerRig.y += 180.0f;
        cameraRig.transform.rotation = Quaternion.Euler(eulerRig);
        salleActive = nouvelleSalle;
    }
Пример #17
0
    void Start()
    {
        if (S == 1)                                                          //Sud
        {
            Mur murS = Instantiate(prefabMur) as Mur;                        //Instancie le prefab mur
            murS.transform.parent        = transform;                        //récupere la position de la case
            murS.name                    = "Mur Sud " + x + ", " + z;        //changement de nom de l'objet
            murS.transform.localPosition = new Vector3(1f, 1.5f, 0.05f);     //postion du mur par rapport a la case
            murS.transform.localRotation = new Quaternion(0f, 90f, 0f, 90f); // rotation du mur
        }
        if (N == 1)                                                          //Nord
        {
            Mur murN = Instantiate(prefabMur) as Mur;                        //Instancie le prefab mur
            murN.transform.parent        = transform;                        //récupere la position de la case
            murN.name                    = "Mur Nord " + x + ", " + z;       //changement de nom de l'objet
            murN.transform.localPosition = new Vector3(1f, 1.5f, 1.95f);     //postion du mur par rapport a la case
            murN.transform.localRotation = new Quaternion(0f, 90f, 0f, 90f); // rotation du mur
        }
        if (O == 1)                                                          //Ouest
        {
            Mur murO = Instantiate(prefabMur) as Mur;                        //Instancie le prefab mur
            murO.transform.parent        = transform;                        //récupere la position de la case
            murO.name                    = "Mur Ouest " + x + ", " + z;      //changement de nom de l'objet
            murO.transform.localPosition = new Vector3(0.05f, 1.5f, 1);      //postion du mur par rapport a la case
        }
        if (E == 1)
        {
            Mur murE = Instantiate(prefabMur) as Mur;                    //Instancie le prefab mur
            murE.transform.parent        = transform;                    //récupere la position de la case
            murE.name                    = "Mur Est " + x + ", " + z;    //changement de nom de l'objet
            murE.transform.localPosition = new Vector3(1.95f, 1.5f, 1f); //postion du mur par rapport a la case
        }


        if (C == 1)
        {
            Cheat cheat = Instantiate(prefabCheat) as Cheat;            //Instancie le prefab cheat
            cheat.transform.parent        = transform;                  //récupere la position de la case
            cheat.name                    = "Cheat " + x + ", " + z;    //changement de nom de l'objet
            cheat.transform.localPosition = new Vector3(1f, -0.2f, 1f); //postion du mur par rapport a la case
        }
    }
Пример #18
0
 void trouveSallesVoisines()
 {
     foreach (Salle salle in salles)
     {
         foreach (Salle salle2 in salles)
         {
             difference = salle2.tuile.transform.position - salle.tuile.transform.position;
             if (difference.magnitude == distanceDeReference)
             {
                 contactActuel           = new Mur();
                 contactActuel.salle1    = salle;
                 contactActuel.salle2    = salle2;
                 contactActuel.porte     = EtatPorte.MITOYEN;
                 contactActuel.position  = salle.tuile.transform.position + (difference / 2.0f);
                 contactActuel.direction = Quaternion.LookRotation(difference);
                 verifieContactActuel();
             }
         }
     }
 }
Пример #19
0
        public void TestMurHorizontalBloqueCase()
        {
            Plateau plateau = new Plateau(2, 2);
            var     case1   = plateau.GetCase(0, 0);
            var     case2   = plateau.GetCase(1, 0);
            var     case3   = plateau.GetCase(0, 1);
            var     case4   = plateau.GetCase(1, 1);
            var     mur     = new Mur(new Position(0, 1), false);

            Assert.IsTrue(mur.BloqueCases(case1, case3, plateau));
            Assert.IsTrue(mur.BloqueCases(case2, case4, plateau));
            Assert.IsTrue(mur.BloqueCases(case3, case1, plateau));
            Assert.IsTrue(mur.BloqueCases(case4, case2, plateau));

            Assert.IsFalse(mur.BloqueCases(case1, case2, plateau));
            Assert.IsFalse(mur.BloqueCases(case1, case4, plateau));
            Assert.IsFalse(mur.BloqueCases(case2, case3, plateau));
            Assert.IsFalse(mur.BloqueCases(case2, case1, plateau));
            Assert.IsFalse(mur.BloqueCases(case3, case4, plateau));
            Assert.IsFalse(mur.BloqueCases(case3, case2, plateau));
            Assert.IsFalse(mur.BloqueCases(case4, case1, plateau));
            Assert.IsFalse(mur.BloqueCases(case4, case3, plateau));
        }
Пример #20
0
    // A l'initialisation, le monde est en mode physique, on passe tout
    // les objets de la scene en mode physique
    void Start()
    {
        isTimerOn    = false;
        isActivating = false;
        hasJumped    = false;
        period       = 0.1f;
        rb           = GetComponent <Rigidbody2D>();
        animator     = GetComponent <Animator>();

        //-	On recupere les tableaux des elements de notre GameObject Level.
        //-	Pour chaque tableau, on parcourt les elements
        //-	On recupere l’element, on change son attribut isSpirit.
        //-	On desactive l’element si c’est un element physique et qu’on est en mode esprit, ou si c’est
        //un element spirituel et qu’on est en mode physique. On active l’element sinon

        int lengthActionneurs = level.actionneurs.Length;
        int lengthEnnemis     = level.ennemis.Length;
        int lengthCadavres    = level.cadavres.Length;
        int lengthPlateformes = level.plateformes.Length;
        int lengthMurs        = level.murs.Length;
        int lengthBackground  = level.backgrounds.Length;

        Physics2D.IgnoreLayerCollision(9, 10);

        animator.SetBool("isSpirit", isSpirit);
        for (int i = 0; i < lengthActionneurs; i++)
        {
            Actionneur actionneur = (Actionneur)level.actionneurs[i];
            actionneur.isSpirit = isSpirit;
            actionneur.gameObject.SetActive(actionneur.statut == 0 || isSpirit && actionneur.statut == 2 || !isSpirit && actionneur.statut == 1);
        }
        for (int i = 0; i < lengthEnnemis; i++)
        {
            Ennemi ennemi = (Ennemi)level.ennemis[i];
            ennemi.isSpirit = isSpirit;
            ennemi.gameObject.SetActive(ennemi.statut == 0 || isSpirit && ennemi.statut == 2 || !isSpirit && ennemi.statut == 1);
        }
        for (int i = 0; i < lengthCadavres; i++)
        {
            Cadavre cadavre = (Cadavre)level.cadavres[i];
            cadavre.isSpirit = isSpirit;
            cadavre.gameObject.SetActive(cadavre.statut == 0 || isSpirit && cadavre.statut == 2 || !isSpirit && cadavre.statut == 1);
        }

        for (int i = 0; i < lengthPlateformes; i++)
        {
            Plateforme plateforme = (Plateforme)level.plateformes[i];
            plateforme.isSpirit = isSpirit;
            if (!(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1))
            {
                for (int j = 0; j < plateforme.transform.childCount; j++)
                {
                    Transform objet = plateforme.transform.GetChild(j);
                    if (objet.name == "Player")
                    {
                        groundChecker.getTriggers().Clear();
                        objet.transform.parent = null;
                    }
                }
            }

            plateforme.gameObject.SetActive(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1);
        }
        for (int i = 0; i < lengthMurs; i++)
        {
            Mur mur = (Mur)level.murs[i];
            mur.isSpirit = isSpirit;
            mur.gameObject.SetActive(mur.statut == 0 || isSpirit && mur.statut == 2 || !isSpirit && mur.statut == 1);
        }
        for (int i = 0; i < lengthBackground; i++)
        {
            backgroundAdapter back = (backgroundAdapter)level.backgrounds[i];
            back.changeUnivers(isSpirit);
        }
    }
Пример #21
0
    // Update is called once per frame
    void Update()
    {
        // On ecrit le texte des ames et morts.
        setText();

        // Menu Pause
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            if (Time.timeScale != 0)
            {
                pause();
            }
            else
            {
                reprendre();
            }
        }

        // Gere le changement de direction du joueur
        Flip();

        // On allour un temps entre chaque action du joueur pour eviter 2 actions consecutives non voulues
        if (isActivating)
        {
            timer        = Time.time;
            isActivating = false;
            isTimerOn    = true;
        }

        if (isTimerOn && Time.time > timer + period)
        {
            isTimerOn = false;
        }

        // Si le joueur peut sauter et qu'il veut sauter, il saute
        if ((rb.velocity.y == 0 || isGrounded) && Input.GetButtonDown("Jump"))
        {
            rb.isKinematic = false;
            animator.SetBool("isGround", false);
            rb.AddForce(new Vector2(0f, jumpSpeed), ForceMode2D.Impulse);
        }

        // Changement de vue
        //-	Verification de l’appui du bouton « touche haut » clavier.
        //-	Changement de l’attribut booleen isSpirit du player, correspondant au mode Physique ou Esprit.
        //-	Changement de l’animation du player.
        //-	On recupere les tableaux des elements de notre GameObject Level.
        //-	Pour chaque tableau, on parcourt les elements
        //-	On recupere l’element, on change son attribut isSpirit.
        //-	On desactive l’element si c’est un element physique et qu’on est en mode esprit, ou si c’est
        //un element spirituel et qu’on est en mode physique. On active l’element sinon.

        if (Input.GetButtonDown("Switch"))
        {
            isSpirit = !isSpirit;
            animator.SetBool("isSpirit", isSpirit);
            int lengthActionneurs = level.actionneurs.Length;
            int lengthEnnemis     = level.ennemis.Length;
            int lengthCadavres    = level.cadavres.Length;
            int lengthPlateformes = level.plateformes.Length;
            int lengthMurs        = level.murs.Length;
            int lengthBackground  = level.backgrounds.Length;

            for (int i = 0; i < lengthActionneurs; i++)
            {
                Actionneur actionneur = (Actionneur)level.actionneurs[i];
                actionneur.isSpirit = isSpirit;
                actionneur.gameObject.SetActive(actionneur.statut == 0 || isSpirit && actionneur.statut == 2 || !isSpirit && actionneur.statut == 1);
            }
            for (int i = 0; i < lengthEnnemis; i++)
            {
                Ennemi ennemi = (Ennemi)level.ennemis[i];
                ennemi.isSpirit = isSpirit;
                ennemi.gameObject.SetActive(ennemi.statut == 0 || isSpirit && ennemi.statut == 2 || !isSpirit && ennemi.statut == 1);
            }
            for (int i = 0; i < lengthCadavres; i++)
            {
                Cadavre cadavre = (Cadavre)level.cadavres[i];
                cadavre.isSpirit = isSpirit;
            }

            for (int i = 0; i < lengthPlateformes; i++)
            {
                Plateforme plateforme = (Plateforme)level.plateformes[i];
                plateforme.isSpirit = isSpirit;
                if (!(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1))
                {
                    for (int j = 0; j < plateforme.transform.childCount; j++)
                    {
                        Transform objet = plateforme.transform.GetChild(j);
                        if (objet.name == "Player")
                        {
                            groundChecker.getTriggers().Clear();
                            objet.transform.parent = null;
                        }
                    }
                }

                plateforme.gameObject.SetActive(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1);
            }
            for (int i = 0; i < lengthMurs; i++)
            {
                Mur mur = (Mur)level.murs[i];
                mur.isSpirit = isSpirit;
                mur.gameObject.SetActive(mur.statut == 0 || isSpirit && mur.statut == 2 || !isSpirit && mur.statut == 1);
            }
            for (int i = 0; i < lengthBackground; i++)
            {
                backgroundAdapter back = (backgroundAdapter)level.backgrounds[i];
                back.changeUnivers(isSpirit);
            }
        }
    }
Пример #22
0
 public Coup(Mur mur)
 {
     Mur = mur;
     Dir = null;
 }
Пример #23
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);
    }
Пример #24
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]);
        }
    }
Пример #25
0
    static void Main(string[] args)
    {
        string[] inputs;
        inputs = Console.ReadLine().Split(' ');
        int w           = int.Parse(inputs[0]); // width of the board
        int h           = int.Parse(inputs[1]); // height of the board
        int playerCount = int.Parse(inputs[2]); // number of players (2 or 3)
        int myId        = int.Parse(inputs[3]); // id of my player (0 = 1st player, 1 = 2nd player, ...)

        Plateau plateau = new Plateau(w, h);

        InitAvailableMur(plateau);

        // game loop
        while (true)
        {
            Joueur        moi       = null;
            List <Joueur> opposants = new List <Joueur>();
            for (int i = 0; i < playerCount; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                int x         = int.Parse(inputs[0]); // x-coordinate of the player
                int y         = int.Parse(inputs[1]); // y-coordinate of the player
                int wallsLeft = int.Parse(inputs[2]); // number of walls available for the player
                if (i == myId)
                {
                    moi = new Joueur(new Position(x, y), myId, wallsLeft);
                }
                else if (x != -1 && y != -1)
                {
                    opposants.Add(new Joueur(new Position(x, y), i, wallsLeft));
                }
            }
            plateau.Joueurs = GetAllJoueurOrder(moi, opposants);

            int wallCount = int.Parse(Console.ReadLine()); // number of walls on the board
            for (int i = 0; i < wallCount; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                int    wallX           = int.Parse(inputs[0]); // x-coordinate of the wall
                int    wallY           = int.Parse(inputs[1]); // y-coordinate of the wall
                string wallOrientation = inputs[2];            // wall orientation ('H' or 'V')
                Mur    mur             = new Mur(new Position(wallX, wallY), wallOrientation == "V");
                plateau.AddMur(mur);
            }

            /*foreach (var item in plateau.Murs)
             * {
             *  Console.Error.WriteLine(item.ToString());
             * }
             *
             * Console.Error.WriteLine("Dikjstra");
             * var dik = plateau.Dikstra(moi.Pos, moi.Objectif);
             * foreach (var item in dik)
             * {
             *  Console.Error.WriteLine(item.Pos.ToString());
             * }*/

            // Write an action using Console.WriteLine()
            // To debug: Console.Error.WriteLine("Debug messages...");
            Coup coup;
            int  r;
            Console.Error.WriteLine("Start MinMax");
            var trace = MinMax(plateau, 0, 2, int.MinValue, int.MaxValue, out coup, out r);
            Console.Error.WriteLine("End MinMax");
            Console.Error.WriteLine(trace);
            Console.Error.WriteLine(r);
            Console.Error.WriteLine(coup.ToString());
            coup.JouerLeCoup();
        }
    }