我不完全确定我是否准确理解你的意思,但类比一下,假设有人在键盘上输入无尽的数字。 '117'是一个神奇的序列,'468'是另一个,'411799'是另一个(其中包含第一个)。所以如果用户输入:
55468411799
你想在 * 处触发“魔法事件”,就像这样:
55468*4117*99*
或者类似于这样的东西,对吗?如果这类比于你所说的问题,那么可以尝试以下 Java 伪代码:
MagicSequence fireworks = new MagicSequence(new FireworksAction(), 1, 1, 7);
MagicSequence playMusic = new MagicSequence(new MusicAction(), 4, 6, 8);
MagicSequence fixUserADrink = new MagicSequence(new ManhattanAction(), 4, 1, 1, 7, 9, 9);
Collection<MagicSequence> sequences = ... all of the above ...;
while (true) {
int num = readNumberFromUser();
for (MagicSequence seq : sequences) {
seq.handleNumber(num);
}
}
当MagicSequence拥有以下内容时:
Action action = ... populated from constructor ...;
int[] sequence = ... populated from constructor ...;
int position = 0;
public void handleNumber(int num) {
if (num == sequence[position]) {
position++;
if (position == sequence.length) {
action.fire();
position = 0;
}
} else {
position = 0;
}
}