PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Picturebox die Figur drehen


Ph03n!X
2006-02-23, 19:12:10
Ich soll ein Tetris proggen. Soweit so gut Feld steht und die erste Figur auch. Ist diese längliche Figur die aus 4 Bausteinen besteht. Bei mir halt in einer Picture Box. Und die Frage ist wie man diese längliche Figur die vertikal ist horizontal drehen kann. Muss ja gehen da man ja weiss das man bei Tetris die Figuren drehen kann.

MadMan2k
2006-02-23, 19:27:27
ich hab zwar keine Ahnung von welcher Programmiersprahe die Rede ist, aber das Gefühl, dass du den inhalt der picturebox und nicht die Box selbst drehen willst...

Juerg
2006-02-24, 08:11:58
Mathematisch ist dies eine Transponierung einer Matrix (also wenns den 90° ist). Ansonsten muss gewichtet werden. Also entweder programmierst Du das aus oder verwendest eine Bibliothek dafür.

Wenn deine Zielplatform Windows ist dann z.B. so:

Bitmap Rotation
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_0iwe.asp

oder so:

High quality image rotation (rotate by shear)
http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1747/

oder so:
http://www.google.ch/search?hl=de&q=rotate+Bitmap+Win32&spell=1


Ansonsten gibsts auch die folgende Möglichkeit: Da Du eine fixe nicht änderbare ANzahl von Klötzchen und deren vier Möglichkeiten im voraus kennst, kannst Du auch Logik durch Resourcen ersetzen und alle Teile im voraus einbinden. Dadurch musst Du nicht das Bild drehen sondern einfach ersetzen.

Ph03n!X
2006-02-24, 20:57:47
also soll in VB6 proggen.Und es geht darum den Inhalt der Picturebox zu drehen.

Xmas
2006-02-24, 22:34:08
Eine PictureBox mit der ganzen Figur ist für Tetris gänzlich ungeeignet, schließlich sollen später Zeilen, nicht ganze Figuren verschwinden. Du musst also die Quadrate einzeln betrachten. Dann brauchst du auch keine Rotation des Bildes.

Juerg
2006-02-24, 23:23:19
Übrigens ist der Ansatz von XMas viel eleganter und allgemeiner. Hier hast Du noch das grosse Problem der Überlappung, Überzeichnung weil die Klötzchen ineinandergreifen. Mit einzelnen Quadraten hast Du mit einem Schlag viele Probleme gelöst, allerdings auch ein paar neue... ;)

Trotzdem, ein Bild drehen geht ungefähr so: (Um in die andere Richtung zu drehen musst Du den Ursprung d.h. CurrentX und CurrentY anpassen)
Private Sub Form_Load()

Dim i As Integer
Dim j As Integer

With Picture1
.ScaleMode = vbPixels
.Width = 128
.Height = .Width
.Appearance = 0
.BorderStyle = vbBSNone
.CurrentX = 0
.CurrentY = 0
.Cls
.AutoRedraw = True
For i = 0 To .Width - 1 Step 1
For j = 0 To .Height - 1 Step 1
Picture1.PSet (i, j), (j Mod 2) * vbWhite
Next j
Next i
.AutoRedraw = False
End With

With Picture2
.ScaleMode = vbPixels
.Width = 128
.Height = .Width
.Appearance = 0
.BorderStyle = vbBSNone
.Cls
End With

End Sub

Private Sub Command1_Click()

Dim i As Integer
Dim j As Integer

With Picture2
If .Width <> .Height Then
MsgBox "wrong dimension"
Else
.CurrentX = 0
.CurrentY = 0
.Cls
.AutoRedraw = True
For i = 0 To .Width - 1 Step 1
For j = 0 To .Height - 1 Step 1
Picture2.PSet (i, j), Picture1.Point(j, i)
Next j
Next i
.AutoRedraw = False
End If
End With

End Sub

Ph03n!X
2006-02-26, 13:40:47
Hi hab noch eine Frage bezüglich des Programms. Und zwar

Wenn die Figur runterwandert , wie kriege ich es hin das die Figur dadrüber gelöscht wird und die daneben auch , und das die Figur nicht übermalt wird sobald es eine andere Figur berührt.

Anbei der Code des bisher geschriebenen Programmes :

http://rapidshare.de/files/14178021/Tetris.rar.html