VB PictureBox zufallsposition funktioniert nicht richtig

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von PollMan.

    VB PictureBox zufallsposition funktioniert nicht richtig

    Moin Leute.

    Ich programmiere gerade ein kleines Spiel. Ich hab soweit alles hinbekommen. Auch die Radom position die ein picbox annehmen soll funktioniert. Aber aus irgendeinem unerfindlichen Grund positioniert sich meine Picbox nur am oberen Rand der Form. Also sie nutzt nicht den gesamten Platz aus in dem sie sich bewegen könnte.

    Mein Spiel ist sowas wie ein kleines Schiffeversenken. Das Schiff ist die picbox und wir eben random irgendwo "gespawnt" wenn man es aufgespürt und getroffen hat.


    pastebin.com/A4h7erV7

    Da könnt ihr meinen Code bewundern. Ich versteh einfach nicht was ich falsch mache/übersehen habe.

    Danke schonmal.
    Dateien
    • 43.txt

      (2,56 kB, 119 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „PollMan“ ()

    Warum stellst du den Code nicht einfach ein, mittm [vbnet]-Tag, evtl. im Spoiler?
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. REM Dim isMoving As Boolean = False
    3. REM Dim startPos As Point
    4. Dim X As Integer
    5. Dim Y As Integer
    6. Dim Pbar As Integer
    7. Dim Pbar2 As Integer
    8. Dim Tester As Integer
    9. Dim eins As Integer = New Random().Next(0, 469) REM(0, 496)
    10. Dim zwei As Integer = New Random().Next(83, 614) REM(0, 522)
    11. REM Dim posi1 As Integer = Me.Width * Rnd()
    12. REM Dim posi2 As Integer = Me.Height * Rnd()
    13. Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    14. PictureBox1.SendToBack()
    15. End Sub
    16. Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
    17. Label5.Text = MousePosition.X
    18. Label6.Text = MousePosition.Y
    19. End Sub
    20. Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
    21. If RadioButton1.Enabled = True Then
    22. Cursor = Cursors.Cross
    23. MsgBox("Um Waffe zu aktivieren auf den Feuer-Button klicken!")
    24. End If
    25. End Sub
    26. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    27. Tester = Tester + 1
    28. If PictureBox3.ImageLocation = "C:\Users\admin\Desktop\Riel Tool\Schiff1.png" Then
    29. Pbar = Pbar + 1
    30. Pbar2 = Pbar2 + 2
    31. ProgressBar1.Value = Pbar
    32. MsgBox("Getroffen")
    33. End If
    34. If Tester = 1 Then
    35. Button1.BackColor = Color.Green
    36. End If
    37. eins = Rnd() * (Me.Width - PictureBox3.Width)
    38. zwei = Rnd() * (Me.Height - PictureBox3.Height)
    39. If ProgressBar1.Value <> Pbar2 Then
    40. PictureBox3.Location = New Point(eins)
    41. PictureBox3.Location = New Point(zwei)
    42. End If
    43. End Sub
    44. Private Sub Button1_KeyDown(sender As Object, e As KeyEventArgs) Handles Button1.KeyDown
    45. If e.KeyCode = Keys.Q Then
    46. Button1.PerformClick()
    47. End If
    48. End Sub
    49. Private Sub PictureBox3_MouseEnter(sender As Object, e As EventArgs) Handles PictureBox3.MouseEnter
    50. If Cursor = Cursors.Cross Then
    51. PictureBox3.ImageLocation = "C:\Users\admin\Desktop\Riel Tool\Schiff1.png"
    52. End If
    53. End Sub
    54. Private Sub PictureBox3_MouseLeave(sender As Object, e As EventArgs) Handles PictureBox3.MouseLeave
    55. If Cursor = Cursors.Cross Then
    56. PictureBox3.ImageLocation = ""
    57. End If
    58. End Sub
    59. End Class


    Und die Lösung wäre, den geeigneten Point-Konstruktor zu verwenden:

    VB.NET-Quellcode

    1. 'statt
    2. PictureBox3.Location = New Point(eins)
    3. PictureBox3.Location = New Point(zwei)
    4. 'einfach so:
    5. PictureBox3.Location = New Point(eins, zwei)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @PollMan Willkommen im Forum. :thumbup:
    Schmeiß Deinen Code weg und fang völlig neu an.
    1. Option Strict On. Verwensde die Datentypen, wofür sie gedacht sind. Nicht aber: Zuweisung eines Integers zu einem String.
    2. Zufallszahlen:
      Wir wollen die .NET-Funktionalität verwenden, nicht aber VB6-Ranz.
      Ein Zufallszahlengenerator pro Form-Instanz genügt.
    3. MsgBox() ==> MessageBox.Show(...)
    4. Kennst Du die Funktionalität von (mehreren) RadioButton?
    5. Trenne Daten und GUI.
      Nicht fragen, welcher MousePointer dargestellt wird,
      nicht fragen, welches Bild dargestellt wird,
      nicht fragen, welchen Wert die Progeressbar hat,
      sondern fragen, welcher Anzeigezustand aktuell ist.
      Ändere den Anzeigezustand (Variavle des Typs Enum) entsprechend des Verlaufs und stelle entsprechend dieser Variable Bilder, Mousepointer und Progressbar dar.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Aber es funktioniert doch trozdem :) Welche vorteile hat es wenn ich es auf deine Art und weise machen würde?
    Ich bin schulisch bedingt von VB6 auf Visual Studio umgestiegen und "programmmiere" deshalb noch wie ich es von VB6 gewohnt war/bin.

    PollMan schrieb:

    von VB6 auf Visual Studio
    meinst Du von VB6 auf VB.NET?

    PollMan schrieb:

    Welche vorteile hat es
    Du bekommst qualifiziertere Hilfe hier im Forum
    und
    Mach es gleich richtig, vergiss alles, was Du in VB6 gelernt hast. Sorry.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!