Ana içeriğe geç

Arduino LCD ve Joystick ile Yılan Oyunu

🐍 Arduino LCD ve Joystick ile Yılan Oyunu

Arduino LCD ve joystick kullanarak yılan oyunu nasıl yapılır? Bu rehberde oyun mantığı, kontroller, bağlantılar ve geliştirme önerilerini bulabilirsiniz.

Bu projede Arduino, I2C LCD ekran ve joystick modülü kullanılarak klasik Yılan Oyunu (Snake Game) geliştirilmiştir.
Oyuncu, joystick yardımıyla yılanı yönlendirir ve ekranda beliren yemleri toplayarak yılanı uzatmaya çalışır.


🎯 Projenin Amacı

Bu proje ile:

  • I2C LCD ekran kullanımını
  • Joystick ile yön kontrolünü
  • Dizi (array) mantığını
  • Oyun döngüsü ve zamanlamayı
  • Çarpışma kontrolünü

öğrenmiş olursunuz.


🧩 Kullanılan Malzemeler

  • Arduino Uno veya Arduino Nano
  • I2C 16x2 LCD ekran
  • Joystick modülü (KY-023)
  • Breadboard
  • Jumper kablolar

🎮 Oyun Nasıl Oynanır?

Yılan oyununun amacı, yılanı duvarlara veya kendi gövdesine çarptırmadan yemleri toplamak ve mümkün olduğunca büyütmektir.

🧭 Ekran Sembolleri

  • O → Yılanın başı
  • o → Yılanın gövdesi
  • * → Yem
  • Boşluk ( ) → Boş alan

🕹️ Joystick Kontrolleri

  • Joystick yukarı → Yılan yukarı gider
  • Joystick aşağı → Yılan aşağı gider
  • Joystick sağ → Yılan sağa gider
  • Joystick sol → Yılan sola gider

Yılan sürekli hareket eder, joystick yalnızca yön değiştirir.


🚧 Oyun Kuralları

  • Yılan ekran sınırlarına çarparsa oyun biter
  • Yılan kendi gövdesine çarparsa oyun biter
  • Her yem toplandığında yılan bir parça uzar
  • Oyun ilerledikçe hız artırılabilir

🏁 Oyun Sonu

  • Çarpışma gerçekleştiğinde LCD ekranda “GAME OVER” mesajı gösterilir
  • Oyun durur ve resetlenene kadar devam etmez

🧠 Oyun Mantığı (Teknik)

  • Yılan gövdesi X–Y koordinat dizileri ile tutulur
  • Her oyun döngüsünde:
    1. Gövde kaydırılır
    2. Baş yeni konuma ilerler
    3. Çarpışmalar kontrol edilir
  • Yem konumu rastgele üretilir

🔌 Bağlantı Özeti

I2c led devre şeması

Joystick

PinArduino
VRxA0
VRyA1
SWD2
VCC5V
GNDGND

I2C LCD

PinArduino
SDAA4
SCLA5
VCC5V
GNDGND

💻 Arduino Kodları (Tam ve Çalışan)

I2C LCD Ekran kütüphane ekleme talimatı için tıklayınız

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

#define VRX A0
#define VRY A1

#define MAX_LEN 10

int snakeX[MAX_LEN];
int snakeY[MAX_LEN];
int snakeLength = 3;

int dirX = 1;
int dirY = 0;

int foodX;
int foodY;

unsigned long lastMove = 0;
int speedDelay = 400;

void spawnFood() {
foodX = random(0, 16);
foodY = random(0, 2);
}

void drawGame() {
lcd.clear();

lcd.setCursor(foodX, foodY);
lcd.print("*");

for (int i = 0; i < snakeLength; i++) {
lcd.setCursor(snakeX[i], snakeY[i]);
if (i == 0) lcd.print("O");
else lcd.print("o");
}
}

void setup() {
lcd.init();
lcd.backlight();
randomSeed(analogRead(A5));

snakeX[0] = 2;
snakeY[0] = 0;
snakeX[1] = 1;
snakeY[1] = 0;
snakeX[2] = 0;
snakeY[2] = 0;

spawnFood();
}

void loop() {
int xVal = analogRead(VRX);
int yVal = analogRead(VRY);

if (xVal < 300) { dirX = -1; dirY = 0; }
else if (xVal > 700) { dirX = 1; dirY = 0; }
else if (yVal < 300) { dirX = 0; dirY = 1; }
else if (yVal > 700) { dirX = 0; dirY = -1; }

if (millis() - lastMove > speedDelay) {
lastMove = millis();

for (int i = snakeLength - 1; i > 0; i--) {
snakeX[i] = snakeX[i - 1];
snakeY[i] = snakeY[i - 1];
}

snakeX[0] += dirX;
snakeY[0] += dirY;

if (snakeX[0] < 0 || snakeX[0] > 15 || snakeY[0] < 0 || snakeY[0] > 1) {
lcd.clear();
lcd.print("GAME OVER");
while (1);
}

for (int i = 1; i < snakeLength; i++) {
if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
lcd.clear();
lcd.print("GAME OVER");
while (1);
}
}

if (snakeX[0] == foodX && snakeY[0] == foodY) {
if (snakeLength < MAX_LEN) snakeLength++;
spawnFood();
}

drawGame();
}
}

🚀 Geliştirme Fikirleri

  • Skor sistemi
  • Oyun hızı artışı
  • Seviye sistemi
  • Menü ekranı (joystick ile)
  • EEPROM ile en yüksek skor kaydı
  • Buzzer ile ses efektleri

👨‍🎓 Kimler İçin Uygun?

  • Arduino orta seviye kullanıcılar
  • Oyun mantığını öğrenmek isteyenler
  • LCD ve joystick pratiği yapmak isteyenler
  • Eğitim ve YouTube içeriği üretenler

✅ Sonuç

Arduino LCD ve joystick ile geliştirilen bu yılan oyunu, labirent oyununa göre daha gelişmiş bir oyun mantığı sunar.
Array kullanımı, çarpışma kontrolü ve zamanlama gibi konuların öğrenilmesi için ideal bir projedir.