Задать вопрос
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 дисплее появляется только одна бегающая точка. Почему не появляется вся змейка?
  • Вопрос задан
  • 347 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
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];
      }
Ответ написан
Комментировать
nava2002
@nava2002
Инженер
на oled дисплее появляется только одна бегающая точка.

Нет "смещения" отображения состояния. Потому метняется только "Одна" точка.
(Не анализирую код программы.)
Стоит посмотреть как происходи процесс изменения координать точки отображения состояния.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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