Powerhour 2

Vorab als Anmerkung, Powerhour 2 ist damals in der Studienzeit zwischen dem ein oder anderen Bier als Programmierübung entstanden. Wir haben das Projekt auch seitdem nicht mehr weiterverfolgt. Sollten euch also die ein oder andern Fehler auffallen, seid etwas nachsichtig mit mir.

Powerhour 2 ist ein einfach, aber recht lustiges Trinkspiel. In diesem muss jede Minute ein Schluck Bier (ca. 2cl) getrunken werden. Das klingt anfangs machbar, wird aber mit der Zeit doch zu einem echten Problem. Es soll noch keine Gruppe die 60 Minuten wissentlich voll bekommen haben.

Programmiert habe ich Powerhour 2 in C# unter .Net 4.5. Um MP3s abzuspielen nutze ich NAudio. Kurz zu Powerhour 1, hier nutze ich MCI aus den „C# 2005 Premium Codebook„. Allerdings kam es vermehrt zu Problemen beim Abspielen von MP3s. Diese konnte ich nicht beseitigen, zudem konnte der Code selbst eine Überarbeitung vertragen. Daher entschloss ich mich Powerhour 2 zu programmieren.

Übersicht der GUI

Auf der Oberfläche werden die Anzahl der Runden und die aktuelle Zeit der Runde angezeigt.

Powerhour Start

Startscreen Powerhour 2

In den Optionen können die Songs hinzugefügt werden sowie die Anzahl und Dauer einer Runde festgelegt werden. Die Rundenzahl kann zwischen 5 und 120 gewählt werden, die Rundenzeit von 10 bis 180 Sekunden. Der Button „Songs löschen“ löscht nur die aktuelle Playlist. Werden die Einstellungen zurückgesetzt, wird die Playlist geleert, Die Rundenzahl, sowie die Rundenzeit auf 60 zurück gesetzt.

Powerhour Option

Option Menu Powerhour 2

 

Viel Spaß beim Spielen 😉

PowerHour 2 - Ein Trinkspiel
PowerHour 2 - Ein Trinkspiel
PowerHour.exe
Version: 1.0
1.4 MiB
326 Downloads
Details...

rewe

PowerShell – 11.1 – Logfiles mit einer Function erstellen

Ein gutes Script hat auch ein Log. Das ist Fakt. Sobald Daten beispielweise im AD geändert werden, ist es erforderlich ein Log zu schreiben. Denn wer weiß, wann man die Änderung nochmal rückgängig machen muss oder ähnliches. Für einige Scripte habe ich mir eine Funktion geschrieben die zu einem die Eingabe etwas vereinfachen und etwas die Schreibarbeit verringern soll. Ziel ist es das Log in ein Text-File zuschreiben und in der Console mitlaufen zulassen. Ein weiteres Ziel ist dabei die Formatierung nicht immer wieder erneut zu wiederholen. Der Code wir schnell unübersichtlich bei einer Zeile für das Log und einer Zeile für die Ausgabe in der Console. Wenn nun einmal etwas im Log angepasst werden muss, dann darf ich durch das ganze Script gehen und schauen wo ich einmal einen Logeintrag generiere und muss jeweils zwei Zeilen anpassen. Dieser Mehraufwand soll verhindert werden. Ferner könnte ich auch eine Mail-Funktion in die Write-LOG Funktion implementieren und bei gewissen Werten, automatisch eine Mail versenden lassen.

Ich nutze hier nicht die Foreach- oder For-Schleife. In diesem Falle nutze ich das Switch Statement oder auch Case-Abfrage, Case-Schleife. Ziel ist es hier das seltener verwendete Switch Statement in einem praktischen Beispiel zu verwenden. Dies sieht bei gezielten Abfragen auch etwas übersichtlicher aus, als alles in If-Schleifen zu packen.

Das Funktion muss bei PowerShell oberhalb im Script stehen. Siehe dazu PowerShell – 11 – Funktionen (Functions).

Aufbau Write-LOG; Erklärung Switch Statement

Ich habe meine Funktion an die Standardfunktionen wie write-host angelehnt und nenne sie passender Weise Write-LOG. Intern verwende ich dann das besagte Switch Statement.

Die Funktion erwartet zwei Input-Werte, zu einem eine $Info und den $Status.
$Info enthält die Information die in das Log-File geschrieben werden sollen und $Status enthält den Wert, welcher für die jeweiligen Case zutreffend ist.
$Status kann folgende Werte annehmen, welche in einem Fall (Case) münden:

  • Info
  • Status
  • Warning
  • Error

Hauptsächlich dienen die Fälle (Cases) in meinem Beispiel dazu die Farbe der Schrift in der Console zu definieren. So sind Infos stets Grün, eine Warnung Gelb und Error-Meldungen Rot mit Weißen Hintergrund.

Wie Switch Statement funktioniert

In einem Switch-Statement wird jeweils ein Wert geprüft, ob dieser gleich einem der abgegeben Cases ist. Dieser Vorgang ist nicht Case sensitiv. Heißt Groß- und Kleinschreibung ist egal. Bei Übereinstimmung, also im Beispiel $Status ist gleich „Info“, „Status“, „Warning“ oder „Error“, wird der jeweilige Case ausgeführt.
Sollte der Wert nicht angegeben werden, oder keiner der entsprechenden Cases zutreffen, dann gibt es noch den default-Case. Hier kann in dem Switch Statement definiert werden, was mit nicht passenden Werten geschehen soll. Der default-Case muss nicht angegeben werden. Allerdings wird dann bei nicht zutreffenden Werten auch nichts unternommen. Weite Beispiele Switch Statement (engl.).:

Semikolon nutzen in Scripten

Das Semikolon „;“ nutze ich um nicht eine zweite Zeile Code pro Case anfangen zu müssen. In anderen Programmiersprachen wie C# muss jede Codezeile die beendet wird mit einem Semikolon enden. Alles was nachdem Semikolon steht, steht quasi auf einer neuen Zeile.

Script Write-LOG

Damit die Funktion auch genutzt werden kann, hier die…

Eingabe des Write-LOG

Es gibt natürlich mehrere Varianten die Funktion zu nutzten, bzw. die Daten zu übergeben.
Variante 1 enthält im String mehre Variablen. Variante 2 ist hingegen ein reiner String und Variante 3 übergibt lediglich das Datum.

Soweit erstmal zum Thema Switch Statement.

 

rewe