Друзья, решил тут запилить змейку на arduino, под рукой был дисплей hx1230 и джойстик, все подключил, принялся за скетч и тут проблема - не могу написать переходы змейки при поворотах, мучаюсь весь день - результаты практически никакие. Что делать? Куда смотреть? Сталкивался ли кто с подобной проблемой? Код (C++): #define vrx A0 #define vry A1 #include "lcd1202.h" LCD1202 lcd(9, 7, 6, 5); // RST, CE, din, SCK byte h = 10; byte h2 = 5; int course = 0; int x = 25; int y = 25; int x2 = x + 5; int y2 = y; void setup() { Serial.begin(9600); pinMode(vrx, INPUT); pinMode(vry, INPUT); lcd.Inicialize(); //Инициализация дисплея lcd.Clear_LCD(); //Очистка дисплея } void loop() { if (analogRead(vrx) < 510) { course = 0;///000 } else if (analogRead(vrx) > 520) { course = 1;///111 } else { course = course; } if (analogRead(vry) < 500) { course = 2;///222 } else if (analogRead(vry) > 520) { course = 3;///333 } else { course = course; } dviz(); // Serial.println(course); } void dviz() { if (course == 0) { //left x -= 1; // lcd.Clear_LCD(); lcd.fillRect(x, y, 5, 5, 1); lcd.fillRect(x + h, y, 5, 5, 0); lcd.Update(); } else if (course == 1) { //right x += 1; // lcd.Clear_LCD(); lcd.fillRect(x, y, 5, 5, 1); lcd.fillRect(x - h, y, 5, 5, 0); lcd.Update(); } else if (course == 2) { // top y -= 1; //lcd.Clear_LCD(); lcd.fillRect(x, y, 5, 5, 1); lcd.fillRect(x, y + h, 5, 5, 0); lcd.Update(); } else if (course == 3) { x2 = x + 5; // down y2 = y; while (x2 != x){ lcd.fillRect(x2, y2, 5, 5, 0); lcd.fillRect(x, y, 5, 5, 1); lcd.Update(); y += 1; x2 -= 1; } while (course == 3) { lcd.fillRect(x, y, 5, 5, 1); lcd.fillRect(x, y - h, 5, 5, 0); lcd.Update(); y += 1; } } else { lcd.Clear_LCD(); lcd.Update(); } } й?
С проблемой не знания? Да каждый день. Решается проблема построением математических алгоритмов. От простого к сложному. В данном случае, если необходимо голову змейки повернуть вверх-вниз, необходимо изменять занчение по оси ординат. Вправо - влево - ось абсцисс. Это по правилам какого языка?