главная страница статьи файлы о сайте ссылки |
Георгий Мошкин Здесь я даю некоторые комментарии к своим статьям, которые помогут вам лучше во всём разобраться, если что-то непонятно. strategy.htm "Как сделать 2d игру: уровни и монстры, а также скрипты, интерпретаторы, искуственный интелект и создание стратегических игр". В этой статье дан основной принцип: абсолютно все герои игры (монстры, крысы, птицы, роботы, зомби, лягушки) храняться в одном массиве mosnter:array of TMonster. Заметье, что главный герой, которым вы управляете с клавиатуры, тоже находится в этом массиве. То есть и для крыс, и для птиц, и для роботов, и для людей есть один главный тип TMonster. То есть вы должны сделать так, что любым объектом игры можно будет управлять с клавиатуры. Например, вы используете DirectInput или события OnKeyDown и OnKeyUp. У вас есть какие-то IF-ы, которые срабатывают при нажатии клавиш. Эти IF-ы следует отделить от процесса изменения координат. Например, если у вас было: IF (key[VK_UP]=true) then y:=y+1; то это следует заменить на: IF (igrok[i].UP=true) then y:=y+1; а (key[VK_UP]=true) вынести в обработчик интеллекта: FOR i:=0 to 100
do // искуственный интеллект второго типа // искуственный интеллект третьего типа То есть нужно сделать у всех героев игры переменные состояния нажатых клавиш: igrok[i].UP:=...; Например, если вы на клавиатуре нажмёте и не будете отпускать кнопку "вправо", то igrok[15].RIGHT:=true. Но только в том случае, если igrok[i].intellekt="keyboard". Это связано с тем, что: // управление с клавиатуры Стоит нам поменяить igrok[15].intellekt="keyboard" на igrok[15].intellekt="ai-1", то сразу же управление игроком под номером 15 перейдёт в руки искуственного интеллекта первого типа: // искуственный интеллект первого типа Итак, наш герой: Geroi: array[0..100] of Geroy; Герой движется только в том случае, если UP, DOWN, LEFT или RIGHT равны TRUE. Например, если Geroi[57].intellekt="keyboard", то он управляется с клавиатуры: Geroi[57].UP:=DirectInput.UP; А если Geroi[57].intellekt="ai-4", то записи UP, DOWN, LEFT и RIGHT изменяются соответствующим искуственным интеллектом. Например, вот так: Geroi[57].UP:=true; Обработка перемещения всех игроков производится следующим образом: for i:=0 to 100 do Итак, мы ушли от "прямых" if-ов. Этот подход существенно упрощает создание как самой игры, так и искуственного интеллекта. Координатами игрока можно управлять как с клавиатуры (intellekt:="keyboard"), так и алгоритмом искуственного интеллекта (intellekt:="ai-5"). Вы можете менять это даже во время игры. |