获得布尔值来表示1和-1的优雅方法

时间:2014-04-28 07:19:06

标签: c# boolean

这是我的一些代码,每当它击中两侧时,它会将Play Field从左向右移动一个。

    private void moveMonsterPlayField()
    {
        if (monsterPlayField.DirectionRight)
        {
            monsterPlayField.X++;
            if (monsterPlayField.X + monsterPlayField.Width >= this.width)
            {
                monsterPlayField.DirectionRight = false;
                monsterPlayField.Y++;
            }
        }

        else 
        {
            monsterPlayField.X--;
            if (monsterPlayField.X == 0)
            {
                monsterPlayField.DirectionRight = true;
                monsterPlayField.Y++;
            }
        }



    }

但它有点冗长。

相反,我想做类似的事情:

    private void moveMonsterPlayField()
    {
       monsterPlayField.X += monsterPlayField.DirectionRight * 1 //where DirectionRight resolves to 1 or -1

       if (monsterPlayField.X + monsterPlayField.Width >= this.width || monsterPlayField.X == 0)
       {
           monsterPlayField.DirectionRight = !monsterPlayField.DirectionRight;
           monsterPlayField.Y++;
       }



    }

可能吗?

3 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

monsterPlayField.X += monsterPlayField.DirectionRight ? 1 : -1;

实际上,这只是一个if语句,结果为truefalse

其他选择:

  • 您可以在课程中添加另一个属性来计算此内容。
  • 创建一个类,并将转化运算符覆盖为boolint,但我会远离个人。

答案 1 :(得分:2)

另一种选择是使用枚举并为枚举成员分配值。

enum Direction
{
    Right = 1,
    Left = -1
}

然后,您可以将枚举转换为代码中的int值。

private void moveMonsterPlayField()
{
   monsterPlayField.X += (int)monsterPlayField.Direction; // Direction is now of type Direction instead of bool

   if (monsterPlayField.X + monsterPlayField.Width >= this.width || monsterPlayField.X == 0)
   {
       monsterPlayField.Direction = (Direction)((int)monsterPlayField.Direction * -1); 
   }
}

答案 2 :(得分:2)

您可能考虑的另一种选择是使用两个整数属性代替怪物的当前速度,指定X和Y分量:

int VelocityX;
int VelocityY;

目前您将值限制为-1,0和1(但您可以在将来指定更高的速度)。

然后你调整怪物(X,Y)位置的代码将是:

monsterPlayField.X += monsterPlayField.VelocityX;
monsterPlayField.Y += monsterPlayField.VelocityY;

更改后,您仍需要对X和Y值进行范围检查。