Как напечатать что-то, когда персонаж прикасается к персонажу

Я делаю игру 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 (
    }
  }

Любая помощь была бы очень кстати.

, 👍1

Обсуждение

В вашем коде говорится, что игра окончена, если "stickManPosition == obsticalPosition", так что он делает именно это. Вам нужно сохранить, в каком ряду находится палка и препятствия, и сравнить это тоже., @Mat

Я не знаю, как это сделать ... Не могли бы вы привести мне пример?, @KoolKids


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.");
}

,