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

Lösung mit der Biblio­thek TM1637 von AKJ:

#include "TM1637.h"

int TASTER = 7;

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

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

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

int Zahl;
int TasterStatus;

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

String Ergebnis;

void setup()
{
  pinMode(TASTER, INPUT_PULLUP);

  Anzeige.begin();
  Anzeige.clearScreen();

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

  // 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) 
    { 
      TasterStatus = digitalRead(TASTER); 
      if (TasterStatus == LOW) 
      { 
        // Wechsel → Spieler2 ist an der Reihe 
        StartSpieler1 = !StartSpieler1; 
        StartSpieler2 = !StartSpieler2; 

        delay(200); 
        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 2 ist an der Reihe StartSpieler2 → true 
    if (StartSpieler2) 
    { 
      TasterStatus = digitalRead(TASTER); 
      if (TasterStatus == LOW) 
      { 
        // Wechsel → Spieler1 ist an der Reihe 
        StartSpieler1 = !StartSpieler1; 
        StartSpieler2 = !StartSpieler2; 

        delay(200); 
        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.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.display("SP-1"); 

  } 

  // Sieger Spieler1 
  if (SummeSpieler1 > SummeSpieler2) 
  { 
    Anzeige.display("SIEG"); 
    delay(2000); 
    Anzeige.display("SP-1"); 
    delay(2000); 
    Anzeige.display(SummeSpieler1); 
    delay(2000); 
    //Anzeige.display("SP-1"); 
 
    // alle Werte zurücksetzen 
    Runde = 1; 
    SummeSpieler1 = 0; 
    SummeSpieler2 = 0; 
  } 

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

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

  }
}

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

Lösung mit der Biblio­thek TM1637_RT

# include "TM1637Display.h"
int CLK = 2;
int DIO = 3;
int TASTER = 7;

// 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 };

// Definition Display
TM1637Display Anzeige(CLK, DIO);

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

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

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

void setup()
{
  pinMode(TASTER, INPUT_PULLUP);

  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)
    {
      TasterStatus = digitalRead(TASTER);
      if (TasterStatus == 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)
    {
      TasterStatus = digitalRead(TASTER);
      if (TasterStatus == 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: 25. Jul 2023 @ 13:22