예제 #1
0
        static void Main(string[] args)
        {
            var boardSizeBounds = Defaults.BoardSizeBounds;
            var boardViewState  = new BoardViewState(boardSizeBounds);

            var gameFlow = Generate.GameFlow()
                           .WithBoardSize(boardSizeBounds)
                           .WithBoardViewUpdater(boardViewState)
                           .Build();

            var canvas = GenerateView(boardSizeBounds, boardViewState);

            var(textBox, userActionMessage) = GenerateInteractiveElements(canvas);

            SetupConsole(canvas);

            var isRunning = true;

            var inputReactionCallbacks = new InputReactionCallbacks(
                () => isRunning = false,
                result => HandleGameActionResult(userActionMessage, result),
                () => HandleReset(userActionMessage));
            var input = GenerateInputListeners(textBox, gameFlow, inputReactionCallbacks);

            while (isRunning)
            {
                Thread.Sleep(10);

                ConsoleManager.ReadInput(input);
            }
        }
예제 #2
0
        private static Grid GenerateBoard(BoardCoordinates boardSizeBounds, BoardViewState boardViewState)
        {
            var board = CreateBoard(boardSizeBounds);

            var columns = boardSizeBounds.GetColumnRange().ToList();
            var rows    = boardSizeBounds.GetRowRange().ToList();

            CreateColumnHeaders(columns, board);
            CreateRowHeaders(rows, board);
            CreateBoardContent(columns, rows, board, boardViewState);
            return(board);
        }
예제 #3
0
        private static Canvas GenerateView(
            BoardCoordinates boardSizeBounds, BoardViewState boardViewState)
        {
            var canvas = new Canvas();

            var title = GenerateTitle();

            canvas.Add(title, new Rect(8, 1, 12, 3));

            var board = GenerateBoard(boardSizeBounds, boardViewState);

            canvas.Add(board, new Rect(3, 3, 24, 12));

            var helpText = GenerateHelpText();

            canvas.Add(helpText, new Rect(30, 2, 42, 7));

            return(canvas);
        }
예제 #4
0
 private static void CreateBoardContent(List <int> columns, List <int> rows, Grid board, BoardViewState boardViewState)
 {
     columns.SelectMany(_ => rows, (c, r) => new BoardCoordinates((uint)c, (uint)r))
     .ToList()
     .ForEach(coords => board.AddChild(
                  (int)coords.Column + 1,
                  (int)coords.Row + 1,
                  new Background
     {
         Color   = GenerateBoardFieldColor(coords),
         Content = boardViewState[coords]
     }));
 }