Найти тему
АЛьТернатива

Делаем простую игру на ARDUINO (АРДУИНО)

Привет, уважаемый читатель!

Была у меня маленькая идея сделать одну из самых простых игр на ардуино и наконец я её реализовал.

Назвал я игру "JUMPER" - прыгальщик.

Игра "Jumper" - на Ардуино
Игра "Jumper" - на Ардуино

Что нам понадобится для реализации данного проекта:

  1. Ардуинка
  2. две кнопки (хотя можно обойтись и одной)
  3. LCD дисплей 1602A или любой другой строчный экран подключённый по i2c шине.

В проекте я использовал библиотеку "GyverButton" от "AlexGyver", которая обрабатывает нажатия и действия кнопок. Спасибо ему за эту библиотеку.

"Jumper" - Игровой процесс
"Jumper" - Игровой процесс

Суть игры: необходимо перепрыгивать приближающиеся камни!

Вот скетч программы "JUMPER" для заливки на ардуино (ссылка на материалы в конце статьи.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //инициализация экрана
#include "GyverButton.h"
#define BTN_R 3
#define BTN_L 4
GButton butt1(BTN_R);
GButton butt2(BTN_L);
byte AltLogo[8] = {0b00111, 0b00011, 0b00101, 0b01000, 0b10010, 0b00101, 0b00111, 0b00101};
byte Player[8] = {0b00000, 0b00000, 0b01110, 0b10001, 0b10001, 0b10001, 0b01110, 0b00000};
byte Stone[8] = {0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00100, 0b01110, 0b01110};
unsigned long last_ping_time; //Метка времени когда запустили ардуинку
byte gameStatus = 0; // 0 - ожидаем игрока, 1 - игра началась, 2 - врезались, остановились.
byte gameObjStoneX = 15;
byte gameObjStoneY = 1;
byte gamePlayerPosX = 4;
byte gamePlayerPosY = 1;
int goal = 0;
String str;
void setup() {
butt1.setTickMode(AUTO);
butt2.setTickMode(AUTO);
lcd.init();
lcd.setBacklight(true); //backlight();
lcd.createChar(1, AltLogo);
lcd.createChar(2, Player);
lcd.createChar(3, Stone);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("!!! Jumper !!!");
lcd.setCursor(0, 1);
lcd.print("Press < to Start");
}
void loop() {
if (butt2.isClick())
{
if (gameStatus == 0) {
gameStatus = 1;
lcd.clear();
}
else {
gameStatus = 0;
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("> Jumper <");
lcd.setCursor(0, 1);
lcd.print("Press < to Start");
}
}
if (gameStatus == 0) //игра не запущена
{
gameObjStoneX = 15;
gameObjStoneY = 1;
goal = 0;
str = "";
}
if (gameStatus == 1) //игра началась
{
if (butt1.isClick())
{
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print(" ");
gamePlayerPosY = 1;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print("\2");
}
else if (butt1.isHold())
{
if (gameObjStoneX == gamePlayerPosX)
{
lcd.setCursor(4, 1);
lcd.print("\3");
gamePlayerPosY = 0;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print("\2");
}
else
{
gamePlayerPosY = 1;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print(" ");
gamePlayerPosY = 0;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print("\2");
}
}
else
{
gamePlayerPosY = 0;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print(" ");
gamePlayerPosY = 1;
lcd.setCursor(gamePlayerPosX, gamePlayerPosY);
lcd.print("\2");
}
if (millis() - last_ping_time > 750) //Запускаем каждые миллисекунд.
{
last_ping_time = millis();
str = "$";
str = str + goal;
lcd.setCursor(0, 0);
lcd.print(str);
goal = goal + 1;
if (gameObjStoneX <= 0) {
gameObjStoneX = 15;
}
if (gameObjStoneX == gamePlayerPosX && gamePlayerPosY == 1)
{
lcd.clear();
gameStatus = 2;
}
lcd.setCursor(gameObjStoneX + 1, gameObjStoneY);
lcd.print(" ");
lcd.setCursor(gameObjStoneX, gameObjStoneY);
lcd.print("\3");
/*
lcd.setCursor(9, 0);
lcd.print(gameObjStoneX);
lcd.setCursor(12, 0);
lcd.print(gameObjStoneY);
lcd.setCursor(14, 0);
lcd.print(gamePlayerPosY);
lcd.setCursor(14, 1);
lcd.print(gamePlayerPosX);
*/
gameObjStoneX = gameObjStoneX - 1;
}
}
if (gameStatus == 2) //игра не запущена
{
lcd.setCursor(3, 0);
lcd.print("Game Over ");
lcd.setCursor(0, 1);
lcd.print("Press < to Start");
}
}

Скачать скетч и библиотеку.

Если возникнут вопросы, обязательно задавай!