gpt4 book ai didi

c# - 防止字节在递增超过 255 时返回到 0

转载 作者:行者123 更新时间:2023-11-30 19:48:53 24 4
gpt4 key购买 nike

我正在为我正在上的 C#/XNA 类(class)编写 XNA 3.1 应用程序。这是一个非常简单的介绍性任务,用户只需更改屏幕的颜色,按键盘上的 R、G 或 B 按钮选择一个颜色 channel ,然后按向上和向下箭头增加或减少该 channel 的值.

如果我在 255 之后递增一个字节,它会回绕到 0,反之亦然以进行递减,大概是因为 C# 实际上转换了一个 byte在对它们进行算术运算时转换为 int。但是,我的教授特别要求,一旦 channel 达到其最大值或最小值,如果用户试图超出这些界限,它就会停留在那里。我想出了一个自己解决这个问题的方法,但是当我在这里或在谷歌上搜索此类问题的解决方案时,我没有找到任何东西。这就是我在这里解决问题的方法:

/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
// ...

Color color;

private int Red
{
set { color.R = NoWrapIntToByte(value); }
get { return (int)color.R; }
}

private int Green
{
set { color.G = NoWrapIntToByte(value); }
get { return (int)color.G; }
}

private int Blue
{
set {color.B = NoWrapIntToByte(value); }
get { return (int)color.B; }
}

/// <summary>
/// Converts an integer to a byte but doesn't wrap.
/// </summary>
/// <param name="x"></param>
/// <returns></returns>
static byte NoWrapIntToByte(int x)
{
if (x < Byte.MinValue)
return Byte.MinValue;
else if (x > Byte.MaxValue)
return Byte.MaxValue;
else
return (byte)x;
}
}

每次Draw()方法被调用时,存储在color中的颜色被设置为屏幕的颜色。

为了清楚起见,我意识到我不能做类似的事情

byte x = 256;    // compiler error

编译器会报错。但是,当用户按下颜色 channel 递增或递减的向上或向下箭头时,如果 channel 递减到 0 以下或递增到 255 以上,它将换行。我使用 int 作为 channel 属性的类型,因为如果我使用类似 Red -= 1Red += 1 的东西,则有如果我出界,会发生不同的期望。如果我正在添加,我希望结果值小于原始值,反之亦然,如果我正在递减。我正在使用 int,因为它允许我在属性中检测到这一点并进行相应处理。

我认为我的解决方案没问题,但我很好奇我是否忽略了什么。我不可能是唯一一个试图解决这个问题的人,所以我很好奇解决这个问题的惯用或最佳实践方法是什么。我不要求我的家庭作业问题的答案,因为我已经有了一个可行的解决方案。但是,我不太了解 C#,所以我很好奇是否有一种更简单的方法来做同样的事情,或者使用比我这里所用代码更少的方法。我知道我可以让 C# 抛出 Overflow 异常,但这需要更改项目设置,而且它也没有告诉我具体是什么类型。

谢谢!

最佳答案

您的回答似乎应该按照您的意愿行事,但感觉需要大量代码才能实现。如果这是我要解决的问题,我可能会做更像这样的事情:

static byte NoWrapIntToByte(int x)
{
int tmp;
tmp = Math.Max(x, 0);
tmp = Math.Min(255, tmp);
return (byte)tmp;
}

感谢@Marlon 的Math.Max/Min 修复。

感谢@Andrew Noyes 的选角修复。

希望这对您有所帮助。 :)

关于c# - 防止字节在递增超过 255 时返回到 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840696/

24 4 0
文章推荐: c# - 我将什么传递到 List.Sort() 以按 Object.SomeInteger 对项目进行排序?