Игра “Дракончик Google”
Простая игра в стиле “перепрыгни препятствие” с подсчётом полученных очков. Управление реализовано с помощью всего лишь одной кнопки. Пьезодинамик служит для примитивного звукового сопровождения.
СБОРКА СХЕМЫ НА МАКЕТНОЙ ПЛАТЕ
Нам понадобятся следующие компоненты:
- Arduino Uno;
- USB-кабель для подключения к компьютеру;
- 1 LCD дисплей с I2C модулем;
- 1 пьезодинамик;
- 1 тактовая кнопка;
- 1 резистор номиналом 10 кОм;
- 4 соединительных проводов типа папа-мама различных цветов;
- 6 соединительных проводов типа папа-папа различных цветов.
Соберите устройство по следующей схеме:
БАЗОВЫЙ КОД ПРОГРАММЫ
#include <Wire.h> // библиотека для протокола IIC #include <LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C LCD(0x27, 20, 2); // присваиваем имя lcd для дисплея int level = 1; // переменная для отсчета уровня int pause = 400; // переменная для задержки byte p = 0; // переменная для времени прыжка // создаем массивы дракончика, дерева, камня и птицы byte dracon[8] = {0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011}; byte derevo[8] = {0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100}; byte kamen[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111}; byte ptica[8] = {0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000}; void setup() { pinMode (10, OUTPUT); // подключаем пьезодинамик pinMode (A1, INPUT); // подключаем кнопку analogWrite(A1, LOW); LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.createChar(0, dracon); // создаем символы дракончика, дерева, камня и птицы LCD.createChar(1, derevo); LCD.createChar(2, kamen); LCD.createChar(3, ptica); LCD.setCursor(7, 0); // начинаем игру: выводим надпись GO! LCD.print("GO!"); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); } void loop() { byte d = 1; // первоначальное положение дракончика и препятствия byte x = 15; byte y = 1; byte i = random (1, 4); // выбираем препятствие, которое появится, случайно if (i == 3) y = 0; else y = 1; while (x > 0) { LCD.clear(); // очищаем экран и выводим номер уровня LCD.setCursor(0, 0); LCD.print(level); if (analogRead(A1) > 100) d = 0; // считываем данные с кнопки и учитываем количество циклов в прыжке if (analogRead(A1) < 100) d = 1; // если дракончик находится в прыжке долго - возвращаем его вниз if (p > 3) d = 1; LCD.setCursor(4, d); // выводим дракончика в нужной строке LCD.print(char(0)); LCD.setCursor(x, y); // выводим препятствие tone(10, 50); LCD.print(char(i)); noTone(10); if (x == 4 && y == d) { // если дракончик наткнулся на препятствие выводим надпись GAME OVER! delay(400); tone(10, 50); delay(100); noTone(10); delay(100); tone(10, 20); delay(300); noTone(10); LCD.clear(); delay(200); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(600); LCD.clear(); delay(400); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(600); LCD.clear(); LCD.setCursor(3, 1); LCD.print("LEVEL: "); LCD.print(level); delay(400); LCD.setCursor(3, 0); LCD.print("GAME OVER!"); delay(3000); LCD.clear(); LCD.setCursor(7, 0); // начинаем игру заново, обнулив уровень игры LCD.print("GO!"); delay(400); tone(10, 600); delay(100); noTone(10); LCD.clear(); level = 0; pause = 400; p = 0; y = 1; x = 0; break; } if (d == 0) { tone(10, 200); delay(100); noTone(10); } // если дракончик прыгнул, издаем звук else { delay(100); } delay(pause); // если дракончик не столкнулся, то меняем положение препятствия x = x - 1; // начинаем считать сколько циклов дракончик находится в прыжке p = p + 1; if (p > 4) p = 0; } tone(10, 800); // переходим на следующий уровень и сокращаем время задержки delay(20); level = level + 1; pause = pause - 20; if (pause < 0) pause = 0; }
ЗАДАНИЕ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ
Задание 1:
Дополните программу таким образом, чтобы вся статистика игры выводилась в том числе и в последовательный порт.
Задание 2:
Добавьте в схему потенциометр, который будет использоваться для выбора уровня сложности (simple, normal, hard, very hard). Положение потенциометра должно влиять на начальную скорость движения препятствий в игре. Кроме этого, вначале игры на экран и в последовательный порт должно выводиться сообщение о текущем уровне сложности.
Задание 3:
Добавьте в игру свои варианты препятствий и замените модельку игрового персонажа на собственную.