我刚开始在学校学习游戏编程,我们正在使用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上,所以不确定我这样做是对的:)
答案 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)
关于您的代码的一些事项:
您声明返回类型为Block
但实际上返回Color
个对象。非常令人惊讶的是编译器没有抱怨这一点。
因为你正在返回Color
个对象(一旦你得到(1)修复)你就可以了。 XNA中未使用ConsoleColor
(甚至不确定“randomColor”是什么)。
您不能只调用Random.Next
。您需要在此方法中创建Random
实例(不,特别是如果它将在循环中调用),然后在其上调用Next
。
调用Next
会在[0,x)中返回一个数字(其中x是传递的数字)。如果您不熟悉该表示法,则x 独占,因此您永远不会获得x本身。 if语句的范围应为0到5,而不是1到6。
否则,假设您实际上正在使用SpriteBatch.Draw
中的返回值,那么您完全处于棒球状态。没有错误是一件好事:)。你的第二个和第三个问题还没有多大意义。