Prev Up Next
Go backward to MagnetGame Design
Go up to Top
Go forward to Boxball.java

Magnet Design

/*
 * Name:  Joe Cool
 * Lab:   Lab 2 (magnets)
 * Purpose:  Magnet models a physical magnet with a north and south
 *	     pole.  A magnet can move and it can interact with other
 *	     magnets through attraction and repulsion.
 */
public class Magnet {
    /* The dimensions of the magnet. */
    private final static double MAGNET_WIDTH = 150;
    private final static double MAGNET_HEIGHT = 50;

    /* Distance from pole to magnet perimeter */
    private static final double POLE_DISTANCE = MAGNET_HEIGHT / 2;

    /* The rectangle representing the outline of the magnet */
    private FramedRect box;

    /* The poles of the magnet */
    private Pole northPole, southPole;
	

    // Creates a new magnet
    // Parameters:
    //    point - the upper left corner of the magnet
    //    canvas - the canvas that the magnet will be displayed on
    public Magnet (Location point, DrawingCanvas canvas)
    {
	// Draw the rectangle
	// Create the north and south poles offset by POLE_DISTANCE
	// within the rectangle
    }

    // Return the upper left corner of the magnet.
    public Location getLocation()
    {
	return box.getLocation();
    }

    // Move the magnet relative to its current position.
    // Parameters:
    //    xoff - the x offset in the movement
    //    yoff - the y offset in the movement
    public void move(double xoff, double yoff)
    {
	// Move the rectangle and the two poles by the same offset.
    }

    // Move the magnet so that its upper left corner is at the given
    // point.
    // Parameters:
    //   point - the new upper left corner for the magnet
    public void moveTo( Location point)
    {
	// Calculate an offset from the point to the current box
	// location.  Call the move method using the calculated
	// offset.
    }

    // Returns true if point is within the bounds of the magnet.
    // Parameters:
    //   point - the point to check for containment
    public boolean contains (Location point)
    {
	// Return true if the box contains point.
    }

    // Swaps the north and south poles of the magnet.
    public void flip ()
    {
	// Remember the x coordinate where the north and south poles
	// currently are in local variables.  Compute the distance
	// between those x coordinates.  Move the poles that distance
	// in the x coordinate and 0 in the y distance.
    }

    // Return the north pole of the magnet
    public Pole getNorth ()
    {
	return northPole;
    }
	
    // Return the south pole of the magnet
    public Pole getSouth()
    {
	return southPole;
    }

    // Cause another magnet to move if it is close enough to cause
    // a magnet reaction.
    // Parameter:  other - the magnet to check for a reaction
    public void interact (Magnet other)
    {
	// Check for attraction between the opposite poles of this
	// magnet and the other magnet.
	// Check for repulsion between similar poles of this
	// magnet and the other magnet.
    }

}

Prev Up Next