我一直在构建人工智能,目前我已经达到了应有的水平。我起初遇到了几个故障,并且有一些东西......出现了。现在这已经解决了,但是存在一个问题 - 这个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;
}
}