C# 我能建立一个比这更人性化的人工智能吗?
我一直在构建一个人工智能,目前我已经到了它应该发挥作用的地步。一开始我遇到了一些麻烦,有点。。突然消失了。现在这个问题已经解决了,但是有一个问题——这个人工智能90%的时间都能接住球并将其返回,尽管有时速度有点慢。我还没有建立吸引模式的游戏,但我可以想象。。。当这种情况发生时,这两个人工智能几乎不会互相得分 游戏在二维平面上进行。AI纯粹在X上移动,锁定在Z和Y上,而球在X和Y上移动 运动场就像网球一样,中间有一个“网”——0,0,0,表示中间,球像网球一样运动 AI和玩家使用两个控件-‘方向’向左或向右移动,一个用于向左,一个用于向右,一个用于触发回球 目前,我只是希望它经常“错过”球,而不是几乎每次都完美。我正在用C语言编程,游戏引擎是Unity3D——以下是我迄今为止为AI引擎编写的代码:C# 我能建立一个比这更人性化的人工智能吗?,c#,unity3d,artificial-intelligence,C#,Unity3d,Artificial Intelligence,我一直在构建一个人工智能,目前我已经到了它应该发挥作用的地步。一开始我遇到了一些麻烦,有点。。突然消失了。现在这个问题已经解决了,但是有一个问题——这个人工智能90%的时间都能接住球并将其返回,尽管有时速度有点慢。我还没有建立吸引模式的游戏,但我可以想象。。。当这种情况发生时,这两个人工智能几乎不会互相得分 游戏在二维平面上进行。AI纯粹在X上移动,锁定在Z和Y上,而球在X和Y上移动 运动场就像网球一样,中间有一个“网”——0,0,0,表示中间,球像网球一样运动 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之间产生差异。与其使用保持不变的随机范围或应用固定的概率表,不如尝试向球的预测着陆点添加随机偏移,该偏移随时间或距离缩放,直到球着陆以及球的速度。这将模拟球员对落地预测的可变确定性,因为如果球慢且接近最终落地点,则更容易预测球。