关于计算随机颜色

时间:2015-10-01 23:09:28

标签: c# xna

我刚开始在学校学习游戏编程,我们正在使用c#(和xna。所以现在我们需要制作一个俄罗斯方块游戏。我想要做的是使用随机数来创建颜色所以我想知道这是否正确与否:

    public Block RandomColor()
    {
        int r = Random.Next(6);
        if (r == 0)
        {
            return Color.Red;
        }
        else if (r == 1)
        {
            return Color.Orange;
        }
        else if (r == 2)
        {
            return Color.Yellow;
        }
        else if (r == 3)
        {
            return Color.Green;
        }
        else if (r==4)
        {
            return Color.Blue;
        }
        else if (r==5)
        {
            return Color.Indigo;
        }
        else if (r==6)
        {
            return Color.Purple;
        }

我很不确定这个,因为

1)视觉工作室不会给出这个错误

2)但每次我想写Color 2的东西弹出:RandomColor和ConsoleColor。我需要randomColor而不是Color吗?

我测试过,我可以在Color之后使用代码。答案是肯定的。那么这意味着当我运行代码时颜色不会改变吗?

第一次在stackoverflow上,所以不确定我这样做是对的:)

2 个答案:

答案 0 :(得分:2)

这是从一组颜色中获取随机颜色的另一种方法:

    private Random rnd = new Random();
    private Color[] Colors = new Color[] { Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Blue, Color.Indigo, Color.Purple };

    public Color RandomColor()
    {
        return Colors[rnd.Next(Colors.Length)];
    }

答案 1 :(得分:1)

关于您的代码的一些事项:

  1. 您声明返回类型为Block但实际上返回Color个对象。非常令人惊讶的是编译器没有抱怨这一点。

  2. 因为你正在返回Color个对象(一旦你得到(1)修复)你就可以了。 XNA中未使用ConsoleColor(甚至不确定“randomColor”是什么)。

  3. 您不能只调用Random.Next。您需要在此方法中创建Random实例(,特别是如果它将在循环中调用),然后在其上调用Next

    < / LI>
  4. 调用Next会在[0,x)中返回一个数字(其中x是传递的数字)。如果您不熟悉该表示法,则x 独占,因此您永远不会获得x本身。 if语句的范围应为0到5,而不是1到6。

  5. 否则,假设您实际上正在使用SpriteBatch.Draw中的返回值,那么您完全处于棒球状态。没有错误是一件好事:)。你的第二个和第三个问题还没有多大意义。