Этюд на тему "Угадайка"
- Войдите на сайт для отправки комментариев
1. Код написать и сам смогу, просьба не отсылать в раздел "Ищу исполнителя" ;)
2. Идеи алгоритма вроде как формируются, но пока тупые. Может кто подскажет более умный АЛГОРИТМ.
Итак, задачка.
Есть 12 кнопок. По рандому выбирается 4 цифры из 12 (не повторяющиеся) в интервале 1-9,A,B,C.
Примерно так:
while(!KBDread()) { randomSeed(millis()); delay(1000); } while(i<4) { ChemodanKey[i]=random(1,13); switch(i) { case 0: i++; break; case 1: if(ChemodanKey[i]!=ChemodanKey[0]){i++;} break; case 2: if(ChemodanKey[i]!=ChemodanKey[0]&&ChemodanKey[i]!=ChemodanKey[1]){i++;} break; case 3: if(ChemodanKey[i]!=ChemodanKey[0]&&ChemodanKey[i]!=ChemodanKey[1]&&ChemodanKey[i]!=ChemodanKey[2]){i++;} break; } }
Хотя уверен не оптимальное решение.
Дальше алгоритм простой:
если нажата кнопка из списка ЧемоданКей - запоминаем ее (и показываем на экране), ждем нажатие следующей.
Если следующая и далее кнопки из списка - продолжаем пока не будет угадано все 4 цифры (показ и гимн в динамик ;)
Если ошибка - цифра не из списка - сирена, сброс показа дисплея и блокировка на Х минут.
После окончания блокировки цикл начинается сначала.
Идеи?
Примерно так:
i не инициализирована. seed вызывается пачку раз зачем-то, причём вызывается как-то странно. Если это начало работы программы, то он там практически всегда одинаковый будет. Если уж нужен seed - надо брать analogRead с висящего в воздухе пина. Дальнейший выбор уж больно заморочный, но это Ваш выбор.
1. Код написать и сам смогу, просьба не отсылать в раздел "Ищу исполнителя" ;)
Успехов!
Идеи?
Я бы это скорей так писал. Код не проверялся на компилируемость
.Или хотяб свитч причесал
Спасибо, первый вариант попробую - более корректен на мой взягляд.
А второй вариант может неправильно отработать:
если i==0 то все понятно - записываем первыую цифру, если 1 - то сравниваем с первой, если 2 - то нужно сравнивать с первой и второй на совпадение, а для 3 - со всеми тремя предыдущими - т.к. цифры должны быть уникальными и несовпадающими.
если 2 - то нужно сравнивать с первой и второй на совпадение, а для 3 - со всеми тремя предыдущими - т.к. цифры должны быть уникальными и несовпадающими.
Дак учтено. Если при 2 сравнение свыявило совпадение, то бреак, иначе идем далее а далее случай 1, те проверка первого числа.
Вот что получилось - с учетом того что это процедура из части проекта - те используются глобалы за скобками: