예제 #1
0
        public static Coord DoTargetAction(Unit unit)
        {
            var exitFlag = false;

            var target = new Coord(unit.Position.X, unit.Position.Y);
            DrawTargetMark(unit, target, true);

            while (!exitFlag)
            {
                var key = ZInput.ReadKey();
                var oldTarget = new Coord(target.X, target.Y);

                switch (key)
                {
                    case ConsoleKey.LeftArrow	:	MoveTarget(target, -1,  0);		break;
                    case ConsoleKey.RightArrow	:	MoveTarget(target, +1,  0);		break;
                    case ConsoleKey.UpArrow		:	MoveTarget(target,  0, -1);		break;
                    case ConsoleKey.DownArrow	:	MoveTarget(target,  0, +1);		break;

                    case ConsoleKey.Enter		:	return target;		break;
                    case ConsoleKey.Escape		:	exitFlag = true;	break;
                }

                if (!oldTarget.Equals(target))
                {
                    DrawTargetMark(unit, oldTarget, false);
                    DrawTargetMark(unit, target, true);
                }
            }

            return null;
        }
        private static void DFS(Coord coord, Coord target, long sum, int[,] lab)
        {
            //if (!visited.Contains(coord))
            //{
                visited.Add(coord);

                if (coord.Equals(target))
                {
                    results.Add(sum);
                    return;
                }

                if (lab[coord.X, coord.Y] == 1)
                {
                    sum += 1;
                }

                if (coord.X + 1 < lab.GetLength(0))
                {
                    

                    DFS(new Coord(coord.X + 1, coord.Y), target, sum, lab);
                }
                if (coord.Y + 1 < lab.GetLength(1))
                {

                    DFS(new Coord(coord.X, coord.Y + 1), target, sum, lab);
                }
            //}
        }
예제 #3
0
 public static bool IsTargetOnSoldier(Unit currentUnit, Coord target)
 {
     foreach (var team in MainGame.Teams)
         foreach (var unit in team.Units.Where(a => a.Name != currentUnit.Name))
             if (target.Equals(unit.Position))
                 return true;
     return false;
 }
예제 #4
0
 public bool IsHere(Coord c)
 {
     return c.Equals(Coord);
 }
예제 #5
0
 public int GetDirectionForOffset(int dx, int dy)
 {
     var coord = new Coord(dx, dy);
     for (var i = 0; i < _viewDirections.Length; i++)
         if (coord.Equals(_viewDirections[i]))
             return i;
     return -1;
 }
예제 #6
0
        public bool Move(Coord init, Coord final)
        {
            bool rep = false;
            if (Coord.coordonnees_valides(final)
                && !init.Equals(final)
                && JeuCourant().IsPieceHere(init)
                && !JeuCourant().IsPieceHere(final)
                && JeuCourant().IsMoveOk(init, final)
                //&& !ColissionInPath(init, final)
                )
            {
                /*if (!_isAClone && MetRoiCourantEnDanger(init, final))
                {
                    _message = "Ce mouvement met votre roi en danger !!!";
                    return false;
                }*/

                if (Advairsaire().IsPieceHere(final))
                {

                    if (JeuCourant().IsPion(init) && !Coord.IsDiagonal(init, final))
                    {
                        _message = "Le pion ne mange qu'en diagonale avant !";
                        return false;
                    }
                    Advairsaire().Capture(final);
                    rep = JeuCourant().Move(init, final);
                }
                else
                {
                    if (JeuCourant().IsPion(init) && Coord.IsDiagonal(init, final))
                    {
                        _message = "Le pion se deplace en avant !";
                        return false;
                    }

                    rep = JeuCourant().Move(init, final);
                }
            }
            else
            {
                _message = "Il y a une/plusieurs erreur : ";
                if (!Coord.coordonnees_valides(final))
                {
                    _message += "\n\t-> Coordonnées hors échiquier";
                }
                if (!JeuCourant().IsPieceHere(init))
                {
                    _message += "\n\t-> Ce n'est pas une pièce de votre équipe";
                }
                if (JeuCourant().IsPieceHere(final))
                {
                    _message += "\n\t-> Vous n'avez pas le droit de manger une pièce de votre équipe";
                }
                if (init.Equals(final))
                {
                    _message += "\n\t-> Déplacement sur la même case";
                }
                if (!JeuCourant().IsMoveOk(init, final))
                {
                    _message += "\n\t-> Déplacement interdit pour cette pièce : " + JeuCourant().GetPieceName(init);
                }
                if (ColissionInPath(init, final))
                {
                    _message += "\n\t-> Il y a une pièce sur la trajectoire";
                }
            }
            return rep;
        }