[PreAlpha]Pathfinding_Bot to Player

    • Beta

    Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von enIking1998.

      [PreAlpha]Pathfinding_Bot to Player

      Hallo,
      ich stelle meine Pathfinding Bot_To Player-Klasse vor...
      Dieses ist, wie in der Kaption erkennbar, in der PreAlpha...

      Im Moment ist dieses mit einer Methode beschickt, des Pathfindings.
      Dieses wird sich doch im Laufe der Zeit ändern, und neues mit sich bringen.

      Die Klasse erlaubt es, ein NPC zu einem Spieler folgen zu lassen...
      Als
      Expression müssen die Spieler-Bot Rectangles,die Regionbereiche, die
      Positionen (X;Y) des Players und die Geschwindigkeit des Bot'es
      angegeben
      werden.

      Anwendung

      Nun folgt eine kurze Einleitung, dessen Beschreib, die Nutzung der Klasse ist.

      Zuallererst importieren wir die Namespace Imports PathfindingBot,

      VB.NET-Quellcode

      1. Option Strict On
      2. Imports PathfindingBot


      so nun das Initialisieren der Instanz der Klasse,mit dem New-Operator,

      VB.NET-Quellcode

      1. Dim PathFinding As New Pathfindig_Bot
      .


      Um diese Klasse zu verwenden, bedarft dieses an GDI-Objekten(Rectangles).
      Das heißt, KEINE PictureBoxen.

      GameLoop

      Um einen angenehm-fps-reiches "Spielerlebnis" zu gewährleisten, wird eine GameLoop benötigt!

      Die GameLoop ist die Loop-Schleife der Anwendung.
      Diese ordentlich und im Vergleich zu Timern, das 10-fache bessere, bietet sich perfekt.

      Zunächst wird ein globaler boolearischer Wert benötigt,

      VB.NET-Quellcode

      1. Dim GameRunning As Boolean = True
      .
      Nun zur GameLoop!

      VB.NET-Quellcode

      1. Private Sub GameLoop
      2. Do While GameRunning = True
      3. Application.DoEvents()
      4. 'Code
      5. Loop
      6. End Sub

      Die Application.DoEvents() bezweckt die Verarbeitung aller Aufgaben.

      Der Aufruf,

      VB.NET-Quellcode

      1. Private Sub Pathfinding__Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      2. Me.Focus()
      3. Me.Show()
      4. GameLoop
      5. End Sub
      .

      Jetzt ist die GameLoop geschafft!

      Deklarationen

      Nun zur Animation des Bot's.

      Es werden 2 globale Werte benötigt.

      VB.NET-Quellcode

      1. Dim PosBotX As Integer
      2. Dim PosBotY As Integer
      .

      Diese Variablen,wie der Name sagt, sind varriierend.

      Grafische Oberfläche

      Nun ist die grafische Oberfläche des Spieles an der Reihe.
      Dafür deklarieren wir Pseudo-Variablen, dessen Beschreibung, ein Rectangle ist.

      VB.NET-Quellcode

      1. Dim Recs(1) As Rectangle
      2. Dim Bereich(1) As Rectangle
      .

      Im Paint-Ereignis,

      VB.NET-Quellcode

      1. DoubleBuffered = True
      2. Recs(0) = New Rectangle(x:= 100, y:= 100, width:= 100, height:= 100
      3. Recs(1) = New Rectangle(x:= PosBotX, y:= PosBotY, width:= 100, height:= 100
      4. Bereich(0) = New Rectangle(x:=0, y:=0, Width:=4300, Height:=10)
      5. Bereich(1) = New Rectangle(x:=0, y:=540, Width:=4300, Height:=10)
      6. e.Graphics.FillRectangle(Brushes.Green, Recs(0))
      7. e.Graphics.FillRectangle(Brushes.Green, Recs(1))
      8. e.Graphics.FillRectangle(Brushes.Green, Bereich(0))
      9. e.Graphics.FillRectangle(Brushes.Green, Bereich(1))
      .

      Verwendung der Methode .Pathfinding

      Der GameLoop wird die Pathfinding-Methode zubeschickt:

      VB.NET-Quellcode

      1. Private Sub GameLoop
      2. Do While GameRunning = True
      3. Application.DoEvents()
      4. Application.DoEvents()
      5. x.Pathfinding(Recs(0), Recs(1), Bereich(1), Bereich(0), Recs(0).Location.X, Recs(0).Location.X, 11, 5)
      6. PosBotX = x.PosXBot
      7. PosBotY = x.PosYBot
      8. Me.Invalidate()
      9. Loop
      10. End Sub


      Das war's!

      Zusammenfassung

      VB.NET-Quellcode

      1. Option Strict On
      2. Imports PathfindingBot
      3. Public Class PathFinding_
      4. Dim PathFinding As New Pathfindig_Bot
      5. Dim GameRunning As Boolean = True
      6. Dim PosBotX As Integer
      7. Dim PosBotY As Integer
      8. Dim Recs(1) As Rectangle
      9. Dim Bereich(1) As Rectangle
      10. Private Sub GameLoop()
      11. Do While GameRunning = True
      12. Application.DoEvents()
      13. x.Pathfinding(Recs(0), Recs(1), Bereich(1), Bereich(0), Recs(0).Location.X, Recs(0).Location.X, 11, 5)
      14. PosBotX = x.PosXBot
      15. PosBotY = x.PosYBot
      16. Me.Invalidate()
      17. Loop
      18. End Sub
      19. Private Sub Pathfinding__Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      20. Me.Focus()
      21. Me.Show()
      22. GameLoop()
      23. End Sub
      24. Private Sub Pathfinding__Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
      25. DoubleBuffered = True
      26. Recs(0) = New Rectangle(x:= 100, y:= 100, width:= 100, height:= 100
      27. Recs(1) = New Rectangle(x:= PosBotX, y:= PosBotY, width:= 100, height:= 100
      28. Bereich(0) = New Rectangle(x:=0, y:=0, Width:=4300, Height:=10)
      29. Bereich(1) = New Rectangle(x:=0, y:=540, Width:=4300, Height:=10)
      30. e.Graphics.FillRectangle(Brushes.Green, Recs(0))
      31. e.Graphics.FillRectangle(Brushes.Green, Recs(1))
      32. e.Graphics.FillRectangle(Brushes.Green, Bereich(0))
      33. e.Graphics.FillRectangle(Brushes.Green, Bereich(1))
      34. End Sub
      35. End Class


      Der Screenshot befindet sich im Anhang, sowie der Download, und ein Beispielprojekt.

      Im Moment verfügbar,

      .Pathfinding

      Verwendete Programmiersprache und IDE:
      VB 2010

      Systemanforderungen:
      .NET Framework 2.0

      Download:
      Im Ahnhang.

      Lizenz/Weitergabe:
      Freeware.
      Closed Source...

      Mfg.eniking1998(14, ich stehe zu meinem Alter)
      Bilder
      • Screenshot.png

        14,48 kB, 836×232, 347 mal angesehen
      Dateien

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „enIking1998“ ()

      Naja, für eine PreAlpha ist es ok, allerdings würde ich es eher in den Sourcecode-Austausch reinmachen, da deine Library nicht wirklich brauchbar ist. Was willst du Beispielsweise mit den Variablen Bot_Width, Bot_Height, PosXBot und PosYBot? Die Benennung ist ziemlich unregelmäßig gestaltet und die genannten Werte könntest du genausogut in ein Rectangle packen. Außerdem blicke ich bei deinem Beispielprojekt nicht durch, was diese beiden Rectangles machen sollen. Zusätzlich würde ich dir eher raten, einen einfachen Pathfinding-Algorhytmus wie A* umzusetzen, das gibt sicher bessere Ergebnisse.
      Des Weiteren finde ich den String Schlüssel unnötig, er gibt ja auch nur "Coded by 3r0rXx/eniking1998" zurück und die Methode Pathfinding ist mit allein mt den Parametern so kompliziert, dass ich da nicht durchblicke :(.
      Ich würde dir empfehlen, das Konzept der Library komplett zu überarbeiten oder noch besser, das Projekt zu löschen und nochmal neu anzufangen.
      Danke für Deine konstruktive Kritik.

      Der Schlüssel zeigt mir, dass Du es dekompiliert hast, was kein Problem ist, nur wollte ich mein Nutzernamen eingetragen haben ^^+ .
      Die Klasse kann für Kleinigkeiten, zB eines kleinen Kampf-Spiel nützlich sein.

      PosXBot,PosYBot müssen abgegriffen werden, inwelches sie als neue Koordinate für das Rectangle_Bot sind.

      Weiteres sind die Parameter beschriftet und kommentiert was eigentlich kein Problem darstellen sollte, trotzdem werde ich es überarbeiten.

      Mfg.eniking1998
      Ich finde die Dll schonmal ganz nett aber ich sehe denn sinn dieser Dll nicht.
      warum machst du es nicht direkt Open-Souce ?
      so viel Quellcode kann es auch nicht sein da du momentan ja einfach ein paar if-verschachtelungen hast :)
      vieleicht wäre es noch ganz cool wenn du den A* Algorhytmus implementiert hast :) (da habe ich bei Suriva ganz schön lage gearbeitet :) )

      MFG BlackNetwokrBit
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Also unter dem was die Demo macht verstehe ich keine Wegfindung. Da sind zwei schwarze Teile ohne Hindernisse o.a. dazuwischen. Der eine steht einfach nur da und der andere bewegt sich komisch herum. Solange du nicht einen "ich habe ne Flasche Tequila auf ex gesoffen"-Modus eingebaut hast funktioniert das Teil nicht wirklich. Kann man den "Spieler" auch bewegen, sodass der Bot reagieren muss?


      Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

      Myrax schrieb:

      Wieso sollte man dann keine allgemeingültige Klasse oder Lib wie von FreakJNS benutzen? Oder noch besser: es selbst implementieren? Weil so groß ist der Aufwand nun doch nicht.


      Und selbst die würde ich heute schon nicht mehr empfehlen. War einer meiner ersten Versuche mit Interfaces usw zu arbeiten. Das könnte man sehr viel schöner programmieren (wenn ich Zeit und Gelegenheit habe werde ich das glaubich mal in Angriff nehmen).
      Hast du dir meinen Link überhaupt angesehen?
      Das sieht eher so aus, als würdest du genau diesem einen Block "Ausweichen" können und das auch nur, wenn du von Rechts auf ihn zukommst. Sieht mehr nach gescripteter (schreibt man das so? ;) ) szene" als nach Wegfindung aus.