Я вроде как новичок в программировании .. Я пытаюсь написать простой компонент для кузнечика о клеточных автоматах. Идея состоит в том, что компонент начинается с массива из 1 и 0, принимает входную «итерацию» в виде того, сколько поколений клеточных автоматов, согласно правилам, выводят либо «1», либо «0» в качестве списка результатов. Я столкнулся с проблемой, что мой код не регистрирует изменения, может кто-нибудь помочь? Ниже мой код, пожалуйста, помогите, спасибо!
private CA myCA;
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
pManager.AddIntegerParameter("Iterations", "Iterations", "Iterations", GH_ParamAccess.item);
}
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
pManager.AddIntegerParameter("Boolean", "Boolean", "Boolean", GH_ParamAccess.list);
}
protected override void SolveInstance(IGH_DataAccess DA)
{
int iIteration = 0;
DA.GetData("Iterations", ref iIteration);
myCA = new CA();
myCA.start();
if (myCA.generation<iIteration) myCA.Generate();
DA.SetDataList("Boolean", myCA.Display());
}```
``` namespace TestProject
{
public class CA
{
List<int> cell = new List<int>();
List<int> nextCell = new List<int>();
public int[] cells;
public int generation;
public int[] ruleset = { 0, 1, 0, 1, 1, 0, 1, 0 };
public CA()
{
}
public void start()
{
cells = new int[100];// may need a list to record all the numbers in the generation
for (int i = 0; i < 100; i++)
{
cells[i] = 0;
}
cells[cells.Length / 2] = 1; // arbitrarily start with just the middle cell having a state of "1"
generation = 0;
}
public void Generate()
{
int[] nextGen = new int[100];
for (int i = 1; i < 99; i++)
{
int left = cells[i - 1];
int me = cells[i];
int right = cells[i + 1];
nextGen[i] = Rules(left, me, right);//may need a list to record these outcomes, next gen will show up as a list as well.
cells = nextGen;
generation += 1;
}
}
public int Rules(int a, int b, int c)
{
if (a == 1 && b == 1 && c == 1) return ruleset[0];
if (a == 1 && b == 1 && c == 0) return ruleset[1];
if (a == 1 && b == 0 && c == 1) return ruleset[2];
if (a == 1 && b == 0 && c == 0) return ruleset[3];
if (a == 0 && b == 1 && c == 1) return ruleset[4];
if (a == 0 && b == 1 && c == 0) return ruleset[5];
if (a == 0 && b == 0 && c == 1) return ruleset[6];
if (a == 0 && b == 0 && c == 0) return ruleset[7];
return 0;
}
public List<int> Display()
{
List<int> BO = new List<int>();
for (int i = 0; i < cells.Length; i++)
{
if (cells[i] == 1) BO.Add(1);
else if (cells[i] == 0) BO.Add(0);
}
return BO;
}
}
} ```