1) Нет различия переменных и функций. мяч_у_игрока, бить_по_воротам. Как понять, что вернёт данные, что выполнит действие?
2) Нет объектов, хотя тут они просто таки напрашиваются. Тот же "игрок4_открыт" лучше записать как игрок4.открыт.
3) Или записать хотя бы функциями, которые возвращают значение: игрок_открыт(4).
4) Да и нет никакой унификации. Вот это вот бить_по_воротам. Почему не удар(ворота)? Можно было бы использовать удар(вперёд), удар(аут). Туда же пас(игрок4), пас(вперёд), игрок1.бег(мяч), игрок3.бег(вперёд).
5) При этом куча низкоуровневых координатных вычислений. Хотя стоило бы проверять зоны и направления. Если(доступно(пас(игрок3))){пас(игрок3)}, Если(!штрафная(противник)){удар(ворота)}
Это приблизит игрока к реально существующим парадигмам программирования.
Из недостатков как для обучения программированию:
1) Нет различия переменных и функций. мяч_у_игрока, бить_по_воротам. Как понять, что вернёт данные, что выполнит действие?
2) Нет объектов, хотя тут они просто таки напрашиваются. Тот же "игрок4_открыт" лучше записать как игрок4.открыт.
3) Или записать хотя бы функциями, которые возвращают значение: игрок_открыт(4).
4) Да и нет никакой унификации. Вот это вот бить_по_воротам. Почему не удар(ворота)? Можно было бы использовать удар(вперёд), удар(аут). Туда же пас(игрок4), пас(вперёд), игрок1.бег(мяч), игрок3.бег(вперёд).
5) При этом куча низкоуровневых координатных вычислений. Хотя стоило бы проверять зоны и направления. Если(доступно(пас(игрок3))){пас(игрок3)}, Если(!штрафная(противник)){удар(ворота)}
Это приблизит игрока к реально существующим парадигмам программирования.
Яростно плюсовать нельзя, так что просто плюсую.
1) мяч_у_игрока и др. условия возвращают True или False. Действия ничего не возвращают.
2) Это не ООП. Я с вами согласен во многом, но эта игра проще...
3) Можно было. Просто синтаксические особенности.
4 и 5) Не уверен, что это было бы понятней для начинающих.