2013-08-29 4 views
0

У меня сложная бизнес-логика, и я считаю, что булевая алгебра должна иметь возможность упростить логику. Может ли кто-нибудь сказать мне, как это сделать, решая следующую проблему?Как упростить усложняющий условный оператор по математическому знанию

Проблема возникает из игры X3: Reunion. Here is the universe map, если помогает.

Во вселенной есть сектора, связанные между собой ватными воротами. Чтобы перейти из одного сектора в другой, вы можете туда летать или прыгать туда (что быстрее). Если вы переходите в другой сектор, вы должны убедиться, что вокруг ворот варпа не слишком много толпы (иначе вы столкнетесь с другими людьми). У вас должно быть прыгающее устройство и достаточно энергии, чтобы прыгать.

Есть несколько изолированных секторов, которые могут быть достигнуты только путем прыжка.

Вопрос заключается в том, что, учитывая судно и его текущий сектор и сектор назначения, определите, как корабль должен попасть в сектор (прыгая или летая). Кроме того, если два сектора смежны, не беспокойтесь прыгать.

Зададим:

a: two sectors are adjacent 
b: have jump device and enough energy 
c: destination sector is not isolated 
d: not too crowd near the gate of the destination 

if(!a && b && d) 
    jump now 
end 

if(!a && b && !d) 
    can jump but wait until there is not too crowd near the gate of the destination. 
    Should recheck before the jump, because the ship may be losing the energy 
    that makes it not enough to jump. 
end 

if(!b && c) 
    fly to destination 
end 

Вы можете конвертировать выше, если конец заявления, если-то еще, если -... еще конец заявления? И я хотел бы знать, что означает окончательное «другое». Мне нужен не только результат, но и процедура, которая приближается к результату.

Большое спасибо!

ответ

1

Ваши первые 2 условия оба полагаются на! A & & b, и поэтому разница между ними определяется значением d. Последнее условие зависит только от б & & с

Я хотел бы сделать это следующим образом:

if (!b && c) { fly } 
else if (!a && b) { 
    if (d) { jump now } else { wait } 
} 

Или вы могли бы основывать его на «б» первый:

if (b) { 
    if (!a) { 
     if (d) { jump now } else { wait } 
    } 
} 
else { 
    if (c) { fly } 
}