Console Tetris in German done with C# and .NET Core
Go to file
PHENOM 5850a1dc91 Initial commit 2020-05-20 16:47:17 +02:00
Tetris Initial commit 2020-05-20 16:47:17 +02:00
.gitattributes Initial commit 2020-05-20 16:47:17 +02:00
.gitignore Initial commit 2020-05-20 16:47:17 +02:00
README.md Initial commit 2020-05-20 16:47:17 +02:00
README.pdf Initial commit 2020-05-20 16:47:17 +02:00
Tetris.sln Initial commit 2020-05-20 16:47:17 +02:00

README.md

Tetris

Ein kleines C# Tetris Konsolen Spiel. Beim Anfang werden Sie aufgefordert ein Level zwischen 1 - 5 einzugeben und mit Enter zu bestätigen. Um so höher das Level, desto schneller fallen die Blöcke.

Es wird außerdem Korobeiniki via Console.Beep(...)'s asynchron über die Lautsprecher abgespielt und wird schneller und eine höhere Tonart, wenn sich das Level ändert.

Um so mehr Zeilen gleichzeitig entfernt werden, desto höher ist der daraus zu gewinnende Punktestand. Die Parameter für die Spielelogik können in der Game.cs Klasse angepasst werden unterhalb den // Adjustable Data Kommentar.

Die Grafikausgabe wird mittels Backbuffer und Frontbuffer Technik realisiert, siehe Double Buffering (https://www.khronos.org/opengl/wiki/Default_Framebuffer oder https://en.wikipedia.org/wiki/Multiple_buffering#/media/File:Comparison_double_triple_buffering.svg).

Während des Spielens werden 3 Threads via Tasks realisiert erzeugt:

  • Main Thread: Behandelt die Spielelogik und die Konsolenausgabe
  • Input Thread: Behandelt asynchron die Eingabe von
  • Musik Thread: Spielt asynchron Korobeiniki via Console.Beep(...)'s ab

Das Spielefeld ist 10x20 Blöcke groß

Steuerung

  • Pfeil links ←: Tetromino nach Links bewegen
  • Pfeil rechts →: Tetromino nach Rechts bewegen
  • Pfeil oben ↑: Tetromino drehen
  • Pfeil unten ↓: Tetromino um 1 Zelle nach unten bewegen
  • Spacebar ▬: Aktuellen Tetromino mit nächsten austauschen
  • Escape ESC: Spiel beenden

Bekannte Bugs für die mir keine Zeit mehr zum behandeln blieb

  • Rest-Artefakte werden verursacht
  • Drehen in der nähe der Ränder sollte vermieden werden, da es außerhalb der Blockdata Region liegt und keine Kollisionsüberprüfung stattfindet
  • Drehen eines Tetrominos welchen den Boden berührt sollte vermieden werden, da auch hier keine Kollisionsüberprüfung stattfindet
  • Nach den Gameover ist es noch möglich eingaben

Mögliche Lösungsansätze

  • Rest-Artefakte

    Eventuelles periodisches Neuzeichnen der leeren Speicherzellen, resultiert jedoch in einer geringeren Refreshrate und ich wollte das Spiel relativ performant halten und die Console.Write(...)'s so gering wie möglich halten, um ein möglich flüssiges Gameplay zu ermöglichen.

  • Rotationsbugs

    Diese Bugs könnten mit einer zusätzlichen Kollisionserkennung für Rotationen in der Zukunft behoben werden

  • Gameover-bugs

    Der Input Task sollte terminiert werden und zusätzliche Gameover-Checks sollten getätigt werden