机器人足球人工智能算法分析
时间:11-28
来源:互联网
点击:
,现在来总结一下:
设计机器人足球的时候,可以使用轮循的方法,挨个处理22个队员和1个球。一般情况下,处理方法也就是:通过原来的坐标和事先确定的方向、速度,计算新的坐标。当计算完所有物体的新坐标后,刷新屏幕,以显示出动画效果。
每隔一段时间(或者若干次后),允许计算机对每个物件作出特殊操作(踢球、传球等),这些特殊操作的本质就是改变23个物体的速度和方向,使接下来一段时间物体的运动轨迹产生变化。
做特殊操作时,可以按照球员序号遍历。针对每个球员需要做的事情是:
1.计算这个球员离球有多远。超过一定距离,就随意处理(比如上面提到的,用随即函数确定这个人是向球跑还是停止)
2.离球近的话,再查询球周围有没有离球更近的球员(考虑到时间复杂度,不推荐真的去遍历整个球场,而是维护一张表,用来记录每个球员当前和球的距离)
3.如果有对方球员离球更近,则可选的操作有:更加靠近、抢断、等等(我不太懂足球,不知道还有什么操作)。可以用随机数来确定执行的操作
4.如果有己方球员离球更近,则可以断定此人正在带球,此时可选的操作是:向他移动准备接应、向对方球门移动准备接传球进攻
5.如果当前没有其他球员离球更近,那此时可以断定该球员正在带球。此时需要考察周围安全距离内有没有对方球员,有没有己方球员,离球门多远等等问题,并作出传球、射门、盘带等等操作(没必要真的计算其他人跟自己的距离。由于此时离球近,可以忽略不计。完全可以用其他人离球的距离来代表。具体原理,踢场球就知道了:))。这些操作比较简单,只要用一些选择语句就可以了。有多种操作可供选择的时候,可以用随机数来确定。球员的各种属性都可以影响随机数的取值。
除此之外,还有一些例外操作:比如当出现运动员跑着跑着出线、相撞、碰到球等情况,此时即使还没有到例行的处理特殊操作的时候,但也必须立即针对涉及的球员执行特殊操作,否则不真实、不合理的。
最后我们来谈一下球员和球的数据结构
球员:
{
方向/速度/当前坐标....
传球()/踢球()/射门()/接球()/抢断()....../跑动()
计算新坐标()
}
足球:
{
方向/速度/当前坐标....
计算新坐标()
friend:
球员::传球()/踢球()...... //或者做一个改变方向/速度的接口,让球员中的函数能调用这个接口
}
除此之外,还需要一些表,维护诸如每个球员离球的距离等信息,方便各种处理。另外还有一些细节,可能是做游戏必须的,但由于相对来说比较简单,所以在这里就不多分析了。
由于精力有限,我工作、学习的压力比较大,所以上述算法并没有实现。我写这篇文章,是试图分析出即时战略游戏的一般设计方法。当然,我只是一个编程的初学者,所有的分析又都是我的个人看法(没有看过相关文章);并且我不是专门做游戏的,不可能将机器人足球的人工智能分析的如同EA的开发人员那么彻底。所以我的分析可能很粗糙,甚至有很多错误。如果能对大家有一点启发,我非常欣慰。当然,我更希望大家指出我的错误看法,让我能逐步提高自己的水平。
设计机器人足球的时候,可以使用轮循的方法,挨个处理22个队员和1个球。一般情况下,处理方法也就是:通过原来的坐标和事先确定的方向、速度,计算新的坐标。当计算完所有物体的新坐标后,刷新屏幕,以显示出动画效果。
每隔一段时间(或者若干次后),允许计算机对每个物件作出特殊操作(踢球、传球等),这些特殊操作的本质就是改变23个物体的速度和方向,使接下来一段时间物体的运动轨迹产生变化。
做特殊操作时,可以按照球员序号遍历。针对每个球员需要做的事情是:
1.计算这个球员离球有多远。超过一定距离,就随意处理(比如上面提到的,用随即函数确定这个人是向球跑还是停止)
2.离球近的话,再查询球周围有没有离球更近的球员(考虑到时间复杂度,不推荐真的去遍历整个球场,而是维护一张表,用来记录每个球员当前和球的距离)
3.如果有对方球员离球更近,则可选的操作有:更加靠近、抢断、等等(我不太懂足球,不知道还有什么操作)。可以用随机数来确定执行的操作
4.如果有己方球员离球更近,则可以断定此人正在带球,此时可选的操作是:向他移动准备接应、向对方球门移动准备接传球进攻
5.如果当前没有其他球员离球更近,那此时可以断定该球员正在带球。此时需要考察周围安全距离内有没有对方球员,有没有己方球员,离球门多远等等问题,并作出传球、射门、盘带等等操作(没必要真的计算其他人跟自己的距离。由于此时离球近,可以忽略不计。完全可以用其他人离球的距离来代表。具体原理,踢场球就知道了:))。这些操作比较简单,只要用一些选择语句就可以了。有多种操作可供选择的时候,可以用随机数来确定。球员的各种属性都可以影响随机数的取值。
除此之外,还有一些例外操作:比如当出现运动员跑着跑着出线、相撞、碰到球等情况,此时即使还没有到例行的处理特殊操作的时候,但也必须立即针对涉及的球员执行特殊操作,否则不真实、不合理的。
最后我们来谈一下球员和球的数据结构
球员:
{
方向/速度/当前坐标....
传球()/踢球()/射门()/接球()/抢断()....../跑动()
计算新坐标()
}
足球:
{
方向/速度/当前坐标....
计算新坐标()
friend:
球员::传球()/踢球()...... //或者做一个改变方向/速度的接口,让球员中的函数能调用这个接口
}
除此之外,还需要一些表,维护诸如每个球员离球的距离等信息,方便各种处理。另外还有一些细节,可能是做游戏必须的,但由于相对来说比较简单,所以在这里就不多分析了。
由于精力有限,我工作、学习的压力比较大,所以上述算法并没有实现。我写这篇文章,是试图分析出即时战略游戏的一般设计方法。当然,我只是一个编程的初学者,所有的分析又都是我的个人看法(没有看过相关文章);并且我不是专门做游戏的,不可能将机器人足球的人工智能分析的如同EA的开发人员那么彻底。所以我的分析可能很粗糙,甚至有很多错误。如果能对大家有一点启发,我非常欣慰。当然,我更希望大家指出我的错误看法,让我能逐步提高自己的水平。
机器人 相关文章:
- 基于MSP430的自主式移动机器人设计与实现(06-12)
- 如何制作一个最简单的机器人(02-23)
- 机器人技术的新进展(02-23)
- CAN总线技术在工业码垛机器人控制系统中的应用研究(06-27)
- 制作机器人常用传感器盘点(02-23)
- 基于LabVIEW构建智能的移动机器人及无人驾驶车(10-27)