Слишком очеловеченное толкование действий движка. Лучше бы фрагменты самого кода выложили. Как игрок (точнее прога) определит, достаточно ли предоставленная возможность для броска хороша? Оценив скиллы оппонента-защитника и скиллы атакующего что ли? Так никакой закономерности я не заметил. Часто атакуют, не забивая, игроки со слабым броском и формой. Даже раздражает частенько, ведь и получше мастера есть и их оппоненты не Уэйды и О'Нилы. А потом еще куча других параметров. Они что там, пасуют все время друг другу, все время занимают разные позиции, время в уме считают и т.д.? Да все там проще, наверное. В проекции игры выделяются стандартные блоки. Блок результативной атаки с пасом и без, блок неудачной атаки с пасом и без, атака с подбором, атака с уходом мяча в аут, атака с потерей и перехватом, атака с фолом и штрафными. Главное, в процентном соответствии со статистикой подставить нужные фамилии в эти блоки. И по тактике подстроиться со временем владения и кол-вом бросков, фолами, травмами. Проще всего это сделать, ИМХО, заранее определив победителя по формальным показателям и статистике. А потом по алгоритму раскидать эти стандартные (с заранее известным исходом) блоки с фамилиями по течению матча. Но если всё взаимоувязывать, как бы в реальном времени, постоянно просчитывая процентную вероятность того или иного события, того или иного "решения", то код проги увеличится в несколько раз. Лишняя нагрузка на сервер. Да и запутаются программисты с кучей массивов и динамически меняющихся переменных.
Так что многое в правилах, я думаю, добавлено для красного словца. А вот что в реалиях...