void DrawSudokuGrid(Graphics g) { if (count == 0) { _grid = grid.GenerateGrid(); int r = 0; for (int row = 0; row < 5; row += 2) { for (int col = 0; col < 4; col += 2) { if (r == 0) { r = new Random().Next(); } if (r % 2 == 1) { _grid[row, col] = 0; } r /= 2; } } for (int row = 1; row < 5; row += 2) { for (int col = 1; col < 4; col += 2) { if (r == 0) { r = new Random().Next(); } if (r % 2 == 1) { _grid[row, col] = 0; } r /= 2; } } for (int row = 0; row < 5; row += 2) { for (int col = 1; col < 4; col += 2) { if (r == 0) { r = new Random().Next(); } if (r % 2 == 1) { _grid[row, col] = 0; } r /= 2; } } for (int row = 1; row < 5; row += 2) { for (int col = 0; col < 4; col += 2) { if (r == 0) { r = new Random().Next(); } if (r % 2 == 1) { _grid[row, col] = 0; } r /= 2; } } if (r % 2 == 0) { _grid[4, 4] = 0; } for (int row = 0; row < 5; row++) { for (int col = 0; col < 4; col++) { if (_grid[row, col] == 0) { _grid[8 - row, 8 - col] = 0; _grid[8 - col, row] = 0; _grid[col, 8 - row] = 0; } } } gridHints = grid.CalculateHints(_grid); _board = ClientRectangle; } // draw square g.DrawRectangle(_penThick, _board); int spacingX = _board.Width / 9; int spacingY = _board.Height / 9; for (int col = 0; col < 9; col++) { for (int row = 0; row < 9; row++) { _boardArray[row, col] = new Rectangle(_board.Left + col * spacingX, _board.Top + row * spacingY, spacingX, spacingY); } } g.FillRectangle(Brushes.Yellow, _boardArray[0, 3]); g.FillRectangle(Brushes.DarkViolet, _boardArray[0, 4]); g.FillRectangle(Brushes.Yellow, _boardArray[0, 5]); g.FillRectangle(Brushes.DeepPink, _boardArray[0, 6]); g.FillRectangle(Brushes.DeepPink, _boardArray[0, 7]); g.FillRectangle(Brushes.DeepPink, _boardArray[1, 1]); g.FillRectangle(Brushes.DeepPink, _boardArray[1, 2]); g.FillRectangle(Brushes.Yellow, _boardArray[1, 3]); g.FillRectangle(Brushes.DarkViolet, _boardArray[1, 4]); g.FillRectangle(Brushes.Yellow, _boardArray[1, 5]); g.FillRectangle(Brushes.DeepPink, _boardArray[1, 6]); g.FillRectangle(Brushes.DeepPink, _boardArray[1, 7]); g.FillRectangle(Brushes.Yellow, _boardArray[2, 3]); g.FillRectangle(Brushes.Yellow, _boardArray[2, 4]); g.FillRectangle(Brushes.Yellow, _boardArray[2, 5]); g.FillRectangle(Brushes.DarkViolet, _boardArray[3, 0]); g.FillRectangle(Brushes.DarkViolet, _boardArray[3, 1]); g.FillRectangle(Brushes.DeepPink, _boardArray[3, 3]); g.FillRectangle(Brushes.DeepPink, _boardArray[3, 4]); g.FillRectangle(Brushes.DeepPink, _boardArray[3, 5]); g.FillRectangle(Brushes.DarkViolet, _boardArray[3, 7]); g.FillRectangle(Brushes.DeepPink, _boardArray[4, 4]); g.FillRectangle(Brushes.DeepPink, _boardArray[4, 5]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 0]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 1]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 2]); g.FillRectangle(Brushes.DeepPink, _boardArray[5, 4]); g.FillRectangle(Brushes.DeepPink, _boardArray[5, 5]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 6]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 7]); g.FillRectangle(Brushes.DarkViolet, _boardArray[5, 8]); g.FillRectangle(Brushes.Yellow, _boardArray[6, 0]); g.FillRectangle(Brushes.Yellow, _boardArray[6, 1]); g.FillRectangle(Brushes.Yellow, _boardArray[6, 2]); g.FillRectangle(Brushes.DarkViolet, _boardArray[6, 4]); g.FillRectangle(Brushes.Yellow, _boardArray[6, 6]); g.FillRectangle(Brushes.DeepPink, _boardArray[6, 7]); g.FillRectangle(Brushes.Yellow, _boardArray[6, 8]); g.FillRectangle(Brushes.Yellow, _boardArray[7, 0]); g.FillRectangle(Brushes.DeepPink, _boardArray[7, 1]); g.FillRectangle(Brushes.Yellow, _boardArray[7, 2]); g.FillRectangle(Brushes.DarkViolet, _boardArray[7, 5]); g.FillRectangle(Brushes.Yellow, _boardArray[7, 6]); g.FillRectangle(Brushes.DeepPink, _boardArray[7, 7]); g.FillRectangle(Brushes.Yellow, _boardArray[7, 8]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 0]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 1]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 2]); g.FillRectangle(Brushes.DarkViolet, _boardArray[8, 4]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 6]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 7]); g.FillRectangle(Brushes.Yellow, _boardArray[8, 8]); for (int i = 0; i < 10; i++) { if (i % 3 == 0) { g.DrawLine(_penThick, _board.Left, _board.Top + spacingY * i, _board.Right, _board.Top + spacingY * i); g.DrawLine(_penThick, _board.Left + spacingX * i, _board.Top, _board.Left + spacingX * i, _board.Bottom); } else { g.DrawLine(Pens.Black, _board.Left, _board.Top + spacingY * i, _board.Right, _board.Top + spacingY * i); g.DrawLine(Pens.Black, _board.Left + spacingX * i, _board.Top, _board.Left + spacingX * i, _board.Bottom); } } for (int col = 0; col < 9; col++) { for (int row = 0; row < 9; row++) { int val = _grid[row, col]; if (val != 0) { g.DrawString(val.ToString(), _sudukoFont, Brushes.Black, _board.Left + col * spacingX + 4, _board.Top + row * spacingY + 1, new StringFormat()); } else { DrawGridHints(g, row, col); } } } }