我正在制作一个关于遗传学的游戏,我偶然发现了一个小问题"。 (事实上,这更像是一个问题)
我有一个DNA类,里面有很多变量,可以存储每个"生物的信息。在游戏中。
public class DNA {
float size;
float speed;
float drag;
float eyeSize;
int numberOfEyes;
float color_r;
[...]
}
现在让我们想象一下我想平均两个DNA。
我能做到:
DNA AverageDNAs (DNA dna1, DNA dna2) {
DNA newDNA = new DNA ();
newDNA.size = (dna1.size+dna2.size)/2f;
newDNA.speed = (dna1.speed+dna2.speed)/2f;
[...]
}
但似乎很长,每次我要做一些计算,我都需要逐个重写每个变量。
所以我创建了一个函数,将所有变量(在0和1之间归一化)存储到列表中
public class DNA {
public float size;
public float speed;
[...]
private List<float> tempList;
public List<float> ToList() {
if (tempList == null) {
tempList = new List<float>();
toReturn.Add (size/sizemax);
toReturn.Add (speed/speedmax);
[...]
}
return tempList
}
public static ADN fromList(List<float> list) {
ADN toReturn = new ADN();
toReturn.size = list[0]*sizemax;
[...]
}
}
现在,我可以这样做:
DNA AverageDNAs (DNA dna1, DNA dna2) {
List<float> dnaList1 = dna1.ToList();
List<float> dnaList2 = dna2.ToList();
List<float> newDNA = new List<float>();
for (int i = 0; i<dnaList1.Count; i++) {
newDNA.Add ((dnaList1[i]+dnaList2[i])/2f);
}
return DNA.fromList(newDNA);
}
实现新功能和计算更容易,但它非常繁重(部分原因是列表创建),而且不是很漂亮(我猜?)。
为了便于阅读,我不想仅使用List<float>
。
我想知道是否有更好的方法来处理这种情况?
(请原谅我可怜的英语,因为我不是母语人士)