示例#1
0
        private void MapDiscoverWindowPrepare(MapDiscoverWindow targetWnd)
        {
            ForgetMapDiscoverWindow();

            currentMapWnd = targetWnd;
            OnKeyPressed += currentMapWnd.KeyPressedHandler;
            currentMapWnd.OnCursorChanged      += CurrentMapWndCursorChanged;
            currentMapWnd.OnMazeItemDiscovered += CurrentMapWndItemDiscovered;
        }
示例#2
0
 private void ForgetMapDiscoverWindow()
 {
     if (currentMapWnd != null)
     {
         OnKeyPressed -= currentMapWnd.KeyPressedHandler;
         currentMapWnd.OnCursorChanged      -= CurrentMapWndCursorChanged;
         currentMapWnd.OnMazeItemDiscovered -= CurrentMapWndItemDiscovered;
         currentMapWnd = null;
     }
 }
示例#3
0
        private void OpenMenuItemClick(object sender, EventArgs e)
        {
            var dialogWnd = new OpenFileWindow {
                TargetFolder = targetMapFolder
            };

            if (dialogWnd.ShowDialog() == DialogResult.OK)
            {
                coins    = 0;
                keyCount = 0;
                steps    = 0;
                string[] mazeString;
                try
                {
                    var fileName = Path.GetFileNameWithoutExtension(dialogWnd.FileName);
                    if (fileName?.StartsWith('<') == true)
                    {
                        var assembly     = Assembly.GetExecutingAssembly();
                        var resourceName = assembly.GetManifestResourceNames()
                                           .Single(str => str.EndsWith($"{fileName.Substring(2, fileName.Length - 4)}.mmf"));
                        using var stream = assembly.GetManifestResourceStream(resourceName);
                        using var reader = new StreamReader(stream);
                        var resourceAllText = reader.ReadToEnd();

                        mazeString = Regex.Split(resourceAllText, "\r\n|\r|\n");
                    }
                    else
                    {
                        mazeString = File.ReadAllLines(dialogWnd.FileName);
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.ShowError(exception.Message);
                    return;
                }

                rowCount = mazeString.Length;
                colCount = mazeString[0].Length;

                var mazeCells = new int[rowCount, colCount];
                for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
                {
                    for (var colIndex = 0; colIndex < colCount; colIndex++)
                    {
                        var mazeCellValue = Convert.ToInt32(mazeString[rowIndex][colIndex].ToString());
                        mazeCells[rowIndex, colIndex] = mazeCellValue;
                        if (mazeCellValue == (int)MapItem.StartPoint)
                        {
                            startPoint = new Point(colIndex, rowIndex);
                        }
                    }
                }
                var mapWnd = new MapDiscoverWindow(mazeCells, startPoint)
                {
                    panel1 = { Parent = panel1 }
                };
                MapDiscoverWindowPrepare(mapWnd);
                PrepareStatusBar(new Size(colCount, rowCount));
                currentFileName = Path.GetFileNameWithoutExtension(dialogWnd.FileName);
                SetWindowTitle(currentFileName);
            }
        }