tryTakeEmptyCorner() and tryTakeEmptySide() now have non-robust randomization; GameBoard no longer exposes private data members