Arduino – Prosta gra JampMen

W czeluściach swojego NASA znalazłem mały kod prostej gry którą można odpalić na Arduino.To co będzie nam potrzebne oprócz Arduino Uno to wyświetlacz LCD 16×2 z modułem I2C, 2 przyciski  i możemy grać.

Potrzebne elementy:

– Arduino UNO (lub odpowiednik)
– Wyświetlacz LCD 16×2 z modułem I2C
– 2 przyciski
– kabelkologia do połączenia całości

Opis połączenia:

Moduł LCD Arduino Uno
GND GND
VCC 5V
SDA SDA
SCL SCL

Sterowanie odbywa się jednym przyciskiem w tym celu podłączamy przycisk między masę układu a pinem 4 Arduino. Zalecam jednak zastosowanie 2 przycisku do resetu zawłaszcza jak już upchniemy całość w schludną obudowę, wówczas przycisk łączymy między GND a pinem „Reset”.

Wstępnie zmontowany układ

JampMen prosta gra arduino

Jest to wersja zmontowana na szybko, dziecku już paliło się, aby zamęczyć przyciski 😉

Kod gry:

//pobrano z www.tranzystor.pl
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2); // Adres i wymiar LCD,

#define buttonPin 4 // przycisk funkcyjny

byte stone[8] = {
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00100,
0b00100,
0b01110
};

byte armsDown[8] = {
0b00100,
0b01010,
0b00100,
0b00100,
0b01110,
0b10101,
0b00100,
0b01010
};

byte armsUp[8] = {
0b00100,
0b01010,
0b00100,
0b10101,
0b01110,
0b00100,
0b00100,
0b01010
};

byte explosion[8] = {
0b10001,
0b01010,
0b01010,
0b00100,
0b01010,
0b01010,
0b10001,
0b00000
};

byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

int stones[16];
int heroY = 2;
int heroX = 7;
int score = 0;
int level=350;

int life = 5; //życia

void setup() {
lcd.init();
lcd.backlight();
Serial.begin (9600);

randomSeed(analogRead(0));

pinMode(buttonPin, INPUT_PULLUP);

int i = 0;
for (i = 0; i<16; i++) {
stones[i] = 0;
}

lcd.begin(16, 4);

lcd.createChar(0, stone);
lcd.createChar(1, armsUp);
lcd.createChar(2, armsDown);
lcd.createChar(3, explosion);
lcd.createChar(4, heart);
}

void hero() {
int buttonValue = digitalRead(buttonPin);
int charId = 0;

if (buttonValue == LOW) {
heroY = 0;
charId = 1;
} else {
heroY = 1;
charId = 2;
if (stones[heroX] == 1) {
charId = 3;
life--;
score--;
}
}
lcd.setCursor(heroX, heroY);
lcd.write((byte)charId);
}

void moveStones() {
int randS = random(0, 2);
// shift the stones
int i;
for (i=1; i<16; i++) {
stones[i-1] = stones[i];
}

if (randS == 1 && (stones[14] == 1 || stones[13] == 1)) {
stones[15] = 0;
} else {
stones[15] = randS;
}

for (i = 0; i<16; i++) {
if (stones[i] != 0) {
lcd.setCursor(i, 1);
lcd.write((byte)0);
}
}
}

void showLife() {
int i;
for (i=0; i<life; i++) {
lcd.setCursor(i, 0);
lcd.write((byte)4);
}
}

void loop() {
lcd.clear();
if (life > 0) {
moveStones();
hero();
showLife();
score++;
level--;
} else {
lcd.setCursor(1, 0);
lcd.print("Tranzystor.pl");
lcd.setCursor(3, 1);
lcd.print("Wynik:");
lcd.print(score);
//lcd.setCursor(-2, 2);
//lcd.print("Tranzystor.pl");
}
delay(level);

}

Kod do pobrania

Post Author: swistak

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.