1

所以我有这个代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click_1(object sender, EventArgs e)
    {
        Table t = new Table();
    }
}
class Cell
{
    Point position;
    const int SIZE = 20;
    Cell[] neighbors;
    public Cell(Point position, Random r)
    {
        this.position = position;
        Visualisation(r);
    }
    void Visualisation(Random r)
    {
        Graphics paper= Form1.ActiveForm.CreateGraphics();
        paper.DrawRectangle(new Pen(Color.Red), position.X, position.Y, SIZE, SIZE);
    }
}
class Table
{
    Cell[] table = new Cell[100];
    public Table()
    {
        Random r = new Random();
        for (int i = 0; i < 100; i++)
        {
            table[i] = new Cell(new Point(i % 10 * 20 + 40, i / 10 * 20 + 40), r);
        }
    }

我会将数字写入所有单元格,每个单元格有多少邻居。我该怎么做?塞拉[] szomszedok; 是我应该计算每个单元格有多少邻居的部分。我在细胞中需要的目标:

3 5 5 5 5 5 5 5 5 3
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
5 8 8 8 8 8 8 8 8 5
3 5 5 5 5 5 5 5 5 3
4

1 回答 1

0

为此有许多可能的方法。

一种天真的方法是创建一个GetIndex(int x, int y)方法来获取要使用的索引table[]。让它返回-1一个不在网格上的位置。然后创建一个GetCell(int x, int y)调用GetIndex()并返回给定单元格的方法,或者null 为不在网格上的位置创建一个方法。

[x, y]现在,您可以通过引入一种查找邻居的方法来计算给定单元格的邻居:

public List<Cell> GetNeighbors(int x, int y)
{
    var neighbors = new List<Cell>();
    neighbors.Add(GetCell(x - 1, y - 1));
    neighbors.Add(GetCell(x + 0, y - 1));
    neighbors.Add(GetCell(x + 1, y - 1));
    // ...
    neighbors.Add(GetCell(x + 1, y + 1));

    return neighbors;
}

然后计算一个单元格的邻居,只需 count table.GetNeighbors(x, y).Count(n => n != null)

于 2015-10-05T12:16:50.640 回答