Wür­fel­spiel mit Sprach­aus­ga­be

Lese­zeit: 5 Minu­ten
Navi­ga­ti­on

Bei einem Wür­fel­spiel für zwei Spie­ler soll die gewür­fel­te Zahl, die Gesamt­sum­me und nach sechs Run­den das Ergeb­nis des Spiels (Sieg oder Unent­schie­den) als Spra­che aus­ge­ge­ben wer­den.

Die Sprach­da­tei­en wur­den mit der Web­sei­te ➨ http://​www​.from​text​to​speech​.com erstellt. Du fin­dest sie hier:

Bei­spie­le:

Benö­tig­te Bau­tei­le:

  • 2 Tas­ter
  • mp3-Shield
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Mit Hil­fe der Biblio­thek Bounce2 soll das "Prel­len" der Tas­ter ver­hin­dert wer­den.

Bin­de die benö­tig­ten Biblio­the­ken ein und defi­nie­re die Varia­blen.

# include <vs1053_SdFat.h>
# include <SdFat.h>
# include <Bounce2.h>

// Name der SD-Karte
SdFat sd;

// Name des MP3-Shields
vs1053 MP3player;

// die Taster
int TASTER1 = 6;
int TASTER2 = 7;

// "Prellverhinderer" für die Tasten starten
Bounce Taste_Spieler1 = Bounce();
Bounce Taste_Spieler2 = Bounce();

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

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

int Zahl;

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

Der setup-Teil. Beach­te die Kom­men­ta­re.

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

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

  // SD Karte lesen
  sd.begin(SD_SEL, SPI_FULL_SPEED);

  // in das Wurzelverzeichnis wechseln
  sd.chdir("/");

  // Player starten
  MP3player.begin();

  // Lautstärke setzen
  MP3player.setVolume(15, 15);

  // Zufallsgenerator starten
  randomSeed(analogRead(0));
  Serial.begin(9600);
}

Der loop-Teil. Beach­te die Kom­men­ta­re.

void loop()
{
  // Zufallszahlen 1-6
  // solange die Sprachausgabe läuft -> Taster nicht erneut drücken
  int Minimum = 1;
  int Maximum = 7;

  // 5 Durchgänge
  while (Runde < 6)
  {
    // StartSpieler1 = true -> Spieler 1
    if (StartSpieler1)
    {
      if (Taste_Spieler1.update())
      {
        if (Taste_Spieler1.read() == LOW)
        {
          Serial.println("Runde " + String(Runde));
          Serial.println("-----------------------------");

          // kurzes "Beep" spielen
          delay(1000);
          MP3player.SendSingleMIDInote();

          // würfeln
          int Zahl =  random(Minimum, Maximum);

          // Spielstand Serieller Monitor
          Serial.println("Spieler 1: gewuerfelte Zahl " + String(Zahl));
          delay(1000);

          /*
            Sprachausgabe gewürfelte Zahl
            211 -> Spieler 1
            Track(1) ... Track(6) Zahlen von 1 bis 6
            /*
            nach jeder Sprachausgabe
            ausreichend Zeit lassen
            Datei muss geladen und abgespielt werden
          */
          MP3player.playTrack(211);
          delay(2000);
          MP3player.playTrack(Zahl);

          // Summe berechnen und ausgeben
          SummeSpieler1 = SummeSpieler1 + Zahl;
          Serial.println("Spieler 1: Summe: " + String(SummeSpieler1));
          Serial.println("-----------------------------");
          delay(2000);

          // Sprachausgabe: Summe ausgeben
          // 101 ... 130 Zahlen von 1 bis 30
          MP3player.playTrack(100 + SummeSpieler1);
          delay(2000);

          // Wechsel -> Spieler2 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;
        }
      }
    }

    // StartSpieler2 = true -> Spieler 2
    if (StartSpieler2)
    {
      if (Taste_Spieler2.update())
      {
        if (Taste_Spieler2.read() == LOW)
        {
          delay(1000);
          MP3player.SendSingleMIDInote();
          int Zahl =  random(Minimum, Maximum);
          Serial.println("Spieler 2: gewuerfelte Zahl " + String(Zahl));
          delay(1000);
          MP3player.playTrack(212);
          delay(2000);
          MP3player.playTrack(Zahl);
          SummeSpieler2 = SummeSpieler2 + Zahl;
          Serial.println("Spieler 2: Summe: " + String(SummeSpieler2));
          Serial.println("-----------------------------");

          delay(2000);
          // Summe ausgeben
          MP3player.playTrack(100 + SummeSpieler2);

          /*
            ausreichend Zeit lassen
            Datei muss geladen und abgespielt werden
          */
          delay(2000);

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

          // Wechsel -> Spieler1 ist an der Reihe
          StartSpieler1 = !StartSpieler1;
          StartSpieler2 = !StartSpieler2;
        }
      }
    }
  }

  // unentschieden
  if (SummeSpieler1 == SummeSpieler2)
  {
    Serial.println("unentschieden");
    Serial.println("-----------------------------");
    MP3player.playTrack(200);
    delay(2000);

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

  // Sieger Spieler1
  if (SummeSpieler1 > SummeSpieler2)
  {
    Serial.println("Sieger Spieler 1");
    Serial.println("-----------------------------");
    MP3player.playTrack(201);
    delay(2000);
    // alle Werte zurücksetzen
    Runde = 1;
    SummeSpieler1 = 0;
    SummeSpieler2 = 0;
  }

  // Sieger Spieler2
  if (SummeSpieler1 < SummeSpieler2)
  {
    Serial.println("Sieger Spieler 2");
    Serial.println("-----------------------------");
    MP3player.playTrack(202);
    delay(2000);

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


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 21. Mrz 2020 @ 13:11