|
||
---|---|---|
Tetris | ||
.gitattributes | ||
.gitignore | ||
README.md | ||
README.pdf | ||
Tetris.sln |
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