我正在尝试在 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 个是相同的。
因为您告诉我们这是针对 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 个可能值,显然会有点慢。