コード例 #1
0
ファイル: About.cs プロジェクト: UziTech/SudokuPlayer
        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);
                    }
                }
            }
        }