Удар по шайбе
Если хоккеист находится под контролем искусственного интеллекта, то мы обновляем ее логику, вызывая mBrain. update (). Если же хоккеист под управлением игрока, то логика ИИ игнорируется, а спортсмен следует за мышью. В классе PlayState метод goFromStickHit () выполняется каждый раз, когда игрок нажимаете на экран. Координата клика используется в качестве конечной точки для удара. Результат виден… Читать ещё >
Удар по шайбе (реферат, курсовая, диплом, контрольная)
Реализуем удар по шайбе клюшкой. Независимо от того, кто является владельцем шайбы, нам нужно сымитировать удар по ней и вычислить направление этого удара. Затем отправить шайбу по найденному вектору. Вычислить этот вектор несложно:
Вычисление вектора удара, А вот и реализация удара по шайбе:
public class Puck {.
// (…).
public function goFromStickHit (theAthlete :Athlete, theDestination: Vector3D, theSpeed: Number = 160) :void {.
// установка шайбы перед хоккеистом во избежании неожиданных столкновений.
placeAheadOfOwner ();
// очистка владельца шайбы (т.к. был совершен удар).
setOwner (null);
// вычисление траектории шайбы.
var new_velocity :Vector3D = theDestination — position;
velocity = normalize (new_velocity) * theSpeed; } }.
В классе PlayState метод goFromStickHit () выполняется каждый раз, когда игрок нажимаете на экран. Координата клика используется в качестве конечной точки для удара. Результат виден ниже:
Добавление ИИ
До сих пор у нас был только один хоккеист на катке. Поскольку в хоккее по 6 человек на команду, а это уже целая дюжина игроков, то нам стоит задуматься о создании искусственного интеллекта для них. Да причем такого, чтобы игроки вели себя естественно и рационально.
Для этого мы будем использовать конечный автомат (FSM — finite state machine). Как было написано ранее, FSM является универсальным и полезным инструментом для реализации ИИ в играх.
Немного изменим наш класс Athlete:
public class Athlete {.
// (…).
private var mBrain: StackFSM; // конечный автомат, контролирующий ИИ.
public function Athlete (thePosX :Number, thePosY: Number, theTotalMass: Number) {.
// (…).
mBrain = new StackFSM (); }.
// (…) }.
Поле mBrain является экземпляром класса StackFSM, о котором более подробно вы можете узнать из этой статьи. Он использует стек для управления состоянием ИИ. Каждое состояние описывается методом, и, когда состояние кладется в стек, оно становится активным и вызывается каждый раз при вызове основного метода update ().
Все состояния игрока будут выполнять строго определенную функцию: взять шайбу, отобрать шайбу, патрулировать зону и т. д.
Теперь хоккеист может быть как под нашим контролем, так и под контролем ИИ. Обновим наш класс:
public class Athlete {.
// (…).
public function update ():void {.
// очистка всех действующих сил.
mBoid.steering = null;
if (mControlledByAI) {.
// хоккеист управляем ИИ.
// обновление логики конечного автомата.
mBrain.update ();
} else {.
// хоккеист управляем игроком,.
// поэтому он будет следовать за курсором мыши.
followMouseCursor (); }.
// главный метод обновления физического тела.
mBoid.update (); } }.
Если хоккеист находится под контролем искусственного интеллекта, то мы обновляем ее логику, вызывая mBrain. update (). Если же хоккеист под управлением игрока, то логика ИИ игнорируется, а спортсмен следует за мышью.
Что касается самих состояний, посылаемых искусственному интеллекту, то мы реализуем два из них. Первое будет отвечать за подготовку игроков к матчу, т. е. они переместятся к своим стартовым позициям и будут смотреть на шайбу. Второе состояние просто будет заставлять хоккеиста стоять и следить за шайбой.