Example #1
0
        public void TestPlayerKeyPickup()
        {
            var gameModel = new GameModel();
            var labyrinth = new LabyrinthModel(new[, ]
            {
                {
                    LabyrinthModel.LabyrinthElements.Cell, LabyrinthModel.LabyrinthElements.Cell
                }
            }, new Point(0, 0));

            labyrinth.PortalPositions = new List <Point>();
            labyrinth.ExitPosition    = new Point(-1, 0);
            labyrinth.KeyPosition     = new Point(1, 0);
            gameModel.StartGame(labyrinth);

            Assert.False(gameModel.Player.HasKey);

            gameModel.KeyDown(Keys.Right);

            var expectedPoint = new Point(1, 0);
            var actualPoint   = new Point(gameModel.Player.X, gameModel.Player.Y);

            Assert.True(gameModel.Player.HasKey);
            Assert.AreEqual(expectedPoint, actualPoint);
        }
        public List <Point> ProccessLabyrinth(LabyrinthModel model)
        {
            var startPoint         = model.Elements.FirstOrDefault(e => e.Type == ElementType.Start);
            var proccessedElements = new List <LabyrinthElement>();

            ProcessLabyrinth(startPoint, proccessedElements, model.Elements);

            var startElement  = proccessedElements.FirstOrDefault(e => e.Type == ElementType.Start);
            var finishElement = proccessedElements.FirstOrDefault(e => e.Type == ElementType.Finish);

            var chains = new List <LabyrinthElementChain>();

            SearchPathToProccessedElement(startElement,
                                          finishElement.Point,
                                          null,
                                          chains);

            var chainElements = GetChainElements(chains.FirstOrDefault());

            chainElements.Reverse();

            var result = chainElements.Select(e => e.Point).ToList();

            return(result);
        }
Example #3
0
 public void DrawLabyrinth(LabyrinthModel model)
 {
     foreach (var element in model.Elements)
     {
         DrawElement(element);
     }
 }
Example #4
0
        public void TestDisarming()
        {
            var gameModel = new GameModel();
            var labyrinth = new LabyrinthModel(new[, ]
            {
                {
                    LabyrinthModel.LabyrinthElements.Cell, LabyrinthModel.LabyrinthElements.Cell, LabyrinthModel.LabyrinthElements.Cell
                }
            }, new Point(0, 0));

            labyrinth.PortalPositions = new List <Point> {
                new Point(1, 0)
            };
            labyrinth.TeleportPoints = new List <Point> {
                new Point(2, 0)
            };
            labyrinth.ExitPosition    = new Point(-1, 0);
            labyrinth.KeyPosition     = new Point(-1, 0);
            labyrinth.GlassesPosition = new Point(1, 0);
            gameModel.StartGame(labyrinth);

            Assert.False(gameModel.Player.IsDisarming);

            gameModel.KeyDown(Keys.Space);

            Assert.True(gameModel.Player.IsDisarming);
        }
Example #5
0
        public ActionResult Index()
        {
            var labModel = new LabyrinthModel
            {
                Map  = new int[0, 0],
                Path = new ArrayList()
            };

            return(View(labModel));
        }
Example #6
0
        public void TestWinCondition()
        {
            var gameModel = new GameModel();
            var labyrinth = new LabyrinthModel(new[, ]
            {
                {
                    LabyrinthModel.LabyrinthElements.Cell, LabyrinthModel.LabyrinthElements.Cell, LabyrinthModel.LabyrinthElements.Cell
                }
            }, new Point(0, 0));

            labyrinth.PortalPositions = new List <Point>();
            labyrinth.ExitPosition    = new Point(2, 0);
            labyrinth.KeyPosition     = new Point(1, 0);
            labyrinth.GlassesPosition = new Point(-1, 0);
            gameModel.StartGame(labyrinth);

            Assert.False(gameModel.GameState == GameState.GameWon);

            gameModel.KeyDown(Keys.Right);
            gameModel.KeyDown(Keys.Right);

            Assert.True(gameModel.GameState == GameState.GameWon);
        }
Example #7
0
        public ActionResult Index(LabyrinthModel myLabyrinthModel)
        {
            if (Request.Files.Count > 0)
            {
                var file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(Server.MapPath("~/Content/"), fileName);
                    file.SaveAs(path);
                }
            }

            var l = new Labyrinth.Labyrinth(Server.MapPath("~/Content/" + fileName));

            myLabyrinthModel.Map = (int [, ])l.Map.Clone();

            myLabyrinthModel.StartPointX--;
            myLabyrinthModel.StartPointY--;
            myLabyrinthModel.FinishPointX--;
            myLabyrinthModel.FinishPointY--;

            l.SetBlockType(myLabyrinthModel.StartPointX, myLabyrinthModel.StartPointY, 1);
            l.SetBlockType(myLabyrinthModel.FinishPointX, myLabyrinthModel.FinishPointY, 2);
            if (l.Find())
            {
                myLabyrinthModel.Path = l.Path;
                ViewBag.path          = "Маршрут: " + l.PathAsText;
            }
            else
            {
                myLabyrinthModel.Path = new ArrayList();
                ViewBag.path          = "Маршрут: Путь не найден";
            }
            return(View(myLabyrinthModel));
        }
Example #8
0
        public static LabyrinthModel ParseLabyrinthFile()
        {
            var location  = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
            var directory = new FileInfo(location.AbsolutePath).Directory.FullName;
            var filePath  = $"{directory}\\{AppSettings.Default.LabyrinthFileName}";

            if (!File.Exists(filePath))
            {
                throw new Exception("File not exists.");
            }

            var linesList = File.ReadAllLines(filePath).Reverse().ToList();

            var model = new LabyrinthModel();

            short lineNumber = 0;

            foreach (var line in linesList)
            {
                short charNumber = 0;
                foreach (var character in line)
                {
                    var element = new LabyrinthElement
                    {
                        Point = new Point(charNumber, lineNumber)
                    };

                    switch (character)
                    {
                    case ' ':
                        element.Type = ElementType.Empty;
                        break;

                    case 'S':
                        element.Type = ElementType.Start;
                        break;

                    case 'F':
                        element.Type = ElementType.Finish;
                        break;

                    case '#':
                        element.Type = ElementType.Wall;
                        break;

                    default:
                        throw new Exception($"Input file contains unexpected character '{character}'");
                    }

                    model.Elements.Add(element);

                    charNumber++;
                }

                lineNumber++;
            }

            var startPoint = model.Elements.FirstOrDefault(e => e.Type == ElementType.Start);

            if (startPoint == null)
            {
                throw new Exception("Start point not exists in input file.");
            }

            var finishPoint = model.Elements.FirstOrDefault(e => e.Type == ElementType.Finish);

            if (finishPoint == null)
            {
                throw new Exception("Finish point not exists in input file.");
            }

            return(model);
        }
Example #9
0
 public void SetUp()
 {
     labyrinthModel = new LabyrinthGenerator().CreateLabyrinth(Width, Height, PortalsCount);
 }