יום שני, 14 בפברואר 2011

Gridworld: Part 2: Exercises: Page 13-15



1. Write a class CircleBug  that is identical to BoxBug,  except that in the act()  method the turn() method is called once instead of twice. How is its behavior different from aBoxBug?  
public void act()
   {
         if (steps<sideLength && can Move())
         {
               move();
               steps++;
         }
          else
         {
                turn();
                steps=0;
          }

It turns 45 degrees instead of 90 degrees obviously and therefore creates and octagon.
2. Write a class SpiralBug  that drops flowers in a spiral pattern.

Hint: Imitate BoxBug,  but adjust the side length when the bug turns. You may want to change the world to an UnboundedGrid  to see the spiral pattern more clearly.

    public void act()
    {
        if (steps < sideLength && canMove())
        {
            move();
            steps++;
        }
        else
        {
            turn();
            turn();
            steps = 0;
            sideLength++;
        }
    }

Because it increases every time by the same increment it will never hit its original path and will therefore spiral.
3. Write a class ZBug  to implement bugs that move in a “Z” pattern, starting in the top left corner. After completing one “Z” pattern, a ZBug  should stop moving.

In any step, if a ZBug  can’t move and is still attempting to complete its “Z” pattern, the ZBug  does not move and should not turn to start a new side. Supply the length of the “Z” as a parameter in the constructor. The following image shows a “Z” pattern of length 4.

Hint: Notice that a ZBug  needs to be facing east before beginning its “Z” pattern.  

   public void act()
    {
        if (steps < sideLength && canMove())
        {
            move();
            steps++;
        }
        else
        {
            if (east)
                {
                    turn();
                    turn();
                    turn();
                    steps = 0;
                    east = false;
                }
            else
                {
                    turn();
                    turn();
                    turn();
                    turn();
                    turn();
                    steps = 0;
                    east = true;
                }
        }
    }

Took a little big of trial an error. PS in the given I wrote that it is already facing east with a boolean.
4. Write a class DancingBug  that “dances” by making different turns before each move. The DancingBug  constructor has an integer array as parameter. The integer entries in the array represent how many times the bug turns before it moves.

For example, an array entry of 5 represents a turn of 225 degrees (recall one turn is 45 degrees). When a dancing bug acts, it should turn the number of times given by the current array entry, then act like a Bug.  In the next move, it should use the next entry in the array. After carrying out the last turn in the array, it should start again with the initial array value so that the dancing bug continually repeats the same turning pattern.

The DancingBugRunner  class should create an array and pass it as a parameter to the DancingBug  constructor.
wow.
5. Study the code for the BoxBugRunner  class. Summarize the steps you would use to add another BoxBug  actor to the grid.  
Somehow create a new bug by clicking an empty box in the grid.


אין תגובות:

הוסף רשומת תגובה