Fragen zu Textadventure(Übergabe von Variablen,Auswahlmenü)
-
Hi, ich bin gerade dabei ein Textadventure zu programmiern (mehr ist nach einem Volkshochschulkurs noch nicht drin) und habe jetzt 2 Fragen.
I) Von meiner Mainfunktion aus wird die Funktion Kampf gestartet, folglich übergebe ich diverse Variablen an die neue Funktion, allerdings muss ich diese Variablen sobald die Funktion Kampf abgearbeitet wurde wieder an Main zurückliefern(da neue Werte berrechnet wurden), aber ich weiß nicht wie das funktioniert.
zurückgeliefert werden sollte zb: double ahp7->double User.ahp
II)Ich möchte ein Auswahlmenü programmieren wodurch man nur durch Cursorbewegung Befehle ausführen kann, da es für mich und den Benutzer auf Dauer ziemlich umständlich ist immer auf „Gib 1 für xy und 2 für xyz ein“ zurückgreifen zu müssen.
Schonmal vielen Dank.
//Funktion Kampf double Kampf(double mhpg7, double ahpg7, double mmpg7, double ampg7, int bsg7, int bsmg7, int etwog7, int rkg7, double expgain7,int menschenbesiegt, int tierebesiegt, int extraterrabesiegt, int untotebesiegt, int jedibesiegt, int droidenbesiegt,double mhp7,double ahp7,double mmp7,double amp7,int bs7,int bsm7,int etwo7,int rk7,int stimpak7,int gstimpak7,int manapak7, double experience7, int kampfwin7, int kampflose7) { for(int i=0;i<2;) { cout<<"--------------------------------"<<endl; cout<<"Lebenspunkte: "<<ahp7<<" von "<<mhp7<<" / Manapunkte: "<<amp7<<" von "<<mmp7<<endl; cout<<"--------------------------------"<<endl; cout<<"Der Gegner greift dich an!"<<endl; //prüfung ob gegner den spieler trifft int xg; int ming=etwog7; int maxg=50; xg=(rand()%(maxg-ming+1))+ming; int trefferg; trefferg=xg-rk7; if(trefferg>0){ cout<<"Du wurdest getroffen!"<<endl; //es gab treffer bei spieler -> schaden ermitteln int xgs; int mings=bsg7; int maxgs=bsg7+bsmg7; xgs=(rand()%(maxgs-mings+1))+mings; ahp7=ahp7-xgs; cout<<"Du erleidest "<<xgs<<" Schaden!"<<endl; if(ahp7<=0){ cout<<"Du wurdest getötet!"<<endl; i=i+2; kampflose7=1; break; } } if(trefferg<=0){ cout<<"Du wurdest nicht getroffen!"<<endl; } //prüfung ob spieler den gegner trifft cout<<"--------------------------------"<<endl; cout<<"Du greifst deinen Gegner an!"<<endl; int xp; int minp=etwo7; int maxp=50; xp=(rand()%(maxp-minp+1))+minp; int trefferp; trefferp=xp-rkg7; if(trefferp>0){ cout<<"Du hast deinen Gegner getroffen!"<<endl; //Schaden bei Gegner ermitteln int xps; int minps=bs7; int maxps=bs7+bsm7; xps=(rand()%(maxps-minps+1))+minps; ahpg7=ahpg7-xps; cout<<"Du richtest "<<xps<<" Schaden an!"<<endl; if(ahpg7<=0){ cout<<"--------------------------------"<<endl; cout<<"Lebenspunkte: "<<ahp7<<" von "<<mhp7<<" / Manapunkte: "<<amp7<<" von "<<mmp7<<endl; cout<<"--------------------------------"<<endl; cout<<"Du hast deinen Gegner besiegt!"<<endl; cout<<"Du erhälst "<<expgain7<<" Erfahrungspunkte!"<<endl; experience7=experience7+expgain7; i=i+2; kampfwin7=1; break; } } if(trefferp<=0){ cout<<"Du hast deinen Gegner nicht getroffen!"<<endl<<endl; } cout<<"Eine neue Runde beginnt!"<<endl<<endl; } return 0; } int main(void) { …… …… …… Kampf(30,30,0,0,0,6,1,20,1,0,1,0,0,0,0,User.mhp,User.ahp,User.mmp,User.amp,User.bs,User.bsm,User.etwo,User.rk,User2.stimpak,User2.gstimpak,User2.manapak,User.experience,kampfwin,kampflose); …… ……. ……. }
-
Urksimurksiburksi...nenene!
Warte lieber mal ab bis ihr mit Klassen umgehen könnt und dann mach dich erst wieder ans Werk.
Glaube mir, das erspart dir so EINIGES.
Und gib den Variablen Namen, die du SCHNELL wiedererkennst. Ein RPG/Adventure kann ein riesen Projekt werden.
MfG
-
is dasn trollpost?
...
nein ehrlich,auch nach mehrmaligem durchlesen kann ich den code einfach nicht ernst nehmen.
-
wenn du soviele parameter hast, dass du scrollen muesstest um sie alle zu sehen, ist das ein gutes indiz dafuer, dass du diese ein einer struct kapseln solltest.
z.b.
struct KampfParams { double mhpg7; double ahpg7; double mmpg7; double ampg7; int bsg7; int bsmg7; int etwog7; int rkg7; double expgain7; int menschenbesiegt; int tierebesiegt; int extraterrabesiegt; int untotebesiegt; int jedibesiegt; int droidenbesiegt; double mhp7; double ahp7; double mmp7; double amp7; int bs7; int bsm7; int etwo7; int rk7; int stimpak7; int gstimpak7; int manapak7; double experience7; int kampfwin7; int kampflose; };
diese kannst du per reference uebergeben, sodass jede modifikation an denen gleich im main vorgenommen wird
double Kampf(KampfParams& Params) { ... } main() { KampfParams KampfWerte; Kampf(KampfWerte); }
desweiteren ist das kein spieleprogrammierungs problem, sondern grundlangen c/c++, dafuer verschieb ich dich dann in das noetige forum.
-
Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
capemaster schrieb:
cout<<"Der Gegner greift dich an!"<<endl;
strings gehen nicht als shift count.
da muss was faul sein...
-
Du weißt aber, dass die std-streams über einen überladenen <<-Operator angesprochen werden? Aber natürlich nur, wenn du C++ verwendest.
-
ThiefMaster schrieb:
Du weißt aber, dass die std-streams über einen überladenen <<-Operator angesprochen werden? Aber natürlich nur, wenn du C++ verwendest.
ach so, diese fricklersprache, mit der man operatoren umbiegen kann, ist gemeint.
es wurde ja hier higeschoben. ich dachte immer, dass moderatoren genügend sachverstand haben und wissen wo's hingehört
-
ten schrieb:
ich dachte immer, dass moderatoren genügend sachverstand haben und wissen wo's hingehört
nur weil jemand irgendwo ein cout stehen hat, sind seine fragen nicht gleich c++ probleme. ich glaube das handlen von parametern kann man ihm hier beibringen, im c++ bereich wuerde man wohl gleich zu klassen raten und fuer jemanden der solche grundprobleme erstmal loesung muss waere das eventuell overkill. deswegen
ANSI C
es ist halt nicht alles schwarz oder weiss und ich muss ne entscheidung treffen
-
Und in ANSI C wird einem zu Strukturen geraten.
ten: Benimm dich