public boolean move(MoveType type, int numUnits) {
		
		
		Vec2D moveVector = new Vec2D();
		switch (type) {
		
		case MOVE_LEFT:
			moveVector.set(0, -numUnits);
			break;
			
		case MOVE_RIGHT:
			moveVector.set(0, numUnits);
			break;
			
		case MOVE_DOWN:
			moveVector.set(numUnits, 0);
			break;
			
		}
		
//		//Copy the piece
//		Point[] originalPiece = new Point[4];
//		Point[] movedPiece = new Point[4];
//		for (int i = 0; i < 4; ++i) {
//			originalPiece[i] = new Point(this.piece[i]);
//			movedPiece[i] = new Point(this.piece[i]);
//		}
//		
//		//Clear the active piece from the board (to get it out of the way).
//		clearPiece();
//		
//		//Try moving.
//		for (int i = 0; i < 4; ++i)
//			movedPiece[i].add(moveVector);
//		
//		//Check whether the moved piece is colliding with anything or out of bounds.
//		//We don't care if the piece is above the board; only left, right, or below.
//		//(Otherwise, a line sticking above the top of the board wouldn't move.)
//		boolean inBounds = theBoard.isPieceInBoundsLeftRightBottom(movedPiece);
//		boolean pieceCollision = theBoard.checkPieceCollision(movedPiece);
//		boolean moveSuccessful = inBounds && !pieceCollision;
//		
//		if (moveSuccessful) {
//			setPiece(movedPiece, this.type);
//			if (type == MoveType.MOVE_DOWN)
//				hasLanded = false;
//			return true;
//		}
//		
//		else {
//			setPiece(originalPiece, this.type);
//			if (type == MoveType.MOVE_DOWN)
//				hasLanded = true;
//			return false;
//		}
//
		
		//Copy the piece and try moving it
		Point[] copy = new Point[4];
		for (int i = 0; i < 4; ++i)
			copy[i] = new Point(piece[i].x + moveVector.x, piece[i].y + moveVector.y);
		
		//Make sure it's in bounds and not colliding with a piece (other than itself)
		boolean inBounds = theBoard.isPieceInBounds(copy);
		boolean collision = false;
		for (int i = 0; i < 4; ++i) {
			if (theBoard.isSet(copy[i]) && !isPartOfPiece(copy[i].x, copy[i].y)) {
				collision = true;
				break;
			}
		}
		
		boolean moveSuccessful = inBounds && !collision;
		
		if (moveSuccessful) {
			clearPiece();
			setPiece(copy, this.type);
			return true;
		}
		else return false;
	}