Ejemplo n.º 1
0
Archivo: Map.cs Proyecto: 51ch/Soko
        public void MoveTo(Creature player, Creature.Direction direction)
        //перемещает игрока в выбранном направлении
        {
            Cell currentCell = GetCell(player.xPos, player.yPos);
            Cell nextCell    = GetNearCell(currentCell, direction);

            if ((nextCell != null) && (player.currentState != Creature.State.Moving)) // если следующая клетка существует и игрок не двигается, то...
            {
                if ((nextCell.Type == Cell.cellType.Open) ||
                    (nextCell.Type == Cell.cellType.RedFinish) ||
                    (nextCell.Type == Cell.cellType.BlueFinish))
                {
                    if (nextCell.isBusy)                         //если следующая клетка занята кем-то, то переместить его в том же направлении
                    {
                        MoveTo(nextCell.getObject(), direction); //запустить функцию перемещения для объекта, стоящего на следующей клетке
                        if (!nextCell.isBusy)                    //если после смещения объекта со следующей клетки она освободилась, то спокойно перемещаемся на нее
                        {
                            player.MovingTo(direction);
                            nextCell.setObject(player);
                            player.xPos = nextCell.xPos;
                            player.yPos = nextCell.yPos;
                            currentCell.clearCell();
                        }
                    }
                    else //если свободна, то спокойно перемещаемся
                    {
                        player.MovingTo(direction); //записать в информацию игрока направление его движения и состояние движения
                        nextCell.setObject(player);  //записать игрока в следующую клетку
                        player.xPos = nextCell.xPos; //записать координаты следующей клетки в координаты игрока
                        player.yPos = nextCell.yPos;
                        currentCell.clearCell();     //освободить текущую клетку
                    }
                }
            }
        }
Ejemplo n.º 2
0
Archivo: Map.cs Proyecto: 51ch/Soko
        public Cell GetNearCell(Cell currentCell, Creature.Direction direction)
        //возвращает клетку, которая находится в выбранном направлении от текущей клетки
        {
            switch (direction)
            {
            case Creature.Direction.Right:
                return(grid.Find(z => z.xPos == currentCell.xPos + 1 && z.yPos == currentCell.yPos));

            case Creature.Direction.Left:
                return(grid.Find(z => z.xPos == currentCell.xPos - 1 && z.yPos == currentCell.yPos));

            case Creature.Direction.Up:
                return(grid.Find(z => z.xPos == currentCell.xPos && z.yPos == currentCell.yPos - 1));

            case Creature.Direction.Down:
                return(grid.Find(z => z.xPos == currentCell.xPos && z.yPos == currentCell.yPos + 1));

            default:
                return(grid.Find(z => z.xPos == currentCell.xPos && z.yPos == currentCell.yPos));
            }
        }