Threads

Guten Tag allerseits.

Da mir schon im anderen Thread super geholfen wurde würd ich gern noch eine
andere Frage stellen. Ich hoffe Ihr könnt mir auch dabei helfen.

Das mit dem Schiffeversenken war eig das Projekt von zwei anderen aus meinem Ausbildungsjahrgang. Mein Projekt ist ein PingPong Spiel. Einzelspieler funktioniert
soweit und nun arbeite ich am Zweispieler-Modus.

Das Problem ist halt beide Spieler gleichzeitig zu steuern. Dazu wollte ich Threads verwenden. Ich hab mir viel dazu angesehen trotzdem steig ich irgendwie nicht ganz durch.

Könntet Ihr mir bitte erklären wie ich den folgenden Code in zwei Threads gestartet bekomme? Oder wie ich das sonst lösen könnte?

Code:
 Sub Form1_Keyone(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        mThread = New Thread(AddressOf ThreadProc)
        mThread.Start()

        If (e.KeyCode = Keys.Left) Then
            breite = PictureBox1.Location.X
            hoehe = PictureBox1.Location.Y
            breite -= 15
            If PictureBox1.Location.X <= 1 Then
                breite = 1
            End If
            PictureBox1.Location = New Point(breite, hoehe)
        End If

        If (e.KeyCode = Keys.Right) Then
            breite = PictureBox1.Location.X
            hoehe = PictureBox1.Location.Y
            breite += 15
            If PictureBox1.Location.X >= 390 Then
                breite = 390
            End If
            PictureBox1.Location = New Point(breite, hoehe)
        End If

    End Sub

    Sub Form1_Keytwo(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If (e.KeyCode = Keys.A) Then
            breitep2 = PictureBox4.Location.X
            hoehep2 = PictureBox4.Location.Y
            breitep2 -= 15
            If PictureBox4.Location.X <= 1 Then
                breitep2 = 1
            End If
            PictureBox4.Location = New Point(breitep2, hoehep2)
        End If

        If (e.KeyCode = Keys.D) Then
            breitep2 = PictureBox4.Location.X
            hoehep2 = PictureBox4.Location.Y
            breitep2 += 15
            If PictureBox4.Location.X >= 390 Then
                breitep2 = 390
            End If
            PictureBox4.Location = New Point(breitep2, hoehep2)
        End If

    End Sub

Diese beiden Subs unterstehen direkt der Main class.

Wäre über erneute Hilfe sehr erfreut.

Danke
 
Hi,

ich weiß nicht ob das in zwei Threads geht.
Aber was spricht dagegen das alles in einen Thread zu setzten?

Könnte sein das du das Problem lösen willst, dass wenn bei zwei Spielern erst einer A drückt und dann der andere Left nur das Left gewertet wird?

Mach einfach 4 Boolean-Variablen (LeftDown, RightDown, ADown, BDown)
Im KeyDown - Event setzt du diese dann entsprechend auf True und bei KeyUp auf False.

Dann machst du dir noch nen Timer rein, der deine PictureBoxen entsprechend verschiebt.

z.Bsp.:
Code:
 Sub Form1_Keyone(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

        If (e.KeyCode = Keys.Left) Then
            LeftDown=True
        End If

        If (e.KeyCode = Keys.Right) Then
            RightDown=True
        End If

         If (e.KeyCode = Keys.A) Then
            ADown=True
        End If

        If (e.KeyCode = Keys.D) Then
           DKeyDown=True
        End If

    End Sub

 Sub Form1_Keyone(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp

        If (e.KeyCode = Keys.Left) Then
            LeftDown=False
        End If

        If (e.KeyCode = Keys.Right) Then
            RightDown=False
        End If

         If (e.KeyCode = Keys.A) Then
            ADown=False
        End If

        If (e.KeyCode = Keys.D) Then
           DKeyDown=False
        End If

    End Sub

    Private Sub Timer1_Tick(...) ...
       if LeftDown Then
           'PictureBox von Player 1 entsprechend verschieben
      End If
      if RightDown Then
           'PictureBox von Player 1 entsprechend verschieben
      End If
      if ADown Then
           'PictureBox von Player 2 entsprechend verschieben
      End If
      if DDown Then
           'PictureBox von Player 2 entsprechend verschieben
      End If
      

   End Sub
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück