我一直想知道 FIFA 的(游戏)逻辑。
他们是否依赖大量的 if 语句来表示游戏规则和其他规则的东西?
喜欢:
if( ball.x > areaLeft.x || ball.y > areaTop.y ) {
out();
}
if( playersCollision > 100 ) {
giveFoul(firstPlayer, secondPlayer);
}
等等。对于这些事情,一切真的是“如果”还是有其他选择?
我一直想知道 FIFA 的(游戏)逻辑。
他们是否依赖大量的 if 语句来表示游戏规则和其他规则的东西?
喜欢:
if( ball.x > areaLeft.x || ball.y > areaTop.y ) {
out();
}
if( playersCollision > 100 ) {
giveFoul(firstPlayer, secondPlayer);
}
等等。对于这些事情,一切真的是“如果”还是有其他选择?
这绝对不是“如果”。那将是一团糟。 专家系统是为处理此类情况而设计的,您希望在这些情况下维护一个受复杂规则约束的知识库。这个想法是,您使用基于逻辑的语言编写一组规则。例如
giveFoul(Context) :-
closePlayers(Context, A, B),
attackingPlayer(context, A, B),
defendingSkills(A, ASkill),
ASkill < 80
...
closePlayers(Context, A, B) :-
position(Context, A, CoordXA, CoordYA),
position(Context, B, CoordXB, CoordYB),
...
您可以看到,使用这种方法,您可以通过重新定义这些规则来改变系统的行为,并让您的推理系统完成其余的工作。
等式中总是有如果。问题是它不像建议的算法那么简单,主要是因为它不是由计算机决定的,而是由一个或多个人决定的...... [特别是。FIFA,因为他们不想根据视频实施仲裁]
无论如何它会更像
// x in [0,99], the higher x is, the more probable the event is
function fate(x) {
return (random () % 100) <= x)
}
// if ball out, 75% chance there is an out event
if( (ball.x > areaLeft.x || ball.y > areaTop.y) && fate(75) ) {
out();
}
// if there is a collision, 50% chance the referee gives a foul
if( playersCollision > 100 && fate(50)) {
giveFoul(firstPlayer,secondPlayer);
}
etc....