Как напечатать что-то, когда персонаж прикасается к персонажу
Я делаю игру stickman rush, где она идет вверх и вниз, а затем появляется объект, который прокручивается влево. Всякий раз, когда этот крупье касается объекта, он печатает игру. Однако, когда объект находится ниже крупье, он печатает игру, даже если его не трогают. Может ли кто-нибудь объяснить, почему это происходит?
Код:
#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);
lcd.begin(16, 2);
lcd.createChar(0, customChar);
lcd.home();
lcd.write(byte(0));
lcd.createChar(1, gameObstical);
lcd.write(byte(1));
}
void loop() {
int stickManPosition = 0;
int obsticalPosition = 0;
int stickManPosition2 = 0;
int obsticalPosition2 = 0;
for (obsticalPosition = 15; obsticalPosition >= 0; obsticalPosition--) {
lcd.setCursor(obsticalPosition, 1);
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("-----------");
if (mapX > 200) {
lcd.clear();
lcd.setCursor(stickManPosition, 0);
lcd.write(byte(0));
} else if (mapX < -200) {
lcd.clear();
lcd.setCursor(stickManPosition, 1);
lcd.write(byte(0));
}
if (stickManPosition == obsticalPosition) {
lcd.clear();
lcd.print("Game Over.");
} else if (
}
}
Любая помощь была бы очень кстати.
@KoolKids, 👍1
Обсуждение1 ответ
▲ 1
Вы проверяете крупье и объект только положение X не проверяете положение Y
если вы можете проверить StickMan Y или проверить действие StickMan, как этот код ниже.
или попробуйте эту sim https://www.tinkercad.com/things/1LiyoY5n1mS-copy-of-stickman-rush/editel?sharecode=X6rMj1GjrKoAH95qWKY21z98ttyAs5aOTAKYy6hVJ3c
// Defind it on top
bool stickManIsJump = false;
// Добавлен код для проверки StickMan isJump или нет
if (mapX > 200) {
lcd.clear();
lcd.setCursor(stickManPosition, 0);
stickManIsJump = true; /////////////// ДОБАВЛЕНО
lcd.write(byte(0));
} else if (mapX < -200) {
lcd.clear();
lcd.setCursor(stickManPosition, 1);
stickManIsJump = false; /////////////// ДОБАВЛЕНО
lcd.write(byte(0));
}
if (stickManPosition == obsticalPosition && !stickManIsJump) { /////////////// ДОБАВЛЕНО
lcd.clear();
lcd.print("Game Over.");
}
,
@Tanatorn Boonprasert
Смотрите также:
- Как устранить сообщение об ошибке "assignment of function 'void digitalWrite (uint8_t, uint_8)"?
- Получить массив символов с помощью модуля SIM900
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Чтение двоичного файла на SD-карте
- Проблемы с Serial.read()
- Как запрограммировать 2 ультразвуковых датчика, один на серводвигателе и один прикрепленный на передней стороне автомобиля?
- Термистор не работает
- Занимают ли комментарии место в скомпилированном скетче C++? Ардуино / узел микроконтроллера
В вашем коде говорится, что игра окончена, если "stickManPosition == obsticalPosition", так что он делает именно это. Вам нужно сохранить, в каком ряду находится палка и препятствия, и сравнить это тоже., @Mat
Я не знаю, как это сделать ... Не могли бы вы привести мне пример?, @KoolKids