#include <Adafruit_NeoPixel.h>
#define LED_PIN    25  // Pin for LED-stripen (endre til din pin)
#define BUTTON_PIN 26  // Pin for knappen (endre til din pin)
#define NUM_LEDS   60 // Antall LEDs i stripen
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int score = 0;          // Poengsum
int speed = 100;        // Start hastighet (millisekunder delay, lavere = raskere)
int targetPos;          // Posisjon for den faste lysende LED-en
int movingPos = 0;      // Startposisjon for de bevegelige LEDs
bool gameOver = false;  // Flagg for spill slutt
bool buttonPressed = false; // Flagg for knappetrykk
void setup() {
  strip.begin();
  strip.show(); // Initialiser alle LEDs til av
  pinMode(BUTTON_PIN, INPUT_PULLUP); // Knapp med intern pull-up
  Serial.begin(9600);
  randomSeed(analogRead(0)); // Tilfeldig seed
  startGame();
}
void loop() {
  if (gameOver) {
    delay(2000); // Vent litt før restart
    startGame();
    return;
  }
  // Vis den faste target LED-en (rød f.eks.)
  strip.clear();
  strip.setPixelColor(targetPos, strip.Color(255, 0, 0)); // Rød for target
  // Vis de 3 bevegelige LEDs (grønn f.eks.)
  for (int i = 0; i < 3; i++) {
    if (movingPos + i < NUM_LEDS) {
      strip.setPixelColor(movingPos + i, strip.Color(0, 255, 0)); // Grønn for bevegelig
    }
  }
  strip.show();
  // Sjekk om knappen trykkes
  if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed) {
    buttonPressed = true;
    checkHit();
  } else if (digitalRead(BUTTON_PIN) == HIGH) {
    buttonPressed = false;
  }
  // Beveg de bevegelige LEDs
  movingPos++;
  if (movingPos > NUM_LEDS - 3) {
    // Hvis de bevegelige har passert enden uten treff, bom
    endGame();
  }
  delay(speed);
}
void startGame() {
  score = 0;
  speed = 100;
  targetPos = random(0, NUM_LEDS); // Tilfeldig posisjon for target
  movingPos = 0;
  gameOver = false;
  Serial.println("Nytt spill startet!");
}
void checkHit() {
  // Sjekk om de bevegelige overlapper target
  if (movingPos <= targetPos && movingPos + 2 >= targetPos) {
    score++;
    speed = max(10, speed - 10); // Øk hastighet (reduser delay), minimum 10ms
    Serial.print("Treff! Poeng: ");
    Serial.println(score);
    movingPos = 0; // Reset bevegelig til start
    targetPos = random(0, NUM_LEDS); // Ny target
  } else {
    endGame();
  }
}
void endGame() {
  gameOver = true;
  Serial.print("Spill over! Poengsum: ");
  Serial.println(score);
  strip.clear();
  strip.show();
}