Console Tetris in German done with C# and .NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PHENOM 5850a1dc91 Initial commit 2 months ago
Tetris Initial commit 2 months ago
.gitattributes Initial commit 2 months ago
.gitignore Initial commit 2 months ago
README.md Initial commit 2 months ago
README.pdf Initial commit 2 months ago
Tetris.sln Initial commit 2 months ago

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