C# / Windows Forms: Wie kann ich mit den Pfeiltasten den Tetrisblock bewegen?
Moin, ich benötige eure Hilfe. Ich verzweifle!
Ich habe hier einen Tetris-Code in C# für Windows Forms (.NET-Framework) und ich kriege es einfach nicht hin, dass ich mit den Pfeiltasten den Tetromino/Tetrisblock bewegen kann.
Die Hauptlogik vom Game ist vorhanden. Es gibt Start, Pause, Reset-Buttons. Der Tetrisblock bewegt sich. Es sollten Punkte verteilt werden, wenn eine Reihe gemacht wurde, etc.. Aber ich steuere immer mit den Pfeiltasten die Buttons Start, Pause und Reset, statt den Tetrisblock.
Ich habe gestern schon angefangen das zu fixen, aber ich scheitere kontinuierlich. Vielleicht kann mir ja jemand von euch einen Tipp geben. Zuletzt habe ich Folgendes versucht:
- Das KeyDown-Ereignis überprüft
- Sichergestellt, dass das gamePanel den Fokus erhält
- Die Tasteneingabe-Logik angepasst
Da die Codes zu lang sind, um sie hier zu senden, schicke ich euch zwei Textdateien per Dropbox, den ihr über diesen Link aufrufen könnt. Als Bild wird das schlecht zu erkennen sein.
Danke im Voraus für eure Hilfe.
Liebe Grüße,
Steven
1 Antwort
Also zunächst solltest du mit DoubleBuffern arbeiten, dann flackert das nicht so.
private void gamePanel_Paint(object sender, PaintEventArgs e
{
using var bmp = new Bitmap(gamePanel.Width, gamePanel.Height);
using var g = Graphics.FromImage(bmp);
DrawGrid(g);
DrawTetromino(g);
e.Graphics.DrawImage(bmp, new Point(0, 0));
}
Dann hast du Button auf deiner Form, die unweigerlich den Fokus übernehmen werden, weil sie so konzipiert sind.
Du könntest z.B. so tun als ob es Buttons sind, und Rechtecke (Oder Ovale oder wie auch immer) auf deine Form "malen" (oder andere Controls wie ein Panel umfunktionieren) und dann das Form_Click / Mousedown benutzen um herauszufinden ob dieses Event auf eben einer deiner gemalten "Buttons" / Panel war und entsprechend reagieren.
Aber taste dich weiter heran, so wirst du viel mehr lernen dabei ;)
Nun ja, in der "rotate" methode arbeitest du nur mit size.
Aber eine shape T wird von [2,3] zu [3,2] , ein [14] zu [4,1] wenn sie zur nächsten Seite rotiert. Somit brauchst du sizeX und sizeY die du dann umbiegst.
Dann solltest du deine Zeichnungen, wie beschrieben im Hintergrund auf einem "ZwischenBitmap" machen und dann erst das fertige Bild anzeigen - ich würde es vermeiden direkt in ein Control zu "malen"
Hey ich habe mein Tetris jetzt nochmal überarbeitet und es hat langsam echt Form. Nur das einzige Problem was ich jetzt habe ist, wenn ich die Tetromino Blöcke drehen möchte, ändern Sie einfach Ihre Form, ich hab jetzt mehrmals versucht getRotatedShape, DrawNextTetromino und was weiß ich zu ändern aber es scheint nichts zu funktionieren. Ich sende dir mal das gesamte Projekt per Dropbox dann kannst du vielleicht mir besser helfen.