Lösung mit der Bibliothek TM1637 von AKJ:
Inhaltsverzeichnis
#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(A0));
}
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 Bibliothek 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(A0));
}
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: