C# / Windows Forms: Wie kann ich mit den Pfeiltasten den Tetrisblock bewegen?

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 ;)

Woher ich das weiß:Berufserfahrung – Senior-Softwaredeveloper mit 20 Jahren Berufserfahrung.

xStevenSSL 
Beitragsersteller
 09.07.2024, 15:49

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.

0
WitchHunter0815  09.07.2024, 16:26
@xStevenSSL

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"

0