Instead of starting with your random number generator, build up the discrete probability distribution function first. The histogram can have any shape you want.
So, for example, in Tetris, rather than choosing a uniformly random next piece, we give a 10% probability to a straight one, 20% to right-sided L, etc. Now we begin to see patterns that can make gameplay challenging or interesting. If a shape has not appeared in a while purely out of chance, alter the distribution. Keeping track of what cards have been played and what moves have been made forms the basis of a feedback loop that constantly evolves.