0

我一直想知道 FIFA 的(游戏)逻辑。

他们是否依赖大量的 if 语句来表示游戏规则和其他规则的东西?

喜欢:

if( ball.x > areaLeft.x || ball.y > areaTop.y ) {
     out();
}

if( playersCollision > 100 ) {
    giveFoul(firstPlayer, secondPlayer);
}

等等。对于这些事情,一切真的是“如果”还是有其他选择?

4

2 回答 2

1

这绝对不是“如果”。那将是一团糟。 专家系统是为处理此类情况而设计的,您希望在这些情况下维护一个受复杂规则约束的知识库。这个想法是,您使用基于逻辑的语言编写一组规则。例如

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),
    ...

您可以看到,使用这种方法,您可以通过重新定义这些规则来改变系统的行为,并让您的推理系统完成其余的工作。

于 2013-01-24T10:52:14.443 回答
1

等式中总是有如果。问题是它不像建议的算法那么简单,主要是因为它不是由计算机决定的,而是由一个或多个人决定的...... [特别是。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....
于 2013-01-24T11:01:11.400 回答