我正在做一个生命游戏克隆(不能链接wiki,因为它已经关闭)。基本功能已经完成,但我想让用户也可以选择定义自己的规则。生活规则的标准游戏是:
有2个或3个邻居的
细胞继续存活。
0-1和4-8相邻的细胞死亡。
有3个邻居的死细胞活了下来。
这很容易用2个if-语句来完成.但是,用户也可以定义如下内容:
1-3或5-7邻接的
细胞继续存活.
另一个号码的细胞死了。
有两个或四个邻居的死细胞会活下来。
我如何在if-语句中实现这一点?我能用某种清单来核对吗?
编辑:我在这里看到了一些很好的解决方案。必须确定什么最适合我的代码。对于任何还在回答的人:我可以正确地处理用户输入,不要担心;)
我可能会有一个窗口来询问How many neighbors to stay alive?,How many neighbours to become alive when dead?,以及一些文本框。它们还将检查输入是否有效。
(这里是C# in Unity3D)
发布于 2012-01-18 14:11:51
我只会检查那些会导致细胞死亡的条件。我会按照这样的思路来构造我的功能:
bool CalculateIfDead(Cell c, int[] deadlyCountRules)
{
foreach(int n in deadlyCountRules)
{
if(c.NeighbourCount == n)
{
return true;
}
}
return false;
}发布于 2012-01-18 14:05:25
我会定义一个带有适当值的枚举,Die,NoChange。
然后创建一个列表/数组,并为每个可能的邻居(0到8)创建一个该类型的元素。然后,用户可以以何种方式设置这个列表(可能是将枚举分隔为字符串的逗号分隔列表,然后将其拆分为枚举类型)。
然后,你所要做的就是数数邻居,并执行查找和相应的行动。
var UserActionList =
"Die, Die, NoChange, NoChange, Propogate, Propogate, Die, Die, Die"
.Split(',').Select(s => Enum.Parse(typeof(CellAction), s).ToArray();
// Count neighbours
swtich(UserActionList[NeighboursCount])
{
case Die:
/////
case Propogate:
/////
}发布于 2012-01-18 14:09:02
试试解决方案matix。
bool life[] = new bool[] {false, false, true, true, false, false, false, false, false};
bool die[] = new bool[] {true, true, false, false, true, true, true, true, true};
bool alive[] = new bool[] {false, false, false, true, false, false, false, false, false};
bool shouldLife=live[count];
bool shouldDie=die[count];
bool getAlive=alive[count];https://stackoverflow.com/questions/8911405
复制相似问题