0

我正在尝试在 picaxe 上做一个 yahtzee 得分手,除了有这么多不同的组合之外,一切都还好。如果有一种方法可以测试我的 5 个变量中的 4 个是否相同(不多也不少),而不必经过所有不同的组合,例如:如果 b1=b2 and b1=b3 and b1=b4 and b1!=b5 则 ... 如果 b1=b2 且 b1=b3 且 b1=b5 且 b1!=b4 则 ...

总之,有一种方法可以让我看到 5 个变量中是否只有 4 个是相同的。

4

1 回答 1

0

因为您告诉我们这是针对 Yahtzee 得分手的,所以我假设我们需要比较的五个变量代表五个骰子的投掷,因此它们的值只会在 1 到 6 之间。

在这种情况下,一个功能解决方案是计算有多少变量等于一个测试值,并对 1 到 6 之间的测试值重复此操作:

; define symbols for the two variables we will use
symbol same_test = b6
symbol same_count = b7

b1 = 3: b2 = 3: b3 = 3: b4 = 3: b5 = 1 ; test data
gosub test4same
if same_count = 4 then found_4_same ; do something
; else program flow continues here
end

found_4_same:
sertxd("found 4 the same")
end

test4same: ; test if any four of the variables are equal
same_count = 0
for same_test = 1 to 6
    if b1 = same_test then gosub found_one
    if b2 = same_test then gosub found_one
    if b3 = same_test then gosub found_one
    if b4 = same_test then gosub found_one
    if b5 = same_test then gosub found_one
    if same_count = 4 then exit ; 4 variables were equal to same_test
    same_count = 0
next
return

found_one:
inc same_count
return

gosub test4same将检查五个变量b1中的四个是否b5等于相同的数字,对于 1 到 6 之间的数字。如果是,则变量same_count将为 4,四个变量相等的数字将在same_test.

if ... then exit在重置为零之前使用该结构same_count是我能想到的判断我们是否发现四个相同的最有效方法。

这两个symbol语句之后和标签之前的代码test4same只是为了证明它可以工作;用您的实际程序替换它。

原则上,您可以在任何值范围内使用相同的技术,但如果您需要测试字节变量的所有 256 个可能值,显然会有点慢。

于 2018-02-01T22:06:44.830 回答