#include <Arduino.h>
#include <stdlib.h> // Library untuk acak
const int numLEDs = 8; // Jumlah LED
const int buttonPin = 2; // Pin tombol tekan (opsional)
int LEDpins[] = {3, 4, 5, 6, 7, 8, 9, 10}; // Pin LED
int LEDs[numLEDs]; // Array untuk menyimpan status LED (1 = menyala, 0 = mati)
int matchedPairs = 0; // Jumlah pasangan yang sudah ditemukan
int firstLED = -1; // LED pertama yang dipilih
int secondLED = -1; // LED kedua yang dipilih
boolean gameActive = true; // Status permainan (true = sedang berjalan, false = selesai)
void setup() {
randomSeed(analogRead(0)); // Inisialisasi generator bilangan acak
for (int i = 0; i < numLEDs; i++) {
pinMode(LEDpins[i], OUTPUT);
digitalWrite(LEDpins[i], LOW);
}
pinMode(buttonPin, INPUT_PULLUP);
startGame();
}
void loop() {
if (gameActive) {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) { // Tombol ditekan
int selectedLED = getSelectedLED();
if (selectedLED != -1) {
toggleLED(selectedLED);
if (firstLED == -1) {
firstLED = selectedLED;
} else {
secondLED = selectedLED;
if (LEDs[firstLED] == LEDs[secondLED]) {
matchedPairs++;
if (matchedPairs == numLEDs / 2) {
gameActive = false;
// Permainan selesai
}
} else {
delay(500); // Tahan LED yang dinyalakan selama 1 detik
toggleLED(firstLED);
toggleLED(secondLED);
}
firstLED = -1;
secondLED = -1;
}
}
}
}
}
void startGame() {
for (int i = 0; i < numLEDs; i++) {
LEDs[i] = i / 2; // Setiap pasangan LED memiliki nomor yang sama
}
shuffleLEDs();
for (int i = 0; i < numLEDs; i++) {
toggleLED(i);
delay(500);
toggleLED(i);
delay(500);
}
}
void shuffleLEDs() {
for (int i = numLEDs - 1; i > 0; i--) {
int j = random(i + 1);
if (i != j) {
// Tukar posisi LED
int temp = LEDs[i];
LEDs[i] = LEDs[j];
LEDs[j] = temp;
}
}
}
void toggleLED(int ledIndex) {
if (LEDs[ledIndex] == -1) return;
digitalWrite(LEDpins[ledIndex], LEDs[ledIndex] == 1 ? HIGH : LOW);
}
int getSelectedLED() {
for (int i = 0; i < numLEDs; i++) {
if (digitalRead(LEDpins[i]) == LOW) {
if (LEDs[i] == -1) {
return -1;
} else {
return i;
}
}
}
return -1;
}