我有以下代码:
while rounds<=5
fprintf('Rolling the dice...\n');
roll=randi(6,1,5);
roll=sort(roll);
fprintf('You rolled:');
disp(roll);
rollCount=rollCount+1;
for x=1:2:17
y=all(ismember(roll,rule{x}))
disp(ismember(roll,rule{x}));
z=all(ismember(rule{x},roll))
disp(ismember(rule{x},roll));
rounds=rounds+1;
end
end
它应该做的是将 roll 数组与 rule{x} 数组进行比较,并告诉我它是否匹配。如果不匹配,它应该告诉我滚动数组的哪些索引与规则数组不匹配。但是它不能正常工作。假设示例滚动是 [2 2 3 5 5],规则 {x} 是 [1 2 3 4 5]。
我想要的输出是一个具有 [0 1 1 0 1] 的数组,但我从 y 中得到的是 [1 1 1 1 1] 而 z 是 [0 1 1 0 1]。这似乎是正确的输出,但如果我们将规则更改为 [5 5 5 5 5] 我会得到 [1 1 1 1 1] 这是不正确的。
这是针对我正在编写的 Yahtzee 游戏。掷骰子是掷骰子,规则是我要匹配的,所以我可以看到我需要重新掷骰子才能匹配。
编辑:使用来自 dspyz 的代码,我编写了函数:
function[scoreCode]=ForwardChaining(rollFunc,ruleFunc)
temp=histc(rollFunc,1:6);
for x=1:2:11
if (ruleFunc{x}<=temp)
scoreCode=ruleFunc{x+1};
break;
else scoreCode=0;
end
end
主函数将其称为:
c= ForwardChaining(roll,rule);
if c == 12;
break;
end
但出于某种原因,即使经过 100,000 次迭代,它也不会停止,我认为它没有按预期工作。