Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

21

05.02.2010, 16:03

du warst doch an der uni oder? hasu da nicht gelernt, dass man meistens teile einer zu großen klasse auslagern kann?
für jede deiner listen in deiner Gameklasse(hab nur das uml diagram gesehen) kannst du eine eigene klasse schreiben die alles verwaltet und die man nur per update/draw bzw. render aufrufen muss.
das war das erste was ich gemacht habe als ich zu meinem aktuellen projekt hinzugestoßen bin. vorher hatten wir eine 500zeilen große game.cpp. jetzt ist sie 150zeilen lang und es macht wieder spass am code zu arbeiten.^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

22

05.02.2010, 21:23

@nachoman:
natürlich habe ich das gelernt, aber fand keine meiner klassen jetzt eigentlich übertrieben groß.


habe jetzt heut, dank davi_pb, einiges wieder über const und referenzen nachgelesen und dementsprechend den code umgebaut/neu geschrieben.
an sich bin ich mit dem neuen "design" jetzt zufriedener und werde mir dann wohl noch ne eigene unit/item/npc/terrainfactory klasse machen, die die entsprechenden klassen verwaltet, sprich laden/entfernen/zeichnen/suchen(/später sortieren).


rauseditiert...

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

23

05.02.2010, 22:22

C-/C++-Quelltext

1
NPC* const CreateNPC( NPC_ID iNPCID );

gibt einen konstanten zeiger auf ein nicht konstantes objekt zurück.
richtig wäre:

C-/C++-Quelltext

1
const NPC& CreateNPC( NPC_ID iNPCID ); 

oder wenn du unbedingt mit zeigern arbeiten willst:

C-/C++-Quelltext

1
const NPC* CreateNPC( NPC_ID iNPCID );

bzw. das für einen konstanten zeiger auf ein konstantes objekt:

C-/C++-Quelltext

1
const NPC* const CreateNPC( NPC_ID iNPCID );
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

24

05.02.2010, 23:20

glaube ich nicht. ich will ja auf die methoden der klasse zugreifen können, was mit const p* const name nicht geht.

25

06.02.2010, 10:40

Zitat von »"Draculark"«

glaube ich nicht. ich will ja auf die methoden der klasse zugreifen können, was mit const p* const name nicht geht.


Doch es geht schon, aber nur auf 'const' Methoden, was ja der eigentliche Sinn von 'const' ist. Du willst ja verhindern das ein Objekt unbeabsichtigt oder dort wo du nicht willst verändert wird.

So wie es zurzeit ist verhinderst du ja nur das der Zeiger geändert wird und nicht das Objekt.
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

26

06.02.2010, 12:49

Zitat von »"_Tom_"«


So wie es zurzeit ist verhinderst du ja nur das der Zeiger geändert wird und nicht das Objekt.


das will ich aber derzeit eh so haben, weil ich noch ned 100% weiß, was ich später von außen änderbar haben will und ob ich vl manche funktionen rausschmeiße/umändere.
probleme krig ich auch, weil ich ja in der gameklasse Hero* _hero habe, der auf den held eben verweist. bei const Hero* const h als rückgabewert müsste ich den pointer bereits im konstruktor zuweisen, was bei meinem aufbau mit Init/Quit methoden derzeit nicht funktionieren würde(?).



ansonsten:
habe mal die neue quellcode version angehängt.
dabei wurde folgendes geändert/erweitert:
  • "dynamische" spielobjekte erben jetzt von der klasse handle, die eine handleid besitzt um objekte unterscheiden zu können. z.b. könnte man ja später einmal 5 gegner vom typa erstellen wollen und um diese unterscheiden zu können, genügt es ja nicht nur die einheiten_id (gegnertyp) zu wissen, sondern eben auch die handleid des objektes quasi.
    dies gilt derzeit für items/npcs/units/heroes, die beim erstellen jeweils eine einzigartige id zugewiesen bekommen
  • großteils der game klasse, die sich auf objektspezifische dinge bezogen ausgelagert.
    dazu habe ich jetzt eine unit/npc/item/terrainfactory klasse, die mit der jeweiligen "logik" für diese klassen ausgestattet sind.
    grundsätzlich besitzt jetzt factory eine methode zum erstellen,"suchen" und aufräumen. je nach factorytyp gibt es dann noch weitere methoden.
  • instanzduplikate glaub ich soweit komplett beseitigt. jetzt sollte nur mehr 1 objekt erstellt werden (auch bei anderen funktionsaufrufen) und nicht mehrere kopien herumschwirren.
  • hoffentlich etwas sinnigere/bessere const parameter/rückgabewerte ;)
  • die im ersten post stehenden erweiterungen sind ebenfalls drin
  • theoretisch kann man jetzt auch schon einheiten/npcs auf anderen karten erstellen, die dann quasi vorgeladen werden und beim betreten der karte dann dargestellt werden.


hoffe das ist jetzt etwas besser (auch wenns noch nicht 100% fertig ist. teils stimmen kommentare noch nicht und habe jetzt nur darauf geachtet, dass es wieder soweit spielbar ist wie mit dem alten code).

danke v.a. an das feedback von david(auch wenn du wohl meinst, dass ich keinen wert darauf lege) und an nachoman.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

27

06.02.2010, 14:00

Zitat von »"Draculark"«


[*] "dynamische" spielobjekte erben jetzt von der klasse handle, die eine handleid besitzt um objekte unterscheiden zu können. z.b. könnte man ja später einmal 5 gegner vom typa erstellen wollen und um diese unterscheiden zu können, genügt es ja nicht nur die einheiten_id (gegnertyp) zu wissen, sondern eben auch die handleid des objektes quasi.
dies gilt derzeit für items/npcs/units/heroes, die beim erstellen jeweils eine einzigartige id zugewiesen bekommen


Zu dem Punkt noch eine Anmerkung: Meinst du das eine is a Beziehung hier wirklich richtig ist? Für mich hört sich das eher nach einer Komposition an.

Ansonsten nochmals: Ich find das Projekt super! Und auch das du versuchst auf Vorschläge einzugehen. Viel Spaß noch! ;)

28

14.02.2010, 11:39

Update:
  • texte kann man jetzt ohne wartezeit mittels BACKSPACE anzeigen lassen. dadurch wird die wartezeit zwischen den characters für eine "bildschirmlänge" auf 0 gesetzt.
  • das "flackern" zwischen dem equippmentchangewindow und handelsfenster wurde gefixed
  • im kaufmenü kann man jetzt bei item0 auch nach oben gehen um sofort zum punkt abbrechen zu gelangen und umgekehrt.
  • gegenstand wechseln bildschirm ist jetzt besser formatiert. weiters sieht man jetzt auf einen blick, ob der neue gegenstand besser/schlechter ist, in dem der wert rot(schlechter),weiß(gleich) oder grün(besser) angezeigt wird.
  • in der heldeninformation wird der itembonus jetzt korrekt zu den heldenwerten hinzugezählt. 12 (+5) heißt z.b., dass der held 7 schaden austeilt und 5 zustzälichen schaden durch gegenstände = 12 schaden insgesamt.
  • auf der karte befinden sich jetzt gegner, die bei kollision einen kampf auslösen (kampf ist noch nicht implementiert. wird wohl für die nächste version ein simples zuschlagen werden.)
  • Die erste Quest ist fertig. Sprecht mit dem Blumenmädchen im Dorf (durch ein B gekennzeichnet). Ebenso wurden der Älteste, Schmied und Händler etwas "erweitert". Man muss jetzt zuerst mit dem Ältesten reden, bevor Schmied und Händler ihre Waren anbieten.


Ebenso ersten post editiert und die neuen downloads angehängt, sowie ein aktuelles Klassendiagramm (es fehlen teils noch die Beziehungen, aber die Ordnung sollte erkennbar sein).



Werde jetzt dann als nächstes ein einfaches Kampfsystem einbauen sowieso die restlichen NPC/Quest/Rewardscripte fertigstellen.


Danke v.a. an dot und intripoon, die mir im irc gut weitergeholfen haben ;)

idontknow

unregistriert

29

14.02.2010, 12:05

Zitat von »"David_pb"«


Zu dem Punkt noch eine Anmerkung: Meinst du das eine is a Beziehung hier wirklich richtig ist? Für mich hört sich das eher nach einer Komposition an.


hmm. Schwierige Frage :P.

Bin aber auch zu der Überegung gekommen, dass eine Komposition hier "richtiger" wäre. musste aber auch eine Weile überlegen. Wobei imho Vererbung auch eine gute Lößung iost. Hast du gute Argumente für ne Kompoisiton bzw gegen eine Vererbung? :).
Muss das in der Schule durchnehmen von daher interessiert es mich gerade. Einerseits ist ja jedes Objekt gleichzeitig ein Handle, andererseits exestiert zu jedem Objekt auch 1 Handle x/^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

30

14.02.2010, 12:47

Zitat von »"idontknow"«

Zitat von »"David_pb"«


Zu dem Punkt noch eine Anmerkung: Meinst du das eine is a Beziehung hier wirklich richtig ist? Für mich hört sich das eher nach einer Komposition an.


hmm. Schwierige Frage :P.

Bin aber auch zu der Überegung gekommen, dass eine Komposition hier "richtiger" wäre. musste aber auch eine Weile überlegen. Wobei imho Vererbung auch eine gute Lößung iost. Hast du gute Argumente für ne Kompoisiton bzw gegen eine Vererbung? :).
Muss das in der Schule durchnehmen von daher interessiert es mich gerade. Einerseits ist ja jedes Objekt gleichzeitig ein Handle, andererseits exestiert zu jedem Objekt auch 1 Handle x/^^


"Spielobjekte" sind keine Handle. Das ist nicht nur ein semantischer Nachteil:

o Klasse ist physikalische Repräsentation der Unterklasse.
o Vererbung bricht die Kapselung auf. Also vermeiden wenns geht.
o Vererbung bindet stark. Also vermeiden wenns geht.

Aber auch semantisch Unsinn.

Werbeanzeige