Anfängerfrage: ist mein Vorgehen richtig?
-
Moin,
hab zwar im Moment noch kein Buch zur Spieleprogrammierung(sry total Pleite) hab aber trotzdem schon mit der Programmierung der Klassen angefangen.
[edit]gelöscht[/edit]
Jetzt wollte ich dem human_Player einWarrior Kreiger[200];
geben,
jedes der Elemente in diesem Array soll dann als jeweiliger Soldatentyp initialisiert erden.
Um herauszufinden welches Element frei ist will ich
[edit]auch gelöscht[/edit] verwenden.Ist das soweit gut oder möglich???
thx
Glamdringp.s. Nachn paar Antworten lösch ich das Zeug oben wieder(aus dem Forum)[edit]is schon geschehen[/edit]
-
Hi!
Also ich glaub' nicht, daß Dir da jemand 'ne exakte Antwort geben kann...
Das kommt ja ganz auf Dich (Dein Team?) an.
Beim Überfliegen sieht es ganz gut aus.
Aber es muß sich halt design-technisch ohne Aufwand in den Rest Deiner Applikation einfügen lassen. Das Game besteht ja nicht nur aus den paar Klassen.
Da liegen die kritischsten Designfehler.
Mußt Du halt schauen.
Und wenn Dir irgendeine Ungereimtheit auffällt: Direkt drum kümmern, notfalls das ganze Framework überarbeiten. Das verhält sich nämlich wie ein DumDum-Geschoß. Am Anfang mag es nur ein kleines Löchlein sein... aber nachher reißt's Dir alles auseinander...! Lieber einige Teile nochmal komplett neu programmieren, als (angeblich) kleine Fehlerchen ewig mit Dir schleppen.Zum Durchsuchen nach freien Plätzen:
Du könntest einfach dafür sorgen, daß IMMER der letzte Index (d.h. Anzahl der Kämpfer) frei ist, indem Du beim Löschen eines Kämpfers den letzten Kämpfer auf den aktuellen (gelöschten) verschiebst.
Dann brauchst Du nicht jedes Mal das komplette Array zu durchforsten.C ya.
-
also ich würde alle Klassen wie Pegasus, Bogenschütze und so, von einer Basisklasse ableiten
Da hast du dann einen Überblick und musst nicht alles neu implementieren sondern nur die Funktionen hinzufügen, die du für die Klasse brauchst
-
Klassennamen, wie "MdD", "WF" oder auch "W" sind übrigens nach einer Woche nicht mehr sehr aussagekräftig. Gleiches gilt für Variablennamen wie "dmgb", ... !
Wenn das Projekt etwas größer werden soll, dann empfehle ich dir, auf aussagekräftige Namen zu achten. Das ist ja auch nicht unbedingt mehr Tipparbeit, da heutige IDEs entsprechende Funktionen haben, die soetwas automatisch vervollständigen.
-
Hauptmann: Das hatte ich auch vor, deshalb hab ich Warrior erstellt, alle Klassen werden von Warrior erben, sodass ich jedesmal Warrior als Typ benutzen kann.
Sgt. Nukem: Ja, das geht schneller und spart Ressourcen. Aber das Game besteht bisher aus ein paar Klassen, denn
[quote=Glamdring]im Moment noch kein Buch zur Spieleprogrammierung(sry total Pleite) [/quote].thx
Glamdring
-
du brauchst ja auch keine Bücher
auf www.gamedev.net gibt es mehr als genug Artikel
zum bei spiel sei auch www.gamasutra.com genannt(du musst dich aber zuerst kostenlos regestrieren; )
oder auch wwww.flipcode.com
-
DAnke für die Links werds mir mal ansehen.
Gregor: Ich hab mir ne Liste mit Attributen, Funktionen und Klassennmaen sowie Erklärungen erstellt um mir Tipparbeit zu ersparen, denn meine IDE unterstütz scheinbar nichts dergleichen (oder ich hab keine Ahnung davon, was eigentlich immer stimmt)
Gruß
Glamdring
-
Eine pragmatische Antwort könnte sein, dein Vorgehen ist richtig, wenn es den gewünschten Erfolg erzielt.
-
TGGC schrieb:
Eine pragmatische Antwort könnte sein, dein Vorgehen ist richtig, wenn es den gewünschten Erfolg erzielt.
ergo ist mein Vorgehen (pragmatisch) beschissen, weil es überhaupt nichts bringt, weil Klassen alleine nie etwas bringen können???
Glamdring
-
wtf
naja, ein paar Tipps von mir
1. größere Implementierung gehören nicht in den Header (außer bei Templates)
2. (wie Gregor bereits gesagt hat) Bezeichner wie W etc. sind schlecht, benutz vernünftige Namen
3. Member Variablen sollten nicht public sein
4. solltest du bei Klassen und Strukturen lieber Übergabe per Referenz bevorzugen gegenüber Call-by-Value
5. musst du nicht an jedes if ein else hängen
6. solltest du dir bevor du in die Spiele Programmierung einsteigst noch einiges über C++ lernen. Lies erstmal das:http://www.schornboeck.net/ckurs/index.htm
http://www.volkard.de/vcppkold/inhalt.html
http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
-
zu1 : Wie du schon richtig mitbekommen hast kenn ich C++ nicht sonderlich gut (ist aber in Arbeit), daher weiss ich nicht was ein Template ist, aber zu meiner Rechtvertigung hab ich zu sagen: "Irgendwie muss ichs importieren".
zu2: Wie ich Gregor bereits gesagt hab sind alle Variablennamen in einer Liste vereinbart
zu3:Hä??
zu4:Call by Value??
zu5: stimmt
zu6:hast absolut Recht, saug mir alles
Gruß Glamdring
-
Mir sind noch zwei Fragen eingefallen:
1. Upgrades: Ich möchte Upgrades möglich machen, die alle bisher gebauten Instanzen einer Klasse, und die Instanzen, die noch gebaut werden in ihren Werten verändern, sodass sie in irgendeinerweise stärker, schneller usw. werden. Wie kann ich die Klassen (vorübergehend) verändern???
2. DX9: Kennt jemand gute (am besten dt.) Tutorials (mit denen, die bei DX dabei sind kann ich nichts anfangen, da sie [bei mir] net funktionieren).
thx
Glamdring
-
Also wenn du nur die Attribute einer Instanz einer Klasse ändern möchtest, kann die Klasse bleiben wie sie ist. Vielleicht würde es helfen, noch etwas allgemein (C++) Programmierung zu lernen bevor du in komplexe Gebiete vordringst.
-
Zu den Büchern:
Ich hab jetzt C/C++ von Ulrich Kaiser gelesen und werde mir "Die C++ Programmiersprache" von Bjarne Stroustrup kaufen, ich hoffe das reicht.Zu den Instanzen:
Dann müsste ich ja mit einer while(1) oder for(;;) Schleife nach neuen Instanzen suchen, n bisschen aufwendig!
Gruß
Glamdring
-
Glamdring schrieb:
Zu den Büchern:
Ich hab jetzt C/C++ von Ulrich Kaiser gelesen und werde mir "Die C++ Programmiersprache" von Bjarne Stroustrup kaufen, ich hoffe das reicht."effektiv c++ programmieren" muß vor "die c++ programmiersprache". erst den sinn lernen, bevor du das handwerkszeug vervollständigst. sonnst nimmste die zange, um schrauben einzuhämmern.
-
Sgt. Nukem, dein Vorschlag mit dem Array klinkt gut, nur leider verstehe ich ihn nicht ganz. Wenn man ein neues Element einfügt, dann wird der letzte Platz belegt und beim nächsten Einfügen muss man dann wieder suchen. Was soll das also bringen?
-
Wieso muß man dann wieder suchen!?
Wenn man aus einem 20-großen Array an Stelle 10 was löscht, dann an Stelle 4, muß man beim nächsten Einfügen die nächste freie Stelle wieder suchen:
1 frei? -> NEIN -> 2 frei? -> NEIN -> 3 frei? -> NEIN -> 4 frei? -> JUP! - Einfügen!
Wenn man aber, sobald man 10 löscht, den letzten Eintrag (20) in 10 reinkopiert, und beim Löschen von 4 den letzten (19) in 4 reinkopiert, weiß man genau, daß - wenn überhaupt - an der letzten Stelle (jetzt 18) eine freie Position ist. Ohne zu suchen.
-
@ Volkard: Meine konkete Liste beinhaltet:
- Direct X gepackt
- 3D Grafikprogrammierung
-Spieleprogrammierung Gems 1
- Computerspiele
- C/C++ gepackt
- Game Programming für Dummies
- JLI Direct X9 und Visual C++
- Visual C++ 6 (bhv)
- Spiele Programmierung
- Spieleprogrammierung in C++
- Effektiv C++
- Mehr Effektiv C++
- Go To COM
- Visual C++