Игра «Охотник»
Эта игра является классической игрой “на реакцию”. На поле располагаются 8 светодиодов-мишеней, которые зажигаются случайным образом. Наша задача – попасть в красную “мишень”, т.е. нажать кнопку тогда, когда загорится красный светодиод.
СБОРКА СХЕМЫ НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- 7 зелёных и 1 красный светодиод;
- 8 резисторов номиналом 220 Ом;
- 1 тактовая кнопка;
- 1 резистор номиналом 10 кОм;
- 13 соединительных проводов типа папа-папа различных цветов.
Соберите устройство по следующей схеме:
Схема устройства на макетной плате |
БАЗОВЫЙ КОД ПРОГРАММЫ
#define target 6 // указываем номер пина красной мишени int pin = 0; // переменная для хранения номера случайного пина #define difficulty_level 1 // уровень сложности: 1 - тяжело, 2 - нормально, 3 - легко void setup() { for(int i = 2; i<= 9; i++) { pinMode(i, OUTPUT); // назначаем пины со 2-го по 8-й на выход digitalWrite(i, 0); } pinMode(10,INPUT); // пин с кнопкой - на вход digitalWrite(10,1); } unsigned long long last_time; // переменная для хранения времени задержки void flub() // процедура мигания светодиодов, если игрок проиграл { for(int j = 1; j <=5; j++) { for(int i = 2; i <=5; i++) digitalWrite(i, 1); delay(300); for(int i = 2; i <=5; i++) digitalWrite(i, 0); for(int i = 7; i <=9; i++) digitalWrite(i, 1); delay(300); for(int i = 7; i <=9; i++) digitalWrite(i, 0); } } void win() // процедура мигания светодиодов, если игрок выиграл { for(int j = 1; j <=5; j++){ for(int i = 2; i <=9; i++) digitalWrite(i, 1); delay(300); for(int i = 2; i <=9; i++) digitalWrite(i, 0); delay(300); } } void loop() { pin = random(2,9); // выбираем случайное число от 2-х до 9-ти digitalWrite(pin, 1); // включаем случайный пин last_time = millis(); // запоминаем время while(millis() - last_time <= 1000/difficulty_level) // цикл для задержки { // Serial.println(micros()); if (!digitalRead(10)) // если кнопка нажата { if(pin == target) // и если светодиод-мишень зажжён { digitalWrite(pin, 0); //выключаем светодиод win(); // переходим к процедуре для победного мигания светодиодов break; // выходим из цикла } else // в противном случае { digitalWrite(pin, 0); // выключаем светодиод flub(); // переходим к процедуре проигрыша break; // выходим из цикла } } } digitalWrite(pin, 0); //выключаем светодиод }
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Вам необходимо дополнить код так, чтобы в случае победы, игроку начислялось одно очко, а в случае поражения, количество заработанных очков выводилось в монитор порта и игра начиналась с начала. Кроме этого, в монитор порта должны выводится и другие игровые события. Пример:
Игра началась…
Победа!
Победа!
Победа!
Поражение. Набрано очков – 3.
Игра окончена.
…
Игра началась…
Задание 2:
Добавьте в схему пьезодинамик, который будет издавать сигнал при зажигании светодиодов и в случае победы или поражения.
Задание 3:
Добавьте в схему потенциометр и измените программу таким образом, чтобы с помощью него можно было настраивать уровень сложности игры (например, крайнее левое положение – легко, крайнее правое – сложно, центральное положение – нормально).