public CreatureCommand Act(int x, int y) { GetDirection(x, y); var currentPosition = new Point(x, y); Game.PrevPositionPacman = Game.PackMansPosition; if (Game.teleports.teleports.Contains(currentPosition)) { var goal = Game.teleports.EntranceExitPairs[currentPosition]; if ((goal == Game.teleports.Entrance && CurrentDirection == Directions.Right) || (goal == Game.teleports.Exit && CurrentDirection == Directions.Left)) { var movement = new Point(goal.X - x, goal.Y - y); Game.PackMansPosition = currentPosition.Add(goal); return(new CreatureCommand { DeltaX = movement.X, DeltaY = movement.Y }); } } switch (CurrentDirection) { case Directions.Up: if (Game.CanMoveToUp(x, y)) { return(Move(0, -1, currentPosition)); } break; case Directions.Down: if (Game.CanMoveToDown(x, y)) { return(Move(0, 1, currentPosition)); } break; case Directions.Left: if (Game.CanMoveToLeft(x, y)) { return(Move(-1, 0, currentPosition)); } break; case Directions.Right: if (Game.CanMoveToRight(x, y)) { return(Move(1, 0, currentPosition)); } break; } return(new CreatureCommand()); }