使用Windows窗体创建棋盘

时间:2011-07-18 13:04:42

标签: winforms

使用Windows窗体创建国际象棋棋盘的最佳方法是什么?

我仍然不熟悉winforms中的图形编码,我不确定,使用哪种控件?

用户应该可以将棋子放入棋盘。 我正在尝试编写国际象棋图编辑器。

谢谢

4 个答案:

答案 0 :(得分:4)

有很多方法。这是一个让您开始使用WinForms概念的替代方案:

(它使用Panel控件的2D网格来创建棋盘。要扩展它,您可以更改每个面板的背景图片以显示棋子。游戏由您来定义。)

    // class member array of Panels to track chessboard tiles
    private Panel[,] _chessBoardPanels;

    // event handler of Form Load... init things here
    private void Form_Load(object sender, EventArgs e)
    {
        const int tileSize = 40;
        const int gridSize = 12;
        var clr1 = Color.DarkGray;
        var clr2 = Color.White;

        // initialize the "chess board"
        _chessBoardPanels = new Panel[gridSize, gridSize];

        // double for loop to handle all rows and columns
        for (var n = 0; n < gridSize; n++)
        {
            for (var m = 0; m < gridSize; m++)
            {
                // create new Panel control which will be one 
                // chess board tile
                var newPanel = new Panel
                {
                    Size = new Size(tileSize, tileSize),
                    Location = new Point(tileSize * n, tileSize * m)
                };

                // add to Form's Controls so that they show up
                Controls.Add(newPanel);

                // add to our 2d array of panels for future use
                _chessBoardPanels[n, m] = newPanel;

                // color the backgrounds
                if (n % 2 == 0)
                    newPanel.BackColor = m % 2 != 0 ? clr1 : clr2; 
                else
                    newPanel.BackColor = m % 2 != 0 ? clr2 : clr1;
            }
        }
    }

答案 1 :(得分:2)

最好的方法是使用'国际象棋入门套件':http://www.chessbin.com/page/Chess-Game-Starer-Kit.aspx(替代项目:http://www.codeproject.com/KB/game/SrcChess.aspx

现在很多东西都有入门套件(适用于C#),它为您提供了一个入门示例。

答案 2 :(得分:1)

在控件OnPaint事件处理程序中,首先使用公式(floor(x * 8) mod 2) = (floor(y * 8) mod 2)隐式绘制棋盘图案,或者只使用Graphics.FillRectangle绘制正方形。第二步是使用Graphics.DrawImage在顶部绘制碎片。

答案 3 :(得分:0)

我不知道你想用这个国际象棋棋盘做什么,但是如果它只是一个片段后显示的背景,你最好的镜头是设置一个背景图像。