Shuffle bag
Randomness without replacement: every outcome goes into a bag, gets drawn in shuffled order, and the bag is refilled only once it's empty.
Pure randomness produces long droughts — five misses in a row at a 50% hit chance feels like cheating to a player, even when it's mathematically innocent. A shuffle bag guarantees the distribution within each bag: put three wins and seven losses in and you get exactly three wins per ten draws. The implementation is a shuffled list and an index, with the shuffle done by Fisher–Yates.
The best-known example is the Tetris "7-bag" generator, which deals all seven pieces once in random order before the next round begins — so you never wait more than twelve pieces for a long bar. The downside is predictability: anyone counting knows what's left in the bag, and good players do count.