Wür­fel­spiel 4-stel­li­ge Anzeige

Pro­gramm mit der Biblio­thek TM1637_AKJ

// benötigte Bibliotheken
#include "TM1637.h"
#include "Bounce2.h"

// Spieler*in 1
int TASTER1 = 7;

// Spieler*in 2
int TASTER2 = 6;

// Definition Display
TM1637 Anzeige(2, 3);

// Summe der Augen der beiden Spieler*innen
int SummeSpieler1;
int SummeSpieler2;

// Anzahl der Runden, Start mit 1
int Runde = 1;

int Zahl;

// Reihenfolge der Spieler*innen festlegen, Spieler1 startet
bool StartSpieler1 = true;
bool StartSpieler2 = false;

// formatierter String für die Anzeige der Punkte
String Ergebnis;

// Bibliothek Bounce2
// "Prellverhinderer" für die Tasten starten
Bounce SP1 = Bounce();
Bounce SP2 = Bounce();

void setup()
{
  pinMode(TASTER1, INPUT_PULLUP);
  pinMode(TASTER2, INPUT_PULLUP);

  // Instanzen des Objekts Bounce für jede Taste zuordnen
  // Zeitintervall einstellen
  SP1.attach(TASTER1);
  SP1.interval(20);
  SP2.attach(TASTER2);
  SP2.interval(20);

  // Modul starten
  Anzeige.begin();
  Anzeige.clearScreen();

  // Helligkeit setzen(0-15)
  Anzeige.setBrightness(4);
  Anzeige.display("SP-1");

  // Zufallsgenerator starten
  randomSeed(analogRead(A0));
}

void loop()
{
  // Minimum und Maximum der Würfelaugen
  int Minimum = 1;
  int Maximum = 7;

  // 6 Runden spielen
  while (Runde < 7)
  {
    // Spieler*in 1 ist an der Reihe StartSpieler1 -> true
    if (StartSpieler1)
    {
      // Taste 1 gedrückt
      if (SP1.update())
      {
        if (SP1.read() == LOW)
        {
          // Wechsel ⇒ Spieler2 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;

          Anzeige.clearScreen();

          // Aufruf der Funktion ZufallsZahl
          SummeSpieler1 = SummeSpieler1 + ZufallsZahl(Minimum, Maximum);

          // : einschalten
          Anzeige.colonOn();

          /*
            Ergebnis formatieren:
            beide Zahlen < 10 -> führende 0 setzen
            eine der Zahlen < 10 -> führende 0 setzen
          */
          if (SummeSpieler1 < 10 && SummeSpieler2 < 10) Ergebnis = "0" + String(SummeSpieler1) + "0" + String(SummeSpieler2);
          else if (SummeSpieler1 >= 10 && SummeSpieler2 >= 10) Ergebnis = String(SummeSpieler1) + String(SummeSpieler2);
          else if (SummeSpieler1 < 10) Ergebnis = "0" + String(SummeSpieler1) + String(SummeSpieler2);
          else if (SummeSpieler2 < 10 ) Ergebnis = String(SummeSpieler1) + "0" + String(SummeSpieler2);
          Anzeige.display(Ergebnis);

          delay(2000);

          // : ausschalten
          Anzeige.colonOff();
          Anzeige.display("SP-2");
        }
      }
    }

    // Spieler*in 2 ist an der Reihe StartSpieler2 -> true
    if (StartSpieler2)
    {
      // Taste 2 gedrückt
      if (SP2.update())
      {
        if (SP2.read() == LOW)
        {
          // Wechsel ⇒ Spieler1 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;

          Anzeige.clearScreen();

          // Aufruf der Funktion ZufallsZahl
          SummeSpieler2 = SummeSpieler2 + ZufallsZahl(Minimum, Maximum);

          Anzeige.colonOn();

          if (SummeSpieler1 < 10 && SummeSpieler2 < 10) Ergebnis = "0" + String(SummeSpieler1) + "0" + String(SummeSpieler2);
          else if (SummeSpieler1 >= 10 && SummeSpieler2 >= 10) Ergebnis = String(SummeSpieler1) + String(SummeSpieler2);
          else if (SummeSpieler1 < 10) Ergebnis = "0" + String(SummeSpieler1) + String(SummeSpieler2);
          else if (SummeSpieler2 < 10 ) Ergebnis = String(SummeSpieler1) + "0" + String(SummeSpieler2);
          Anzeige.display(Ergebnis);

          delay(2000);
          Anzeige.colonOff();
          Anzeige.clearScreen();

          Anzeige.display("SP-1");

          // nur bei Spieler2 Runde hochzählen, Spieler1 hat angefangen
          Runde ++;
        }
      }
    }
  }

  // unentschieden
  if (SummeSpieler1 == SummeSpieler2)
  {
    Anzeige.clearScreen();
    Anzeige.display(" = =");
    delay(2000);

    // alle Werte zurücksetzen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
    Anzeige.clearScreen();
    Anzeige.display("SP-1");
  }

  // Sieger Spieler1
  if (SummeSpieler1 > SummeSpieler2)
  {
    Anzeige.display("SIEG");
    delay(2000);
    Anzeige.clearScreen();

    Anzeige.display("SP-1");
    delay(2000);

    // Punktestand anzeigen
    Anzeige.clearScreen();

    // Anzeige rechtsbündig formatieren
    if (SummeSpieler1 < 10) Anzeige.display(SummeSpieler1, false, false, 3);
    else  Anzeige.display(SummeSpieler1, false, false, 2);
    delay(2000);

    // Neustart: alle Werte zurücksetzen, SP-1 anzeigen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
    Anzeige.clearScreen();
    Anzeige.display("SP-1");
  }

  // Sieger Spieler2
  if (SummeSpieler1 < SummeSpieler2)
  {
    Anzeige.display("SIEG");
    delay(2000);
    Anzeige.clearScreen();
    Anzeige.display("SP-2");
    delay(2000);
    Anzeige.clearScreen();

    if (SummeSpieler2 < 10) Anzeige.display(SummeSpieler2, false, false, 3);
    else  Anzeige.display(SummeSpieler2, false, false, 2);
    delay(2000);

    // Neustart: alle Werte zurücksetzen, SP-1 anzeigen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
    Anzeige.clearScreen();
    Anzeige.display("SP-1");
  }
}

int ZufallsZahl(int Minimum, int Maximum)
{
  int Zahl =  random(Minimum, Maximum);
  return Zahl;
}

Pro­gramm mit der Biblio­thek TM1637

Benö­tig­te Bibliothek

#include "TM1637Display.h"
#include "Bounce2.h"

// Spieler*in 1
int TASTER1 = 7;

// Spieler*in 2
int TASTER2 = 6;

// Definition Display
TM1637Display Anzeige(2, 3);

// Summe der Augen der beiden Spieler*innen
int SummeSpieler1;
int SummeSpieler2;

// Anzahl der Runden, Start mit 1
int Runde = 1;

int Zahl;

// Reihenfolge der Spieler*innen festlegen, Spieler1 startet
bool StartSpieler1 = true;
bool StartSpieler2 = false;

// formatierter String für die Anzeige der Punkte
String Ergebnis;

// Bibliothek Bounce2
// "Prellverhinderer" für die Tasten starten
Bounce SP1 = Bounce();
Bounce SP2 = Bounce();

// Array für SP-1
byte SPIELER1[] = 
{
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,  // S
  SEG_E | SEG_F | SEG_A | SEG_B | SEG_G,  // P
  SEG_G,                                  // -
  SEG_B | SEG_C,                          // 1
};

// Array für SP-2
const byte SPIELER2[] = 
{
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,  // S
  SEG_E | SEG_F | SEG_A | SEG_B | SEG_G,  // P
  SEG_G,                                  // -
  SEG_A | SEG_B | SEG_G | SEG_E | SEG_D,  // 2
};

// Array für SIEG
byte SIEG[] = 
{
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,          // S
  SEG_B | SEG_C,                                  // I
  SEG_A | SEG_F | SEG_G | SEG_E | SEG_D,          // E
  SEG_A | SEG_F | SEG_E | SEG_D | SEG_C | SEG_G,  // G
};

// Array für UNENTSCHIEDEN
byte UNENTSCHIEDEN[] = 
{
  SEG_G | SEG_D,  // =
};

// Array für alle Segmente löschen
byte AnzeigeLoeschen[] = { 0, 0, 0, 0 };

void setup() 
{
  pinMode(TASTER1, INPUT_PULLUP);
  pinMode(TASTER2, INPUT_PULLUP);

  // Instanzen des Objekts Bounce für jede Taste zuordnen
  // Zeitintervall einstellen
  SP1.attach(TASTER1);
  SP1.interval(20);
  SP2.attach(TASTER2);
  SP2.interval(20);
  Anzeige.setSegments(AnzeigeLoeschen);

  // Helligkeit setzen(0-15)
  Anzeige.setBrightness(2);

  // Spieler 1 beginnt
  Anzeige.setSegments(SPIELER1);

  // Zufallsgenerator starten
  randomSeed(analogRead(0));
}

void loop() 
{
  // Minimum und Maximum der Würfelaugen
  int Minimum = 1;
  int Maximum = 7;

  // 6 Runden spielen
  while (Runde < 7) 
  {
    // Spieler 1 ist an der Reihe StartSpieler1 → true
    if (StartSpieler1) 
    {
      // Taste 1 gedrückt
      if (SP1.update()) 
      {
        if (SP1.read() == LOW) 
        {
          // Wechsel → Spieler2 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;
          delay(200);
          Anzeige.setBrightness(2);
          Anzeige.clear();

          // Aufruf der Funktion ZufallsZahl
          SummeSpieler1 = SummeSpieler1 + ZufallsZahl(Minimum, Maximum);

          /*
           Punkte anzeigen
            showNumberDecEx(Zahl, Doppelpunkt anzeigen
           (64 oder hexadezimal 0x40),
            false/true(führende 0 verbergen/anzeigen),
            Position (1-4), 0 (rechtsbündig))
          */
          Anzeige.showNumberDecEx(SummeSpieler2, 64, true, 4, 0);
          Anzeige.showNumberDecEx(SummeSpieler1, 64, true, 2, 0);
          delay(2000);
          Anzeige.setSegments(SPIELER2);
        }
      }
    }

    // Spieler 2 ist an der Reihe StartSpieler2 → true
    if (StartSpieler2) 
    {
      if (SP2.update()) 
      {
        if (SP2.read() == LOW) 
        {
          // Wechsel → Spieler1 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;
          delay(200);
          Anzeige.setBrightness(2);
          Anzeige.clear();

          // Aufruf der Funktion ZufallsZahl
          SummeSpieler2 = SummeSpieler2 + ZufallsZahl(Minimum, Maximum);
          Anzeige.showNumberDecEx(SummeSpieler2, 64, true, 4, 0);
          Anzeige.showNumberDecEx(SummeSpieler1, 64, true, 2, 0);
          delay(2000);
          Anzeige.setSegments(SPIELER1);

          // nur bei Spieler2 Runde hochzählen, Spieler1 hat angefangen
          Runde++;
        }
      }
    }
  }
  // unentschieden
  if (SummeSpieler1 == SummeSpieler2) 
  {
    Anzeige.clear();
    Anzeige.setSegments(UNENTSCHIEDEN, 1, 2);
    delay(2000);
    Anzeige.setSegments(SPIELER1);

    // alle Werte zurücksetzen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
  }

  // Sieger Spieler1
  if (SummeSpieler1 > SummeSpieler2) 
  {
    Anzeige.setSegments(SIEG);
    delay(2000);
    Anzeige.setSegments(SPIELER1);
    delay(2000);
    Anzeige.showNumberDec(SummeSpieler1, false);
    delay(2000);
    Anzeige.setSegments(SPIELER1);

    // alle Werte zurücksetzen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
  }

  // Sieger Spieler2
  if (SummeSpieler1 < SummeSpieler2) 
  {
    Anzeige.setSegments(SIEG);
    delay(2000);
    Anzeige.setSegments(SPIELER2);
    delay(2000);
    Anzeige.showNumberDec(SummeSpieler2, false);
    delay(2000);
    Anzeige.setSegments(SPIELER1);

    // alle Werte zurücksetzen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
  }
}

int ZufallsZahl(int Minimum, int Maximum) 
{
  int Zahl = random(Minimum, Maximum);
  return Zahl;
}

Letzte Aktualisierung: Apr. 8, 2025 @ 17:45