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); } }
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); }
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); }
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] })); }