Klassensystem(Eigenschaften etc.)

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Klassensystem(Eigenschaften etc.)

    Guten Tag,

    Aktuell Programmiere ich an einem kleinem Game. Nur steh ich vor einem ehr anderem Problem.
    Und zwar, ich suche eine Möglichkeit ein System zu entwickeln womit man eben Charackter Eigenschaften Zuweisen kann.
    Wie Stats/Fähigkeiten etc.

    Z.b Könnte man die Stats mit Enums Realisieren :

    VB.NET-Quellcode

    1. Public Enum char1
    2. ATK = 10
    3. DEF = 10
    4. SPD = 5
    5. End Enum


    Nun eine Frage an euch, wie könnte man das Eleganter lösen?!
    So das ich zum alles unter bekomme Fähigkeiten(+ Beschreibung), Stats.

    Gibt es da vllt ein Paar Ansätze von euch?
    (Ist Schwierig das zu Erklären)

    LG
    Hey,

    Wie genau soll ich das verstehen- Hast du schon eine Klasse?
    Oder geht es wirklich darum Daten wie z.B. "Krieger - Level 2 - Stärke 10 - Intelligenz 0 - Beweglichkeit 2" abzuspeichern? Oder doch, wie du selbst geschrieben hast, zuweisen?
    Weißt du was eine Klasse ist, ein Objekt? Wie sieht denn dein Charakter so bisher aus?

    Grüße,
    Drahuverar
    Option Strict On!
    Das Problem ich wollte es eben so Handhaben das man es nicht so Leicht manipulieren kann.


    @Drahuverar

    Nunja, ich wusste nicht genau wie ich Beschreiben sollte.
    Es sollen eben die Grundeigenschaften von dem Charackter dort gespeichert werden(vorhanden sein)

    LG
    Wie und wo du die Daten ausspeicherst ist die natürlich überlassen. Reden wir von einem Offline oder Online Spiel? Je nachdem würden ja deine "Speicher"-Möglichkeiten variieren.
    Wie schaut denn dein Charakter bisher aus? Hast du dir schon Gedanken darüber gemacht was dein Charakter überhaupt "machen darf" ? :D
    Option Strict On!
    Also ansich soll es Offline sein, im späteren verlauf kann man (muss aber nicht) ein Multiplayer benutzen um zu zweit gegen Monster zu Kämpfen.

    Naja Momentan, noch nichts, wollte mich da erst mal "Schlau" machen was man da so alles machen kann.

    Definiere mir "machen darf" :D
    Redest du von den Fähigkeiten, Stats etc?!

    LG
    Verstehe.

    Also was darf dein Charakter denn?
    Beispiel -> Er kann sterben .isDead (Charakter.isDead()).
    Hiermit könntest du schon deiner Charakter-Klasse sagen, dass dein Charakter gestorben ist.
    Wenn er gestorben ist folgt was? Deine Game-Engine müsste ja dann sowas bringen wie "Game Over - Dein Charakter hatte so und so viele Monster getötet"

    Es ist ziemlich schwer, wenn du noch nicht wirklich weißt was du willst. Am besten machst du dir ein paar Notizen und schaust was du so machen willst (oder machst schon ein Klassendiagramm..~).
    Auf dieser Basis könntest du eine Klasse erstellen.

    Um das abspeichern der Werte würde ich mir erst Gedanken machen, wenn es was zum sichern gäbe. ;)
    Option Strict On!
    Nunja, im Grundegenommen habe ich ja schon einen Groben plan.
    Der Charakter kann eig. nicht Sterben (im kampf sind meistens 4 Chars.) Wenn er Stirbt dann ist er sozusagen aus dem kampf raus.
    Kann aber dann wieder im Nächsten Kampf mit voller HP Wieder teilnehmen. (Ausser er wird durch eine Fähigkeit seiner anderen Chars. wiederbelebt)

    Falls er im Kampf fällt, regelt das der Code.
    Wie z.b if Char.HP = 0 then Char.KO end if

    So als Primitives beispiel.

    LG
    Angenommen alle 4 würden sterben, dann wären doch alle k.o.- somit wäre die gegnerische Meute siegreich, oder?
    Was ich sagen will ist folgendes; Über ein Event könnte man solche Sachen abdecken. Wenn 4 mal 'isDead' eintritt könnte dein Event das Spiel beenden indem du ein Game Over einblendest ~~
    !soll nun auch nur ein Beispiel sein, anders könnte ich es gerade nicht besser erklären, da ich nicht genau weiß wie es letzten Endes aussieht.!

    Wenn du Char(0).HP, Char.(1).HP, Char(2).HP, Char(3).HP etc überprüfen musst und dann immer wieder die jeweiligen Stats der Chars.. dann sehe ich das "größeren und umständlicheren Programmieraufwand " und du bist im nachhinein nicht flexibel genug, falls du was ändern möchtest. Wenn dein Gerüst einmal steht wird es dir später evtl. kein Spaß machen Anpassungen vorzunehmen.
    Aber wayne, das ist nun etwas zu weit ausgenommen. :D

    Ich werde heute nicht zu einem Beispiel mehr kommen, leider, ansonsten hätte ich dir mal ein kleines Pseudo-Klassenbeispiel gemacht mit abspeichern und einlesen.
    Aber letzten Endes wirst du nicht um eine eigene Klasse herumkommen. Gute Beispiele, finde ich, sind immer noch Klassen wie "Cars"- du hast ein Auto, dieses Auto ist von einem Bestimmten Hersteller, kann eine Farbe haben, kann so und so sein,... Falls du zum googlen kommst würde ich das als Anhaltspunkt nehmen- oder zuerst im Forum mal schauen.

    Grüße,
    Drahuverar
    Option Strict On!
    Ich hätte das ganze so Probiert, einfach immer wenn ein Chars stirbt, lass ich es Überprüfen ob noch ein weiteres Mitglied lebt, wenn nicht dann wird Game Over angezeigt, die Überprüfung würde dann über die HP ablaufen wie Char.HP = 0 Char2.HP = 0

    Ich habe eben vor, ein Grundgerüst zu erstellen mit den Grunddaten der Charakter wie Attacke,Verteidigung, Art.
    Später kann man sie mit Runen Verbessern, das kann man ja wie CaddyM schon sagte in XML Speichern und Verschlüsseln.
    Damit man diese nicht so leicht Manipulieren lässt.

    Weil, was im Programm verankert ist, ist zwar nicht "Sicher" aber zumindestens nicht von unerfahrenen Manipulierbar, natürlich kann man jeden Schutz/Verschlüsselung umgehen aber das sei einmal dahingestellt.

    @Drahuverar

    Ich Bedanke mich jetzt schon einmal für deine bemühungen.
    LG
    Betrachte es mal von einer anderen Seite:
    Immer mehr Spiele bieten "Mod-Support" wodurch letztendlich Items in ein Spiel gebracht werden können, die einen Spieler unbesiegbar machen können. Für andere wiederum gibt es Save-File Editoren, teils von den Entwicklern selbst geschrieben, gerade damit die Spieler freie hand in dem haben was sie tun (oder eine korrupte Save-Datei dank nem Bug in ner Quest wieder flott machen können)

    Bestes Beispiel hierfür sind wohl die Bethesda games wie Oblivion, Skyrim oder Fallout. Hier kann man so gut wie alles am Spiel verändern. Oder GTA, wo man z.B. alle Autos durch eine "kleine" Änderung in ner .INI Datei dazu bringen kann völlig unkontrollierbar über die Straßen zu Rauschen, in Wände und andere Fahrzeuge zu krachen, und sogar durch die Luft zu fliegen.

    Lass doch dem User den Spaß. Wenn er meint mit Stats im drölfzillionenbereich Kämpfen zu müssen, lass ihn doch einfach. Das macht einmal Spaß, vielleicht auch 2 mal, aber dann nicht mehr.

    Viel wichtiger ist es, dass du dein Programm dazu bringst mit allem arbeiten zu können, was in dem Save-File stehen könnte.

    Edit: dazu kommt, dass du doch ganz genau weißt, wie hoch die Stats maximal sein können. Du kennst alle Items die ein Spieler erlangen kann. Sobald also diese Höchtgrenzen überschritten worden sind, kannst du das dem Spieler deutlich machen.
    Ich würde mir erst mal Gedanken machen (wie Drahuverar schon angemerkt hat) und das ganze irgendwo niederschreiben. Daraus ergeben sich dann einfach schon viele Sachen für z.B. die Klasse "Character" - da gäbe es dann Attribute wie Stärke, Int, Charisma, Hitpoints etc. und ein paar Statuswerte und Fertigkeiten (wobei Fertigkeiten / Talente schon wieder eine eigene Klasse sein könnte) . Dann könnte man theoretisch darüber nachdenken, wie sie Gegner dargestellt werden - sind ja vielleicht auch eine Art von "Character", womit wir dann bei Vererbung wären usw.

    Das so "ad hoc" aus dem Kopf zu machen halte ich kaum für durchfühbar bzw. es wird dich nicht zu befriedigenden ergebnissen führen, weil du immer wieder feststellen wirst, dass das, was du gerade aus einer Idee zusammenprogrammiert hast, sich eigentlich an einer anderen Stelle gegen andere Ideen wendet :S
    Jou,.. Perfektes Beispiel ist für mich immer Tetris.
    Da habe ich unter anderem folgendes: Mein Spielfeld, Blöcke (verschiedene Arte an Block-Typen), ich kann die Blöcke drehen und bewegen, habe eine Startposition, wenn eine Reihe gefüllt ist sollte diese verschwinden, sollte der Block außerhalb meines Spielfelds sein ist das Spiel vorüber- 'was passiert wenn mein Block mit einem anderen kollidiert?',...und was weiß ich noch. Das sollte von Anfang an schon klar sein, denn dann kann man "schnell" etwas zusammenbauen. :)
    Option Strict On!