Тестирование нескольких переменных в 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 возможных значений байтовой переменной.

Другие вопросы по тегам