public /*static*/ int endPointMovingFrom( int startPoint, int steps, int playerColor/*, Board board*/) 
    /*throws BadBoardException*/ {
        //         if (board == null) {   /* hmmm, non static call, okay with "this"? */
        //             throw new NullPointerException("board can't be null");
        //         }
        if ( ! legitStartLoc( startPoint, playerColor )) {  // also checks legitColor( )
            /*BadBoardException*/
            throw new IllegalArgumentException("Can't start moving from point '" + startPoint + "'");
        }
        if ( ! legitStepsNum( steps )) {
            /*BadBoardException*/
            throw new IllegalArgumentException("Can't move bad number of steps '" + startPoint + "'");
        }

        int endPoint = startPoint; /* temp value in case something goes wrong */
        if (playerColor == white) {
            if (startPoint == WHITE_BAR_LOC) {
                endPoint = /* 0 + */ steps;
            } else {
                endPoint = startPoint + steps;
            }
        } else if (playerColor == black) {
            if (startPoint == BLACK_BAR_LOC) {
                endPoint = (howManyPoints + 1) - steps;
            } else {
                endPoint = startPoint - steps;
            }
        }
        //?? Shouldn't this fixOutOfBounds( ) now so that endpoint gets explicitly
        //?? Set to constant rather than getting it implicitly by math!!
        //        if (legitPointNum(endPoint)) { /* checks in 1..24, not BAR nor BEAR nor PAST_BEAR */
        /* Easy: is 1 .. 24 so we're done, right? Unless the point is blocked... */
        /* if "canLandOn" is as good as I think it is, it is all we need. */
        if (canLandOn/*Exact*/(endPoint,playerColor)) { /* it won't allow landing on blocked points */
            return endPoint;
        } else {
            return ILLEGAL_MOVE;
        }
        //         } else {
        //             /* be sure to restate endpoint as BEAR or PAST_BEAR or BAR constant */
        //             endPoint = fixOutOfBounds( endPoint, playerColor, board );
        //             if (canLandOn/*Exact*/(endPoint,playerColor)) { /* it won't allow landing on blocked points */
        //                 return endPoint; // canLandOnExact is cool with BEAR but not PAST_BEAR
        // // redundant?           } else if (canBearOffFromPointWithRoll(startPoint,endPoint,roll,playerColor,board)) {
        // //                   else if canBearOff && needsInexactRolls
        // //                return endPoint;
        //             } else {
        //                 return ILLEGAL_MOVE;
        //             }
        //         }
        //        return endPoint;
    } /* endPointMovingFrom( ) */