Как запрограммировать кнопку джойстика, чтобы сбросить все?
В этом проекте я делаю игру stickman rush с джойстиком. Где, когда джойстик перемещается вверх и вниз, крупье также перемещается вверх и вниз. И есть препятствия, которые, когда крупье касается одного из них, он печатает "Игра окончена".
Теперь я пытаюсь сделать так, чтобы кнопка в джойстике (SM) была запрограммирована так, чтобы при каждом ее нажатии все сбрасывалось. Другими словами, все возвращается к первоначальному экрану, где впервые появились крупье и препятствие.
Код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
byte customChar[] = {
B01110,
B01110,
B01110,
B00100,
B01110,
B10101,
B00100,
B01010
};
byte gameObstical[] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
int vX = A0;
int vY = A1;
int sw = 8;
int xPosition = 0;
int yPosition = 0;
int SW_state = 0;
int mapX = 0;
int mapY = 0;
int screenWidth = 16;
int screenHeight = 2;
void setup() {
Serial.begin(9600);
pinMode(vX, INPUT);
pinMode(vY, INPUT);
pinMode(sw, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.createChar(0, customChar);
lcd.home();
lcd.write(byte(0));
lcd.createChar(1, gameObstical);
}
void loop() {
int stickManPosition = 0;
int obsticalPosition = 0;
int stickManRow = 0;
int obsticalRow = 0;
int obsticalPosition2 = 0;
int obsticalRow2 = 0;
for (obsticalPosition = 15; obsticalPosition >= 0; obsticalPosition--) {
lcd.setCursor(obsticalPosition, obsticalRow);
lcd.write(byte(1));
lcd.print(" ");
delay(150);
xPosition = analogRead(vX);
yPosition = analogRead(vY);
SW_state = digitalRead(sw);
mapX = map(xPosition, 20, 1003, -500, 500);
Serial.println("-----------");
Serial.println(mapX);
Serial.println(SW_state);
Serial.println("-----------");
if (mapX > 200) {
lcd.clear();
lcd.setCursor(stickManPosition, stickManRow);
lcd.write(byte(0));
} else if (mapX < -200) {
stickManRow = 1;
lcd.clear();
lcd.setCursor(stickManPosition, stickManRow);
lcd.write(byte(0));
}
if (stickManPosition == obsticalPosition) {
if (stickManRow == obsticalRow) {
lcd.clear();
lcd.print("Game Over...");
delay(10000);
}
if (obsticalPosition == 12) {
for (obsticalPosition2 = 11; obsticalPosition2 >= 0; obsticalPosition2--) {
obsticalRow2 = 1;
lcd.setCursor(obsticalPosition2, obsticalRow2);
lcd.write(byte(1));
lcd.print(" ");
delay(150);
}
}
}
}
}
Есть идеи? Спасибо за чтение
@KoolKids, 👍1
Обсуждение0
Смотрите также:
- Как полностью очистить все от arduino и напечатать что-то новое?
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Как преобразовать код Arduino во встроенный код C/C++
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
- Как устранить сообщение об ошибке "assignment of function 'void digitalWrite (uint8_t, uint_8)"?
- Получить массив символов с помощью модуля SIM900
- ЖКИ питается больше необходимого тока
- ЖК-дисплей с I2C не распознается esp32
разбейте блок "loop()
на разделы ... какой раздел выполняется, зависит от переменной состояния, например, "Режим выполнения"... когда arduino сброшен, начните с " runMode = 0
... если режим запуска == 0, отобразите приветственное сообщение и переключитесь на режим запуска = 1 .... если режим запуска == 1, проверьте нажатие кнопки "Пуск", если нажата, переключитесь на режим запуска = 2 ... если режим выполнения == 2, то запустите игру ..... если смерть, то переключитесь на режим выполнения = 3 ........ и так далее и тому подобное, @jsotolaА для большей удобства обслуживания разделите каждую фазу (инициализация, запуск, в игре, окончание игры,...) на отдельные функции., @the busybee
То, что описывает @jsotola, называется *машиной с конечным состоянием*. Вам следует узнать о них больше, прежде чем продолжать свой проект., @Majenko