1

我正在 Sifteo Cubes 上为儿童制作游戏。我正在尝试逐字在立方体上加载一个句子。我对 Sifteo Cubes 有一些经验,但我怎样才能以更漂亮的方式解决这个问题?如果可能的话,更通用。

foreach (CubeWrapper wrapper in mWrappers) {
            if (i == 0) { 
                wrapper.setWord (w1);
            } else if (i == 1) {
                wrapper.setWord (w2);
            } else if (i == 2) {
                wrapper.setWord (w3);
            } else if (i == 3) {
                wrapper.setWord (w4);
            } else if (i == 4) {
                wrapper.setWord (w5);
            }
            i++;
        }

我总是将 w1 添加到第一个包装器中,依此类推。

任何帮助,将不胜感激!

4

3 回答 3

4

您可以执行以下操作:

String[] words = new String[] {w1,w2,w3,w4,w5};

foreach (CubeWrapper wrapper in mWrappers) 
{
   wrapper.setWord(words[i++]);
}

此解决方案有效,但请记住,如果words数组小于mWrappers集合,您将收到一个IndexOutOfBoundsException. 因此,同步对阵列的访问现在是您的工作。

于 2015-08-04T11:09:37.747 回答
0

如果你不能\不想改变你的班级,那么你可以使用反射来做这样的事情(即使这可能不是正确的做法):

foreach (CubeWrapper wrapper in mWrappers) {   
    var name = "w" + (i+1).ToString();
    var value = this.GetType().GetProperty(name).GetValue(this);
    wrapper.setWord(value);
}

例子:

public class ABC
{
    public int w1 { get; set; }
    public int w2 { get; set; }
    public int w3 { get; set; }

    public ABC()
    {
        w1 = 7;
        w2 = 8;
        w3 = 9;
    }

    public void DoSomething()
    {
        var i = 1;
        var name = "w" + (i + 1).ToString(); // w2
        var value = (int)this.GetType().GetProperty(name).GetValue(this);
        DoSomething(value);
    }

    public void DoSomething(int curr)
    {
        Console.WriteLine(curr); // 8
    }
}

用法:

ABC abc = new ABC();
abc.DoSomething();
于 2015-08-04T11:13:56.653 回答
0

您可以使用这样的 Random 类从数组中获取一个随机单词...

        String[] words = new String[] { "w1", "w2", "w3", "w4", "w5" };
        Random r = new Random(0);
        int randomNumber = r.Next(0, words.Length);

        foreach (CubeWrapper wrapper in mWrappers)
        {
            wrapper.setWord(words[randomNumber]);
        }
于 2015-08-04T11:18:16.113 回答