Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我能建立一个比这更人性化的人工智能吗?_C#_Unity3d_Artificial Intelligence - Fatal编程技术网

C# 我能建立一个比这更人性化的人工智能吗?

C# 我能建立一个比这更人性化的人工智能吗?,c#,unity3d,artificial-intelligence,C#,Unity3d,Artificial Intelligence,我一直在构建一个人工智能,目前我已经到了它应该发挥作用的地步。一开始我遇到了一些麻烦,有点。。突然消失了。现在这个问题已经解决了,但是有一个问题——这个人工智能90%的时间都能接住球并将其返回,尽管有时速度有点慢。我还没有建立吸引模式的游戏,但我可以想象。。。当这种情况发生时,这两个人工智能几乎不会互相得分 游戏在二维平面上进行。AI纯粹在X上移动,锁定在Z和Y上,而球在X和Y上移动 运动场就像网球一样,中间有一个“网”——0,0,0,表示中间,球像网球一样运动 AI和玩家使用两个控件-‘方向’

我一直在构建一个人工智能,目前我已经到了它应该发挥作用的地步。一开始我遇到了一些麻烦,有点。。突然消失了。现在这个问题已经解决了,但是有一个问题——这个人工智能90%的时间都能接住球并将其返回,尽管有时速度有点慢。我还没有建立吸引模式的游戏,但我可以想象。。。当这种情况发生时,这两个人工智能几乎不会互相得分

游戏在二维平面上进行。AI纯粹在X上移动,锁定在Z和Y上,而球在X和Y上移动

运动场就像网球一样,中间有一个“网”——0,0,0,表示中间,球像网球一样运动

AI和玩家使用两个控件-‘方向’向左或向右移动,一个用于向左,一个用于向右,一个用于触发回球

目前,我只是希望它经常“错过”球,而不是几乎每次都完美。我正在用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;
    }
}

快去营救!你的AI应该在某个地方出错。犯错误的机会是最容易的。但是为了使它更像人类,你必须做更多的事情,模拟人类的反应延迟,手部运动的不精确性,等等。做一个0到100之间的随机整数。如果对随机因素的仔细调整会使一个看起来更容易打败的AI和一个看起来有意失败的AI之间产生差异。与其使用保持不变的随机范围或应用固定的概率表,不如尝试向球的预测着陆点添加随机偏移,该偏移随时间或距离缩放,直到球着陆以及球的速度。这将模拟球员对落地预测的可变确定性,因为如果球慢且接近最终落地点,则更容易预测球。