Тестирование нескольких переменных в Picaxe
Я пытаюсь сделать yahtzee бомбардир на кирке, все в порядке, кроме того факта, что есть так много разных комбинаций. Я брожу, если есть способ проверить, являются ли 4 из 5 моих переменных одинаковыми (не больше и не меньше) без необходимости проходить через все различные комбинации, например: если b1=b2 и b1=b3 и b1=b4 и b1!=b5 тогда... если b1=b2 и b1=b3 и b1=b5 и b1!=b4, то...
Таким образом, есть способ, который я могу видеть, если только 4 из 5 переменных одинаковы.
1 ответ
Поскольку вы сказали нам, что это для бомбардира 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 возможных значений байтовой переменной.