Skip to content

TWANG — 1D Dungeon Crawler

Το TWANG αποτελεί ένα από τα πιο αναγνωρίσιμα και διαδραστικά hardware projects που έχουμε φιλοξενήσει και κατασκευάσει στο gizmo_lab, βασισμένο στην ανοιχτή κοινότητα και τη φιλοσοφία του DIY gaming.


Το TWANG είναι ένας ανοιχτού κώδικα κλώνος (clone) του πασίγνωστου indie παιχνιδιού Line Wobbler του Robin Baumgarten. Η ιδέα γεννήθηκε από την ανάγκη να φέρουμε μια high-end conceptual ψηφιακή εγκατάσταση στα μέτρα μας, χρησιμοποιώντας προσβάσιμα υλικά χαμηλού κόστους (όπως standard διευθυνσιοδοτούμενες LED ταινίες και αισθητήρες κίνησης).

Πρόκειται για ένα μονοδιάστατο (1D) Dungeon Crawler όπου ολόκληρος ο κόσμος του παιχνιδιού, ο παίκτης, οι εχθροί και τα εμπόδια, απεικονίζονται πάνω σε μια φωτεινή γραμμή από μερικές δεκάδες ή εκατοντάδες LED.


Πώς Λειτουργεί το Παιχνίδι (Gameplay)

Section titled “Πώς Λειτουργεί το Παιχνίδι (Gameplay)”

Ο χειρισμός του παιχνιδιού είναι απόλυτα φυσικός και βασίζεται στη μηχανική αλληλεπίδραση:

  • Κίνηση (Tilt): Ο παίκτης ελέγχει ένα φωτεινό pixel (π.χ. πράσινο) γέρνοντας ένα ελατήριο-joystick αριστερά ή δεξιά.
  • Επίθεση (Twang/Wobble): Λυγίζοντας και αφήνοντας απότομα το ελατήριο, προκαλείται μια δόνηση (“twang”) η οποία μεταφράζεται σε επίθεση shockwave για την εξόντωση των εχθρών.
  • Εμπόδια & Μηχανισμοί:
    • Εχθροί: Κινούμενα pixels (κόκκινα) που προσπαθούν να χτυπήσουν τον παίκτη.
    • Lava (Λάβα): Ζώνες που αναβοσβήνουν περιοδικά και σκοτώνουν τον παίκτη αν βρεθεί εκεί τη λάθος στιγμή.
    • Conveyor Belts / Water (Νερό): Περιοχές με ροή που σπρώχνουν ή καθυστερούν τον παίκτη.
    • Boss Fights: Στο τέλος των επιπέδων, ένας μεγάλος εχθρός που γεννά μικρότερους μέχρι να δεχτεί συγκεκριμένα πλήγματα.

Εξάρτημα Περιγραφές / Προδιαγραφές Χρησιμότητα
Microcontroller Arduino Mega 2560 (ή συμβατός κλώνος) Η “καρδιά” του συστήματος
LED Strip APA102 / SK9822 (ή WS2812B / Neopixel) Η “οθόνη” του παιχνιδιού — προτιμώνται οι APA102 λόγω υψηλού refresh rate
Αισθητήρας Κίνησης MPU-6050 (Γυροσκόπιο & Επιταχυνσιόμετρο) Ανίχνευση κίνησης και δόνησης στην κορυφή του ελατηρίου
Μηχανικό Ελατήριο Κλασικό ελατήριο πόρτας (Door Spring) Το σώμα του custom joystick
Audio Μικρό ηχείο (8Ω) ή Buzzer Retro 8-bit ηχητικά εφέ
Ενδείξεις Ζωής 3x LEDs (5mm) Εναπομένουσες προσπάθειες παίκτη
Τροφοδοτικό 5V DC (2A–5A ανάλογα με μήκος LED strip) Παροχή ρεύματος
Enclosures 3D Printed (βάση, καπάκι controller, κορυφή ελατηρίου) Στέγαση ηλεκτρονικών και σταθεροποίηση αισθητήρα

Σχηματική Διάταξη & Συνδεσμολογία

Section titled “Σχηματική Διάταξη & Συνδεσμολογία”
+-------------------+
| Arduino Mega |
| |
[MPU-6050] ---> | SDA (20) / SCL(21)| (I2C Interface)
[LED Strip] <---| Pin 51 (MOSI/Data)| (SPI / FastLED Control)
| Pin 52 (SCK/Clock)|
[Speaker] <--- | Pin 3 | (PWM Audio Output)
[Life LEDs] <---| Pins 5, 6, 7 | (Status Indicators)
+-------------------+

  1. Προετοιμασία Joystick Ελατηρίου — Περνάμε 4 λεπτά καλώδια (VCC, GND, SDA, SCL) μέσα από το κέντρο του ελατηρίου. Στην κορυφή κολλάμε τον αισθητήρα MPU-6050.

  2. 3D Printing & Συναρμολόγηση Κορυφής — Τυπώνουμε το enclosure κορυφής. Τοποθετούμε τον MPU-6050 απόλυτα παράλληλο με το έδαφος για σωστή ανάγνωση αξόνων.

  3. Κεντρική Βάση (Controller Console) — Τυπώνουμε βάση + καπάκι. Στερεώνουμε το ελατήριο με pins 90°, τοποθετούμε ηχείο/buzzer στις γρίλιες, εγκαθιστούμε τα 3 LEDs ζωής στην πρόσοψη.

  4. Καλωδίωση & Θύρες — Συνδέουμε τα πάντα στο Arduino Mega. Αφήνουμε προσβάσιμη τη USB θύρα. Χρησιμοποιούμε αδιάβροχο 4-pin σύνδεσμο στην έξοδο LED strip.


Κώδικας & Παραμετροποίηση (Software)

Section titled “Κώδικας & Παραμετροποίηση (Software)”

Το software βασίζεται στη βιβλιοθήκη FastLED για τη διαχείριση χρωμάτων και εφέ σε πραγματικό χρόνο.

  • NUM_LEDS: Συνολικό μήκος πίστας (π.χ. 144 ή 300 LEDs)
  • LED_TYPE: Chipset ταινίας (APA102 ή WS2812B)
  • ATTACK_THRESHOLD: Ευαισθησία αισθητήρα για αναγνώριση επίθεσης

Αν δεν ανιχνευτεί κίνηση για 30 δευτερόλεπτα, το παιχνίδι περνάει σε screensaver (κυκλικά εφέ φωτισμού). Μόλις ο παίκτης αγγίξει ξανά το ελατήριο, επιστρέφει στο Level 1.


  • GitHub Repository (gizmo_lab): g1zmolab/TWANG — Πηγαίος κώδικας, τροποποιήσεις και οδηγίες παραμετροποίησης.