2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Еще одна видеоигра для arduino. Это отличная игра, более продвинутая, чем та, что я опубликовал. Почему она сложнее других? Она сложнее, потому что она может прыгать и стрелять, имеет звуковой свет и новый метод контроля очков.
Запасы
- Ардуино.
- Макетная плата
- перемычки
- Красный светодиод
- 2 кнопки
- 2 резистора по 10 кОм
- 2 резистора 220R.
- Супер яркий синий светодиод.
- пьезо-зуммер
- ЖК-дисплей 16 * 2
Шаг 1. Соединяем все вместе
Теперь нужно все подключить
Шаг 2: Как играть:
- Включите ардуино.
- На ЖК-дисплее должно появиться сообщение «игра начинается» и обратный отсчет.
- Нажмите одну из кнопок, чтобы прыгать, а другую - стрелять.
- каждый блок, который вы прыгаете, вы выигрываете одно очко, а каждый * пойманный вами блок дает вам 5 очков.
- Когда у вас 50 очков или больше, вы выигрываете
Шаг 3: Код
// este jogo e muito interessante e ao mesmo templication e frustante mas muito divertido.
#включают
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int buttonPin1 = 1; const int buttonPin2 = 6; const int buzzer = 7; беззнаковые длинные точки = 0; // установить состояние кнопок bool buttonState1 = 0; bool buttonState2 = 0; // случайное число для положения препятствий int randomNums [6]; // случайное число для количества препятствий int randomNum = 0; // случайное число для позиции точек int randomNums1 [3]; // случайное число для количества очков int randomNum1 = 0; // время задержки запуска, которое постепенно уменьшается unsigned int myDelay = 500; // сделал это логическим значением, чтобы проверить, нажата ли кнопка2, потому что если она нажата один раз в первом цикле for, я хочу, чтобы препятствия не записывались до его конца bool temp = 0; // эта переменная хранит позиции воина во время стрельбы. может быть 16 позиций, потому что у воина 16 позиций. int tempI [16]; // я использую это логическое значение, чтобы проверить, захвачена ли точка bool temp1 = 0;
// используйте эту переменную для сохранения положения точки захвата. это должен быть массив и для хранения положения всех точек в одной итерации первого цикла for. если он сохранил только одну позицию, то "старая" точка вернется в новой итерации.
int tempI1 [3]; // используйте эту переменную, чтобы получить количество выстрелов воина, которое также является длиной массива tempI int button2IsPressed = 0; ЖК-дисплей LiquidCrystal (rs, en, d4, d5, d6, d7);
void setup () {
// устанавливаем количество столбцов и строк ЖК-дисплея: lcd.begin (16, 2); // установка режима закрепления кнопки pinMode (buttonPin1, INPUT); pinMode (buttonPin2, ВХОД); pinMode (зуммер, ВЫХОД); lcd.setCursor (4, 0); lcd.print («ИГРА»); lcd.setCursor (2, 1); lcd.print («НАЧИНАЕТСЯ»); lcd.print («5»); задержка (1000); lcd.setCursor (12, 1); lcd.print («4»); задержка (1000); lcd.setCursor (12, 1); lcd.print ("3"); задержка (1000); lcd.setCursor (12, 1); lcd.print ("2"); задержка (1000); lcd.setCursor (12, 1); lcd.print («1»); задержка (1000); lcd.clear ();
}
void loop () {
здесь:
randomNum = случайный (5);
для (int i = 0; i9 && pts19 && pts29 && pts = 50) {pts = 0; myDelay = 500; lcd.clear (); lcd.setCursor (5, 0); lcd.print («ПОБЕДА»); тон (зуммер, 262); задержка (200); тон (зуммер, 330); задержка (200); тон (зуммер, 392); задержка (100); тон (зуммер, 330); задержка (100); тон (зуммер, 392); задержка (100); тон (зуммер, 523); задержка (200); noTone (зуммер); задержка (3000); lcd.clear (); перейти сюда; } else lcd.setCursor (15, 0); lcd.print (pts); buttonState1 = digitalRead (buttonPin1); buttonState2 = digitalRead (buttonPin2); // установка препятствий, если воин не стрелял или стрелял, но тоже прыгнул if (! temp) {for (int j = 0; jrandomNums [j]) {lcd.setCursor (randomNums [j], 1); lcd.print ("#"); }
}
}
// установка очков
if (! temp1) {for (int j = 0; j
}