我可以建立一个比人类还要人性化的AI吗?

时间:2014-11-26 12:27:32

标签: c# unity3d artificial-intelligence

我一直在构建人工智能,目前我已经达到了应有的水平。我起初遇到了几个故障,并且有一些东西......出现了。现在这已经解决了,但是存在一个问题 - 这个AI在90%的时间内都能抓住球并返回它,尽管有时会有些慢。我还没有建立游戏的吸引模式,但我可以想象......当它进入时,两个人工智能几乎不会相互得分。

游戏在2D平面上进行。 AI完全在X上移动,当球在X和Y上移动时锁定在Z和Y.

竞技场的设置就像网球,网球等。在中心 - 0,0,0,表示中间,球像网球一样移动。

AI(和播放器)使用两个控件 - ' Direction'向左或向右,1表示左,1表示右,和bool触发球返回。

目前我只是想让它错过'球每隔一段时间,每次都不是很完美。我用C#编程,游戏引擎是Unity3D - 这是我迄今为止的AI引擎代码:

void AIHandle()
{
    DetectBalls();

    if (GameController.Instance.Balls.Count < 1) {
        GetFlipperButton = false;
    }

    if (BallPosition) {
        BallPosit = BallPosition.position;
        BallX = BallPosit.x;
        //BallVelPosit = BallPosition.gameObject.rigidbody.velocity;
        //BallPosit.x += BallVelPosit.x;
        //BallPosit.y += BallVelPosit.y;
        //BallVelPosit.y -= Physics.gravity.y;
        //BallHitPredictor = new Vector3 (BallPosit.x, 0, 0);
        transformPoint = transform.InverseTransformPoint(BallPosit);

        //////////////////
        Vector3 Heading = BallPosit - transform.position;
        if (BallX > 0) {


            Debug.Log(Heading.sqrMagnitude);

            // THe ball is to the left //

            if (transformPoint.z < 0f)
            {
                Direction = 1;
            }
            // The ball is to the right //
            if (transformPoint.z > 0f)
            {
                Direction = -1;
            }

            if (Heading.sqrMagnitude < 30.0f)
            {
                Direction = 0;
            }



        } else {
            Retreat();
        }
    } else {
        Retreat();
    }

    MovementDirection = Mathf.Lerp(MovementDirection, Direction, 2.0f);

}

private void Retreat()
{
    float DistanceToCenter = Vector3.Distance(transform.position, PlayerStartPosition);

    Vector3 CenterPointOrient = transform.InverseTransformPoint(PlayerStartPosition);

    if (DistanceToCenter >= 1f) {
        if (CenterPointOrient.z > 0) {
            Direction = -1;
        } else {
            Direction = 1;
        } 
    } else {
        Direction = 0;
    }
}

0 个答案:

没有答案