C# 10*10表格、单元格和x27;邻居数

C# 10*10表格、单元格和x27;邻居数,c#,cell,drawrectangle,C#,Cell,Drawrectangle,所以我得到了这个代码: 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;

所以我得到了这个代码:

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);
        }
    }

这方面有很多可能的方法

一种简单的方法是创建一个
GetIndex(intx,inty)
方法来获取用于
表[]
的索引。对于不在网格上的位置,让它返回
-1
。然后创建一个
GetCell(intx,inty)
方法,该方法调用
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;
}
公共列表获取邻居(int x,int y)
{
var邻居=新列表();
Add(GetCell(x-1,y-1));
Add(GetCell(x+0,y-1));
Add(GetCell(x+1,y-1));
// ...
Add(GetCell(x+1,y+1));
回归邻居;
}

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

有很多可能的方法

一种简单的方法是创建一个
GetIndex(intx,inty)
方法来获取用于
表[]
的索引。对于不在网格上的位置,让它返回
-1
。然后创建一个
GetCell(intx,inty)
方法,该方法调用
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;
}
公共列表获取邻居(int x,int y)
{
var邻居=新列表();
Add(GetCell(x-1,y-1));
Add(GetCell(x+0,y-1));
Add(GetCell(x+1,y-1));
// ...
Add(GetCell(x+1,y+1));
回归邻居;
}

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

嘿。我建议你用英语编码。这将使人们更容易使用您的代码。如果rajzlap这个词不是你母语的一部分,我真的很难再记住它是什么。编辑,我希望它现在能被理解。谢谢你的提示,对角线算邻居吗?不仅仅是其他单元格。所以,你想存储一个相邻单元格的数组,只是相邻单元格的数量吗?嘿。我建议你用英语编码。这将使人们更容易使用您的代码。如果rajzlap这个词不是你母语的一部分,我真的很难再记住它是什么。编辑,我希望它现在能被理解。谢谢你的提示,对角线算邻居吗?不仅仅是其他单元格。所以,你想存储一个相邻单元格的数组,只是相邻单元格的数量吗?