Kampfsystem

  • Allgemein

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Kampfsystem

    Guten Tag,
    Ich möchte ein bestimmtes Kampfsystem bei einem Spiel benutzen, undzwar möchte ich wenn zb. "50" Angriffspunkte hat und der Gegner "40" Abwehrpunkte, der Verteidiger "10" Lebenspunkte verliert. Die Anzahl der Punkte + die Lebenspunkte werden mit Label angezeigt.

    Weiß jemand wie ich das hinkriege?
    Dazu wäre es noch schön wenn mir Jemand sagen kann wie ich z.B. Wenn ich das Spiel starte und in eine TextBox etwas schreibe, dies speichern kann, dass dies bei schließung und öffnung des Programms wieder Angezeigt wird.

    LG
    Willkommen im Forum. :thumbup:
    Mit dem Addieren und Subtrahieren von Punkten ist das so eine Sache.
    Bau da Tests drumherum, die dafür sorgen, dass keine unsinnigen Resultate rauskommen, z.B. negative Lebenspunkte und so.
    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!

    Mirishi schrieb:

    könnte mal jmd einen bsp. Code reinstellen
    Zeig Deinen Code und wir rücken ihn gerade.
    Und:
    Bevor Du ihn postest, gib Deinem Projekt Option Strict On und korrigiere die Fehler.
    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!
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    HP = Hauptmenü.HPWert.Text
    ANG = Hauptmenü.ANGWert.Text
    VER = Hauptmenü.VERWert.Text
    HPEinfach = Me.HPWertEinfach.Text
    ANGEinfach = Me.ANGWertEinfach.Text
    VEREinfach = Me.VERWertEinfach.Text

    If Val(Hauptmenü.ANGWert) > Val(VERWertEinfach) Then Sieglabel.Text = "Sieg"

    Und wenn ich auf den Button drücke stürzt es ab und es kommt: Eine Ausnahme (erste Chance) des Typs "System.ArgumentException" ist in Microsoft.VisualBasic.dll aufgetreten.
    Als erstes Rechne mit Integer und Option Strict ON
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Löse das am besten objektorientiert. Das ist am einfachsten, finde ich.
    Mach dir also eine Klasse "Player"

    VB.NET-Quellcode

    1. Public Class Player
    2. ''' <summary>
    3. ''' Die Lebenspunkte des Spielers
    4. ''' </summary>
    5. Public Property Lebenspunkte As Integer
    6. ''' <summary>
    7. ''' Die Angriffspunkte des Spielers
    8. ''' </summary>
    9. Public Property Angriffspunkte As Integer
    10. ''' <summary>
    11. ''' Die Verteidigungspunkte des Spielers
    12. ''' </summary>
    13. Public Property Verteidigungspunkte As Integer
    14. ''' <summary>
    15. ''' Werte zuweisen
    16. ''' </summary>
    17. ''' <param name="l">Die Lebenspunkte</param>
    18. ''' <param name="a">Die Angriffspunkte</param>
    19. ''' <param name="v">Die Verteidigungspunkte</param>
    20. ''' <remarks></remarks>
    21. Sub New(ByVal l As Integer, ByVal a As Integer, ByVal v As Integer)
    22. Lebenspunkte = l
    23. Angriffspunkte = a
    24. Verteidigungspunkte = v
    25. End Sub
    26. ''' <summary>
    27. ''' Spieler greift anderen Spieler an
    28. ''' </summary>
    29. ''' <param name="p">Ein anderer Spieler</param>
    30. ''' <remarks></remarks>
    31. Public Sub Attack(ByVal p As Player)
    32. If p.Lebenspunkte <= Me.Angriffspunkte Then
    33. p.Lebenspunkte = 0
    34. Else
    35. p.Lebenspunkte = p.Lebenspunkte - Me.Angriffspunkte
    36. End If
    37. End Sub
    38. End Class


    Nur mit dem angreifen musst du mal schauen, ob da nicht ein Rückgabewert sinnvoll wäre.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim p1 As New Player(100, 100, 100)
    5. Dim p2 As New Player(50, 100, 100)
    6. p1.Attack(p2)
    7. If p2.Lebenspunkte = 0 Then
    8. MessageBox.Show("Spieler2 ist tot")
    9. End If
    10. End Sub
    11. End Class

    @Mirishi
    Hier noch ein bisschen verbessert, weil ich gut drauf bin :)
    Player

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Player
    3. Private _Lebenspunkte As Integer
    4. ''' <summary>
    5. ''' Die Lebenspunkte des Spielers
    6. ''' </summary>
    7. Public Property Lebenspunkte As Integer
    8. Get
    9. Return _Lebenspunkte
    10. End Get
    11. Set(ByVal value As Integer)
    12. _Lebenspunkte = value
    13. RaiseEvent GotHurt()
    14. End Set
    15. End Property
    16. ''' <summary>
    17. ''' Die Angriffspunkte des Spielers
    18. ''' </summary>
    19. Public Property Angriffspunkte As Integer
    20. ''' <summary>
    21. ''' Die Verteidigungspunkte des Spielers
    22. ''' </summary>
    23. Public Property Verteidigungspunkte As Integer
    24. ''' <summary>
    25. ''' Event das ausgelöst wird, wenn der Spieler verletzt wird
    26. ''' </summary>
    27. ''' <remarks></remarks>
    28. Public Event GotHurt()
    29. ''' <summary>
    30. ''' Werte zuweisen
    31. ''' </summary>
    32. ''' <param name="l">Die Lebenspunkte</param>
    33. ''' <param name="a">Die Angriffspunkte</param>
    34. ''' <param name="v">Die Verteidigungspunkte</param>
    35. ''' <remarks></remarks>
    36. Sub New(ByVal l As Integer, ByVal a As Integer, ByVal v As Integer)
    37. Lebenspunkte = l
    38. Angriffspunkte = a
    39. Verteidigungspunkte = v
    40. End Sub
    41. ''' <summary>
    42. ''' Spieler greift anderen Spieler an
    43. ''' </summary>
    44. ''' <param name="p">Ein anderer Spieler</param>
    45. ''' <remarks></remarks>
    46. Public Sub Attack(ByVal p As Player)
    47. If p.Lebenspunkte + p.Verteidigungspunkte < Me.Angriffspunkte Then
    48. p.Lebenspunkte = 0
    49. Else
    50. p.Lebenspunkte = p.Lebenspunkte + p.Verteidigungspunkte - Me.Angriffspunkte
    51. End If
    52. End Sub
    53. End Class
    Form

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. WithEvents p2 As New Player(100, 100, 55) 'Withevents Instanz eines Spielers
    4. Public p1 As New Player(100, 100, 49) 'Normale Instanz
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. player1progress.Maximum = p1.Lebenspunkte 'Progressbar das Maximum der Lebenszahl zuweisen
    7. player2progress.Maximum = p2.Lebenspunkte
    8. End Sub
    9. Private Sub p2_GotHurt() Handles p2.GotHurt 'Wird ausgelöst wenn Spieler 2 verletzt wird
    10. If p2.Lebenspunkte <= 0 Then 'Wenn die Lebenspunkte 0 sind dann
    11. MessageBox.Show("Ich bin gefallen !")
    12. Else 'sonst
    13. MessageBox.Show("Ich wurde verletzt !")
    14. End If
    15. End Sub
    16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    17. p1.Attack(p2) 'Schaden hinzufügen
    18. player1progress.Value = p1.Lebenspunkte 'Progressbars Werte zuweisen
    19. player2progress.Value = p2.Lebenspunkte
    20. End Sub
    21. End Class


    Edit: Oh ich war ja der letzte Poster, bitte Posts zusammenfügen.
    Edit by der_kurt: Done ;-)

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

    @Mirishi: Bevor Du hier loscodest und die Snippets von n Leuten kopierst und nicht verstehst, mach doch erst mal einen Plan.
    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!