Слово рандом в переводе с английского означает случайный. Пример:  «рандомом выбрали людей из группы и отправили убираться» (у нас так тоже бывает).  Изначально это слово употребляли контристы.  Рандом на их сленге означал случайное попадание в голову с летальным исходом. Но мы не контристы и в наших головах уже не по одной и даже не по одному десятку дыр на этом проекте.  Я покопался в литературе и попытался все же взглянуть на рандом как на материальный объект, а не божество.  Вот что получилось.

Пример частный и к нашему проекту отношения не имеет; я надеюсь; поскольку рандом должен быть одинаков для всех…
Функция Randomize, она же Random, она же Rnd выдает нам случайное число от которого мы уже пляшем в соответствии с нашими потребностями.
Для самого простого примера возьмем генерацию равновероятных событий (да\нет, 0\1 и т.д.).  По сути нам случайным образом надо выбрать одно из двух. На самом лучшем языке на свете (кто будет спорить, тот проклятым идет в лес) это будет выглядеть так :

Dim proba As Integer
proba = CInt(Int((2 * Rnd()) + 1))
' упрощенный вариант
proba = 2 * Rnd() + 1 ' и отбрасываем дробную часть

Значения функции Rnd() всегда лежат в диапазоне 0 <= Rnd() < 1, поэтому какие бы нам значения не выдавала функция в вышеуказанном примере всегда на выходе (proba) будем получать 1 или 2. Ну а дальше напишем небольшое условие по которому, если proba=1, то делаем хорошее действие Schastie() (например побеждаем в матче), если 2, то плохое Beda() (проигрываем) :
If proba = 1 Then Schastie() Else Beda()
В этом примере, если мы про победу заговорили, у нас шансы 50\50 на при равном сопернике. Усложним пример.  Заставим результат зависеть от уровня играющих команд. Переменная level будет нам сообщать на сколько велика разница в классе, код будет уже такой:

Dim proba As Integer
proba = CInt(Int((level * Rnd()) + 1))
' упрощенный вариант
proba = level * Rnd() + 1 ' и отбрасываем дробную часть

If proba = 1 Then Schastie() Else Beda()
Тут на выходе мы получаем, если наша команда на +1 (level=1), то proba у нас всегда = 1 и соответственно всегда выполняется Schastie().
Eсли наша команда на +5 (level=5), то proba у нас будет равна 1,2,3,4 или 5, а Schastie() выполняется только если proba=1, соответственно шанс равен 20%.
Если наша команда на +9 (level=9), то proba у нас будет равна 1,2,3 ... 8,9, а Schastie().выполняется все также если proba=1. 
Смышленый читатель сможет сам высчитать шанс благосклонности рандома.

Все это легко и просто, но не интересно. Тут явно не хватает «Бабушки». Попросим бабушку прийти. Введем повышающие и понижающие коэффициенты для бабушкиного настроения:
Отличное настроение = 0.5
Чуть лучше чем обычно = 0.75
Обычное настроение = 1
Бабушка хмурится = 2
Бабушка в печали = 4
Кто сожрал варенье = 10
Теперь код у нас будет выглядеть так :
Dim proba As Integer
proba = CInt(Int((level * babushka * Rnd()) + 1))
' упрощенный вариант
proba = level * babushka * Rnd() + 1 ' и отбрасываем дробную часть

If proba = 1 Then Schastie() Else Beda()
Юные математики уже в уме сосчитали, для оболтусов дадим правильные ответы в процентах на успех на +5 (середина) :
Отличное настроение = 40%
Чуть лучше чем обычно = 30%
Обычное настроение = 20%
Бабушка хмурится = 10%
Бабушка в печали = 5%
Кто сожрал варенье = 2%

Сразу скажу, что в половине того, что написал,  мог все перепутать, не спец, но это не главное, задача статьи донести, что рандом в игре не божество, а формулы либо программный сбой.
Всем удачи и любите бабушку.