Задать вопрос
Wolf_Yout
@Wolf_Yout

Проблема со змейкой на arduino: появляется лишь одна точка вместо всей длины, как исправить?

Используются библиотеки EncButton и GyverOLED
Код пишу, опираясь на это.
Мой код змейки
void snake() {
  // Переменные
  start:
  int snakeLength = 8;
  int snakeX[128];
  int snakeY[64];
  int foodX = random(10,118);
  int foodY = random(10,54);
  int headX = 20; 
  int headY = 20;
  for (int i=0;i<snakeLength;i++) {
    snakeX[i] = headX - i;
    snakeY[i] = headY;
  }
  int dirX = 1; 
  int dirY = 0;
  uint32_t snakeMoveTmr;
  while (true) {
    tick_all();
    // Чтение кнопок.
    if (left.click()) {
      dirX = -1;
      dirY = 0;
    } else if (right.click()) {
      dirX = 1;
      dirY = 0;
    } else if (down.click()) {
      dirX = 0;
      dirY = 1;
    } else if (up.click()) {
      dirX = 0;
      dirY = -1;
    }
    // Движение змеи.
    if (millis() - snakeMoveTmr >= 200) {
      snakeMoveTmr = millis();
      for (int i=snakeLength;i>0;i--) {
        snakeX[i] = snakeX[i-1];
        snakeY[i] = snake[i-1];
      }
      headX += dirX;
      headY += dirY;

      snakeX[0] = headX;
      snakeY[0] = headY;
    }
    // Отрисовка.
    oled.clear();
    for (int i=0;i<snakeLength; i++) {
      oled.rect(snakeX[i], snakeY[i], snakeX[i] + 1, snakeY[i] + 1);
    }
    oled.update();
    // Возможность выхода.
    if (left.hold(1)) return;
  }
}

Он еще не полный, адаптировал и написал только код на движение, и тут проблема - на oled дисплее появляется только одна бегающая точка. Почему не появляется вся змейка?
  • Вопрос задан
  • 87 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Ошибки в коде:
for (int i=snakeLength;i>0;i--) {
        snakeX[i] = snakeX[i-1];
        snakeY[i] = snake[i-1];   # < --- snakeY[i] = snakeY[i-1];
      }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы