Здравствуйте форумчане! Хочу сделать Змейку на ардуино, но я затрудняюсь понять как мне сделать хвост змеи. Есть точка, которая двигается. При повороте джойстика В крайнее правое/левое положение Y, змейка поворачивается на 90 градусов вправо/влево. Я в этом не очень мастер, но объясните хотя бы логику действий, что-бы хвост двигался как двигалась точка.
К сообщению прикрепил архив проекта. Тут находятся библиотеки(В том числе русифицированная библиотека Adafruit GFX Library), И ino проект.
C:
#include <TrueRandom.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_ADDR 0x3C
Adafruit_SSD1306 display(-1);
byte xFood;
byte yFood;
byte x = 64;
byte y = 32;
int Stats;
int moveX;
int moveY;
int rotate = 0;
int Ntail;
int Tail[115];
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.drawPixel(x - 1, y, 1);
display.drawPixel(x - 2, y, 1);
display.display();
Ntail = 1;
xFood = TrueRandom.random(11,118);
yFood = TrueRandom.random(11,63);
}
void loop() {
int moveR = analogRead(6);
Serial.println(moveR);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(10, 0);
display.println(utf8rus("Кол-во очков:"));
display.setCursor(88, 0);
display.println(Stats);
display.drawRect(10, 10, 108, 54, 1);
if (moveR < 200) rotate = rotate + 1;
if (moveR > 1000) rotate = rotate - 1;
if (rotate < 0) rotate = 3;
if (rotate > 3) rotate = 0;
if (rotate == 0) {moveX = 1; moveY = 0;}
if (rotate == 1) {moveX = 0; moveY = 1;}
if (rotate == 2) {moveX = -1; moveY = 0;}
if (rotate == 3) {moveX = 0; moveY = -1;}
if (x == xFood && y == yFood) Stats++;
x = x + moveX;
y = y + moveY;
if (y <= 10) y = 62;
if (x <= 10) x = 117;
if (y >= 63) y = 11;
if (x >= 118) x = 11;
Serial.print(x); Serial.print(" "); Serial.print(y); Serial.print(" "); Serial.print(moveR); Serial.print(" "); Serial.print(moveX); Serial.print(" "); Serial.print(moveY); Serial.print(" "); Serial.print(rotate); Serial.println(" ");
display.drawPixel(x, y, 1);
display.drawPixel(xFood, yFood, 1);
display.display();
}
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF){
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
Вложения
-
559.7 KB Просмотры: 25