帮助我简单的winforms游戏

时间:2011-04-24 19:07:17

标签: c# winforms

所以,我试图模仿winforms中的扫雷游戏,就像练习一样。到目前为止,我有两个类,一个名为“Cell”,它派生自常规按钮类,但它有自己的几个属性和一个处理逻辑的类(基本上我做了一个二维数组,填充了类型为“Cell”的对象并用炸弹填充它。我遇到了一个问题 - 如何将我的“Cell”按钮控件数组附加到表单?没有从头开始重写一切?这两个课程显然都没有完成,只是我想检查它在表格上的样子并意识到我被卡住了。

这是我的Cell类

class Cell : Button
{
    //private GraphicsPath path;

    const int width = 20;
    const int height = 20;

    public byte Value { get; set; }
    public bool IsBomb { get; set; }

    public Cell()
    {

    }

    public Cell(int x, int y)
    {
        this.Location = new Point(x, y);
    }

    protected override void OnPaint(PaintEventArgs pevent)
    {
        base.OnPaint(pevent);

        this.Width = width;
        this.Height = height;

    }

    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        this.Text = Value.ToString();

    }
}

这是我的数组类

class CellArray
{
    private int _rows = 0;
    private int _columns = 0;
    private int _bombAmount = 0;
    private Random rand;
    private Cell[,] cellMatrix;

    public CellArray(int rows, int columns, int bombAmount)
    {
        _rows = rows;
        _columns = columns;
        _bombAmount = bombAmount;
        populate();
        setBombs();
    }

    private void populate()
    {
        cellMatrix = new Cell[_rows, _columns];

        for (int i = 1; i < _rows; i++)
        {
            for (int j = 1; j < _columns; j++)
            {
                cellMatrix[i, j] = new Cell();
                cellMatrix[i, j].IsBomb = false;

            }
        }
    }

    private void setBombs()
    {
        //*****************************************QUESTIONABLE************************************
        rand = new Random();
        int k = 1;
        while (k < _bombAmount)
        {
        Flag:
            {
                int i = rand.Next(_rows);
                int j = rand.Next(_columns);
                if (cellMatrix[i, j].IsBomb == false)
                    cellMatrix[i, j].IsBomb = true;
                else
                    goto Flag;
            }
        }
        //*****************************************QUESTIONABLE************************************

        for (int i = 1; i < _rows; i++)
        {
            for (int j = 1; j < _columns; j++)
            {
                if (cellMatrix[i - 1, j - 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i - 1, j].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i, j - 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i - 1, j + 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i, j + 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i + 1, j + 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i + 1, j].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
                if (cellMatrix[i + 1, j - 1].IsBomb == true)
                {
                    cellMatrix[i, j].Value++;
                }
            }
        }

    }

}

1 个答案:

答案 0 :(得分:1)

  

如何附加我的&#34; Cell&#34;   按钮控件到表单

这个问题可以解决类似这个问题:

Using programatically created CheckBoxes in Windows Form [C#]

想法是使用YourForm.Controls.Add(...)。不要忘记为表格坐标系中的单元格/按钮提供适当的位置。

当然,我想提及恕我直言从Cell派生Button是一个可怕的设计决定。更好地将您的数据类(如Cell)与GUI类(如Button)完全分开,并选择类似Asher在其第一个答案中建议的技术(向Tag添加一个单元格每个Button的属性)在Cell对象和相应的Button对象之间创建连接。