Game Tutorial 2: NPC's Bei Dynamisher map

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von BlackNetworkBit.

    Game Tutorial 2: NPC's Bei Dynamisher map

    Game Tutorial 2: NPC's bei Dynamischer Map

    Wichtig Ihr Solltet das Game Tutorial 1 zu Kenntniss genomen haben, da dieses Tutorial darauf aufbaut. In diesem Möchte ich euch zeigen wie man einen NPC also eine Spielfigur mit einer "Künstlichen Intelegenz" auf der Map bewegen lässt.

    Zunächst wird für dieses vorhaben eine Klasse mit dem Namen NPC Benötigt. Diese Sollte folgende eigenschaften Beinhalten:

    • Name Als String
    • PosX als int
    • PosY als int
    • Width als int
    • Height als int
    • WalkAlgo als List<Point>
    • NowPoint als int
    Anhand dieser Klasse wird der NPC erstellt. Desweiteren Sollte euer Projekt über eine List<NPC> Name hier npcs, Besitzen. In diese Liste wird euer NPC eingefügt. Diese Sollte Global deklariert werden und im Load Ereigniss Initialisiert. ( Zum Erstellen des NPC habe ich ein VB Code Genommen da mein Spiel in VB geschrrieben ist und meine Engien in C# werde einen C# Code nachtragen).

    VB.NET-Quellcode

    1. Dim npc As New NPC
    2. ' WICHTIG DIE LISTE IN DER KLASSE HIER INITIALISIEREN
    3. npc.WalkAlgo = New List(Of Point)
    4. npc.Texture = My.Resources.Bunny
    5. npc.Name = "Test NPC"
    6. npc.StartX = 150
    7. npc.StyrtY = 250
    8. npc.Width = 64
    9. npc.Height = 64
    10. ' Hoch 50 Schritte
    11. npc.WalkAlgo.Add(New Point(npc.StartX, npc.StyrtY))
    12. For ig = 0 To 50
    13. npc.WalkAlgo.Add(New Point(npc.StartX, npc.StyrtY + ig))
    14. Next
    15. ' New X Und Y
    16. Dim nX1 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).X
    17. Dim ny1 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).Y
    18. ' Rechts 50 Schritte
    19. For ir = 0 To 50
    20. npc.WalkAlgo.Add(New Point(nX1 + ir, ny1))
    21. Next
    22. ' New X und Y
    23. Dim nX2 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).X
    24. Dim ny2 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).Y
    25. ' Nach unten 50 Schritte
    26. For iu = 0 To 50
    27. npc.WalkAlgo.Add(New Point(nX2, ny2 - iu))
    28. Next
    29. ' New X und Y
    30. Dim nX3 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).X
    31. Dim ny3 As Integer = npc.WalkAlgo.Item(npc.WalkAlgo.Count - 1).Y
    32. ' Nach Links 50 Schrítte
    33. For il = 0 To 50
    34. npc.WalkAlgo.Add(New Point(nX3 - il, ny3))
    35. Next
    36. npcs.add(npc)


    So nun fügen wir der List<NPC> einen npc anhand des Beispieles hinzu. Haben wir dies gemacht sollten wir in unserem Timer oder Gameloop einen neuen Thread Starten der den npc im Algorhytmus erhöht.

    C#-Quellcode

    1. public static void walk_npc()
    2. {
    3. // jeden NPC durchlaufen
    4. foreach (NPC item in Declaration.npcs)
    5. {
    6. // Den Point des erhöhen
    7. item.NowPoint += 1;
    8. // Wenn der Point größer als alle Points im Algorythuss ist soll er auf 0 gesetzt werden um den Algorythus neu zu Starten
    9. if (item.NowPoint >= item.WalkAlgo.Count) item.NowPoint = 0;
    10. }
    11. }



    So nun Fügen wir in unserem Paint event den Code hinzu der den NPC Zeichnet.

    C#-Quellcode

    1. foreach (NPC item in npcs)
    2. {
    3. e.DrawImage(item.Texture, item.WalkAlgo[item.NowPoint].X - OffsetX,item.WalkAlgo[item.NowPoint].Y - OffsetY,item.Width,item.Height);
    4. }


    wie wir Sehen wird jeder NPC an der NowPoint Stelle gezeichnet. So nun wenn wir aber die Welt versetzen müssen wir auch den NPC um den Offsetwert versetzen.

    Ich hoffe ich habe es verständlich rüber gebracht, grüße Andy[/quote]
    *Intelligenz,
    man kann sich ja 2. Sekunden die Zeit nehmen, es auf Rechtschreibfehler zu prüfen.
    Ich hab's überflogen und so schwer ist das nicht.
    Dafür ein Tutorial zu schreiben ist fraglich.
    Zumal du das in deinem ersten "Game Tutorial" nachtragen könntest, und du glaub ich dich mit KI nicht auseinandergesetzt hast.
    Das ist mehr oder weniger keine KI, sondern Positionen die du einfach mit Schleifen(auch fraglich => Performanz) inne Liste einträgst, die dann durchlaufen werden.

    Anfang einer unnötige Diskussion entfernt

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

    Leute, ernsthaft: keine Diskussionen mehr über C# und VB.NET, was besser ist, was schöner ist, und worauf ihr eher kommt. Das interessiert niemanden, und geht vollkommen an den Thread-Ideen vorbei. Ihr könnt das gerne, in dem EINEN Thread, der dafür irgendwann mal geöffnet wurde tun, oder per IM bequatschen - aber nicht hier! Und wenn das nochmal passiert, gibt es Verwarnungen, wegen massiven Spams! Nur weil ihr auf einen vorherigen Post antwortet antwortet ihr trotzdem nicht unbedingt passen für den Thread, beachtet das immer! @Trade: @RushDen: @NGE'o: @andi16832:
    Hallo @Andy16823
    Ich finde dieses tut ist sehr unausgereift und ich finde es auch sehr fraglich das ganze als KI bzw VI abzustempeln,
    da die NPC noch nicht mal eine intelligente Weg-Findung implementiert haben ;)

    Aber wenn du den Thread umbenenne würdest in z.b "Game Tutorial 2: NPC Bewegung" dann würde es schon mal halbwegs
    gehen aber ich sehe ehrlich gesagt auch nicht was das mit einer Dynamischen Map zu tuen hat ;)

    Fazit :
    Warte doch bitte das nächste mal bis du wirklich etwas vorzuzeigen hast. so musst du dir nicht immer die selben Sprüche anhören ;)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

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