如何在c#中改变机器人的方向

时间:2013-08-08 10:19:22

标签: c# oop error-handling

我有一个名为BaseRobot的类,其代码为

{   
//=== Defines the possible orientation of the robot.
//=== Note the order is important to allow cycling to be performed in a meaningful manner.
public enum Compass
{
    North, East, South, West
};

//=== The basic robot.
public class BaseRobot
{
    //--- The behaviour properties that were identified, together with associated state.
    //--- The robot identification number.
   private int mId;
   public int id
   {
       get { return mId; }
   }

   //--- the direction in which the robot is currently facing.
   private Compass mOrientation;
   public Compass Orientation
   {
       get { return mOrientation; }
       set { mOrientation = value; }
   }

   //--- The robot's current position.
   private Point mPosition;
   public Point Position
   {
       get { return mPosition; }
   }


   //--- the robot's home position, where it was originally created.
   public Point mHome;
   public Point Home
   {
       get { return mHome; }
   }

    //--- Turn the orientation left (anti-clockwise) or right (clockwise).
    //--- Implementation relies on the N, E, S, W ordering of the enumeration values to allow the arithmetic to work.

    public void TurnLeft()
    {
        --mOrientation;
        if (mOrientation < 0) mOrientation = Compass.West;
    } // end turnLeft method.    

    public void TurnRight()
    {
        mOrientation = (Compass)(((int)mOrientation + 1) % 4);
    } // end turnRight method.

    //--- Move one unit forward in the current orientation.
    public void Move()
    {
        switch (mOrientation)
        {
            case Compass.North: mPosition.Y++; break;
            case Compass.East: mPosition.X++; break;
            case Compass.South: mPosition.Y--; break;
            case Compass.West: mPosition.X--; break;
        }
    } // end Move method.

    //--- Constructor methods.
    public BaseRobot(int aId)
    {
        mId = aId;
        mHome.X = 0;
        mHome = new Point(0, 0);
        mPosition = mHome;
    }
    public BaseRobot(int aId, int aX, int aY)
    {
        mId = aId;
        mHome = new Point(aX, aY);
        mPosition = mHome;
    } // end BaseRobot constructor methods.



} // end BaseRobot class.

} // end namespace.

在我的主程序课程中,我有这个

  //calling  BaseRobot constructors 
        var robot1 = new BaseRobot(0);
        var robot2 = new BaseRobot(0,0,0);

        Console.WriteLine("===Defualt Robot===");
        StringBuilder db = new StringBuilder();
        db.AppendFormat("Robot#1 has home at <{0},{0}>. ", robot1.Home.X, robot1.Home.Y);
        db.AppendFormat("It is facing {0} ", robot1.Orientation);
        db.AppendFormat("and is currently at <{0},{0}>.", robot1.Position.X, robot1.Position.Y);
        Console.WriteLine(db.ToString());

这很好但我想知道我是如何改变机器人面向南,东,西的方式的?此外,当我更改机器人的主页坐标(35,12)时,我得到一条未处理的错误消息,指出索引(从零开始)必须大于或等于零且小于参数列表的大小。 / p>

1 个答案:

答案 0 :(得分:0)

TurnLeft和TurnRight方法通过修改mOrientation字段来旋转机器人,并且由于您提供了setter属性,因此可以直接通过以下方式更改方向:

robot.Orientation = Compass.West;