000
16.01.2002, 18:20
jannisch
|
hi also folgendes prob bei meinem winzigen textadventure macht windows irgendwie imma die meldung programm wird abgebrochen oder so.. naja abba beim compilen kommt keine meldung..hier der quelltext achtung lang-.-
#include <iostream.h>
// variablen deklarierung char *location; char *items; char *p_ort; char *e_item; char *exits; char *look;
// ITEMS
// standart screen void screen_1(char *msg) { cout << "****************************\n the game \n****************************\n\n" << endl; cout << msg; }
void f_e_do(bool e_look,bool e_go,bool e_fetch,bool e_give,bool e_use,bool e_usewith,bool e_open,bool e_close,bool e_speak,bool e_help);
// funktion f_e_item zum anzeigen der vorhandenen items in dem raum void f_e_item(char *e_item) { // wenn der spieler zuhause ist if(e_item=="item_zuhause") { cout << "du siehst:"; /* //items die er dabei hat if(item_cracker==false) { cout << " cracker"; } else { cout << " nix"; } */ } else { cout << " es sind fehler aufgetreten!"; } // ausgabe cout << "du siehst: "<< items; }
//funktion f_e_do zum ermitteln der verfügbaren befehle // schema look,go,fetch,give,use,use with,open,close,speak,help void f_e_do(bool e_look,bool e_go,bool e_fetch,bool e_give,bool e_use,bool e_usewith,bool e_open,bool e_close,bool e_speak,bool e_help) { cout <<"du kannst:"; if (e_look==true) { cout <<" sehen"; } if (e_go==true) { cout <<" gehen"; } if (e_fetch==true) { cout <<" nehmen"; } if (e_give==true) { cout <<" geben"; } if (e_use==true) { cout <<" benutzen"; } if (e_usewith==true) { cout <<" benutzen mit"; } if (e_open==true) { cout <<" oeffnen"; } if (e_close==true) { cout <<" schliessen"; } if (e_speak==true) { cout <<" sprechen"; } if (e_help==true) { cout <<" (hilfe) \n"; }
}
// funktion f_e_exit funktion zum anzeigen der exits void f_e_exit(char *e_exit) { e_exit=exits; cout << "exits:";
if(e_exit=="daheim") { cout << " hm..."; } else { cout << " kein exit"; }
}
// funktion f_p_ort zum anzeigen des ortes in welchem sich der spieler befindet void f_p_ort (char *p_ort) { location=p_ort; // ausgabe cout << "du bist " << location <<endl; // wemm der spieler zuhause ist if (location=="daheim") { // aufrufen der vorhandenen items in diesem raum f_e_item("item_zuhause"); // aufrufen der zur verfügung stehenden aktionen f_e_do(true,false,false,false,false,false,false,false,false,true); // aufrufen der vorhandenen exits f_e_exit("noweher"); } else { cout << "es sind fehler aufgetreten!\n"; }
}
void main(void) { // hauptfunktion screen_1("du wachst zuhause auf und hast furchtbaren hunger..\n\n\n"); // aufrufen der funktion f_p_ort die die vorhandenen items in diesem raum anzeigt // und die position des spielers f_p_ort("daheim");
}
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
001
16.01.2002, 18:48
Archangel
|
ähm.. erstmal solltest du die ganzen char *'s in const char *'s umändern, da du, wie ich sehe, nichts an ihnen veränderst (bis auf location -> siehe unten).. und (!) strings werden nicht mit == verglichen! dazu gibt es die funktion strcmp(const char *s1, const char *s2), die 0 zurückgibt, wenn der inhalt von s1 gleich dem von s2 ist (string.h muss includet werden) s1 == s2 würde testen, ob die speicheraddresse gleich ist, das ist wohl nicht gewünscht... außerdem: location=p_ort; mach da lieber:
if(location) ....delete location; // kann auch sein, das es delete[] location is, kenn mich in c++ nich so ganz aus.. location = new char[strlen(p_ort)+1]; // für strlen muss string.h includet sein strcpy(location, p_ort);
// und dann am ende des programms: if(location) ....delete location;
--
Mar 01 01:10:13 <voice> jo Mar 01 01:10:40 <voice> bis dann ^^ Mar 01 01:11:20 <Archangel> jo **** ENDING LOGGING AT Tue Mar 1 01:58:13 2005
|
|
Profil || Suche
|
002
16.01.2002, 18:50
Hellfire
|
Ich hab das jetzt nur überflogen, aber wenn du Strings vergleichen willst, benutz strcmp (#include <string.h> nicht vergessen). Außerdem reservierst du keinen Speicher für deine Strings, btw. Edit: da war wohl wer schneller und ausführlicher ;)
--
Dieser Beitrag wurde am 16.01.2002 um 18:51 von Hellfire bearbeitet.
|
|
Profil || Suche
|
003
16.01.2002, 19:25
jannisch
|
hm.. also nochma wegen dem string vergleich kannst du mir des anhand eines beispiels aus meinem code bitte nochma erklären? ich danke dir
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
004
16.01.2002, 20:25
Kriz
|
if( !strcmp(e_exit, "daheim") ) { ....cout << " hm..."; } else { ....cout << " kein exit"; }
strcmp() gibt 0 zurück, wenn die Strings inhaltlich identisch sind, und <> 0, falls sie verschieden sind.
--
K:R-I)Z++ "CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp In memory of Voice ( 2005/03/30)
|
|
Profil || Suche
|
005
16.01.2002, 20:50
TheTinySteini
|
Achja, und diese ganze Latte von Booleans, die bestimmen, welche Aktionen man ausführen kann, würd ich mal in ne struct oder - noch besser - in einen Integer (als Flags) packen. Weil sonst hast du da irgendwann ne Funktion mit 10-20 Parametern, da steigt doch niemand mehr durch.
--
TheTinySteini Coder Poke646 "Don't Panic" - Hitchhiker's Guide to the Galaxy
|
|
Profil || Suche
|
006
16.01.2002, 21:35
jannisch
|
mei danke.. naja eh wie gesagt des is nur sonen anfänger teil des is des erste was ich mit c++ mach und da will ich nur so anfänger sachen wie if und switch und funktionen und so n bischen üben
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
007
21.01.2002, 21:43
jannisch
|
TheTinySteini postete Achja, und diese ganze Latte von Booleans, die bestimmen, welche Aktionen man ausführen kann, würd ich mal in ne struct oder - noch besser - in einen Integer (als Flags) packen. Weil sonst hast du da irgendwann ne Funktion mit 10-20 Parametern, da steigt doch niemand mehr durch.
kk also folgendes... ich kenn mich mit c++ noch ncih so aus..was würdet ihr mihr vorschlagen des ganze in ne struct oder in ne class? thx4answer
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
008
21.01.2002, 21:52
Archangel
|
struct und class sind eigentlich das gleiche unter c++, bis auf dass in einer struct per default alles public is, bei ner class alles private.. ich würd trotzdem ne struct nehmen, du brauchst ja keine memberfunktionen etc.. von daher:
void f_e_do(bool e_look,bool e_go,bool e_fetch,bool e_give,bool e_use,bool e_usewith,bool e_open,bool e_close,bool e_speak,bool e_help) -> struct whatever { bool e_look; bool e_go; bool e_fetch; ... };
oder, wenn du flags nehmen willst: void f_e_do(bool e_look,bool e_go,bool e_fetch,bool e_give,bool e_use,bool e_usewith,bool e_open,bool e_close,bool e_speak,bool e_help) -> #define E_LOOK 1 #define E_GO 2 #define E_FETCH 4 #define E_GIVE 8 #define E_USE 16 #define E_USEWITH 32 #define E_OPEN 64 #define E_CLOSE 128 #define E_SPEAK 256 #define E_HELP 512 void f_e_do(int flags);
wenn du also vorher f_e_do(true, true, true, false, false, false, false, false, true, true); aufgerufen hast, muss das nun so aussehen: f_e_do(E_LOOK | E_GO | E_FETCH | E_SPEAK | E_HELP);
in der funktion muss dann beispielsweise: if (e_look==true) { cout <<" sehen"; } so aussehen: if(flags & E_LOOK) cout << "sehen"; (die {} kannst du weglassen, wenn nur eine zeile code folgt..
--
Mar 01 01:10:13 <voice> jo Mar 01 01:10:40 <voice> bis dann ^^ Mar 01 01:11:20 <Archangel> jo **** ENDING LOGGING AT Tue Mar 1 01:58:13 2005
|
|
Profil || Suche
|
009
21.01.2002, 22:22
jannisch
|
hey danke..etzt bin ich einige schlauer:D thx nochma ..auch all den andern
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
010
22.01.2002, 14:09
jannisch
|
hm.. ich bisn nochma-.- ..... also kann mir jemand was gaaanz einfaches erklärn? also ich hab ein projekt..so wie is des jetzt mit header/quelldateien. also ich hab ms visual c++ ..ok also wenn mir jemand erklärt wie ich genau des mit den header/quelldateien machen sollte ..wie kompile ich des jetzt .. wenn ich auf compilen geh compiled der ja nur die aktuelle quelldatei.. müssen die header dateien auch compiled werden? und wie füge ich dann alle so zusammen alle header/quelldateien um danach ein prog zu erstellen?
thx 4 help
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
011
22.01.2002, 15:13
jannisch
|
oder ums konkreter zu machen
C1083: Include-Datei kann nicht geoeffnet werden: 'irgendwas.h': No such file or directory Fehler beim Ausführen von cl.exe.
so..-.-
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
012
22.01.2002, 19:06
Son-Goten
|
ähh... weiß nicht, ob´s daran liegt.. aber deine eigenen headers rufst du nicht mit #include <blabla.h> sondern mit #include "blabla.h" auf...
--
|
|
Profil || Suche
|
013
22.01.2002, 19:57
jannisch
|
jo des wars thx
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
014
23.01.2002, 15:09
jannisch
|
okok also folgendes..hab alle eure vorschläge berücksichtigt...ABER es funzt trotzdem nich:( ihc mein er compiled ohne ne meldung..aber wenn ich des prog ausführe stützt er ab:(
also: structures.h
struct dos { bool look; bool go; bool fetch; bool give; bool use; bool usewith; bool open; bool close; bool speak; bool help; };
moep.cpp
#include <iostream.h> #include <string.h> #include "structures.h"
// variablen deklarierung char *location; const char *items; const char *p_ort; const char *e_item; const char *exits; //const char *look; dos e_dos;
// funktion um alle existierenden dos auf false zu stellen void f_dos_off(void) { e_dos.close=false; e_dos.fetch=false; e_dos.give=false; e_dos.go=false; e_dos.help=false; e_dos.open=false; e_dos.speak=false; e_dos.use=false; e_dos.usewith=false; e_dos.look=false; }
// ITEMS
// standart screen void screen_1(char *msg) { cout << "****************************\n the game \n****************************\n\n" << endl; cout << msg; }
void f_e_do();
// funktion f_e_item zum anzeigen der vorhandenen items in dem raum
void f_e_item(char *e_item) { // wenn der spieler zuhause ist if( !strcmp(e_item,"item_zuhause") ) { cout << "du siehst:"; /* //items die er dabei hat if(item_cracker==false) { cout << " cracker"; } else { cout << " nix"; } */ } else { cout << " es sind fehler aufgetreten!"; } }
//funktion f_e_do zum ermitteln der verfügbaren befehle // schema look,go,fetch,give,use,use with,open,close,speak,help void f_e_do(void) {
cout <<"du kannst:"; if (e_dos.look==true) { cout <<" sehen"; } if (e_dos.go==true) { cout <<" gehen"; } if (e_dos.fetch==true) { cout <<" nehmen"; } if (e_dos.give==true) { cout <<" geben"; } if (e_dos.use==true) { cout <<" benutzen"; } if (e_dos.usewith==true) { cout <<" benutzen mit"; } if (e_dos.open==true) { cout <<" oeffnen"; } if (e_dos.close==true) { cout <<" schliessen"; } if (e_dos.speak==true) { cout <<" sprechen"; } if (e_dos.help==true) { cout <<" (hilfe) \n"; }
}
// funktion f_e_exit funktion zum anzeigen der exits void f_e_exit(char *e_exit) {
cout << "exits:";
if( !strcmp(e_exit,"daheim") ) { cout << " hm..."; } else { cout << " kein exit"; }
}
// funktion f_p_ort zum anzeigen des ortes in welchem sich der spieler befindet void f_p_ort (char *p_ort) { // ausgabe cout << "du bist " << p_ort <<endl; // wemm der spieler zuhause ist if ( !strcmp(location,"daheim") ) { // aufrufen der vorhandenen items in diesem raum f_e_item("item_zuhause"); // aufrufen der zur verfügung stehenden aktionen e_dos.look=true; f_e_do(); // aufrufen der vorhandenen exits f_e_exit("daheim"); }
}
// hauptfunktion void main(void) { // alle existierenden dos auf false stellen f_dos_off();
screen_1("du wachst zuhause auf und hast furchtbaren hunger..\n\n\n"); // aufrufen der funktion f_p_ort die die vorhandenen items in diesem raum anzeigt // und die position des spielers f_p_ort("daheim");
}
danke-.-
--
hm..d0n´t u know? jannisch
Dieser Beitrag wurde am 23.01.2002 um 15:12 von jannisch bearbeitet.
|
|
Profil || Suche
|
015
26.01.2002, 14:18
jannisch
|
eigentlich is des ja nich so meine art abba
*push*
:D
--
hm..d0n´t u know? jannisch
|
|
Profil || Suche
|
016
27.01.2002, 17:24
[PE]Spinator
|
mach mal aus:
[...] // variablen deklarierung char *location; [...]
[...] // variablen deklarierung char *location = ""; [...]
--
This post was written using Opera 7.0 (http://www.opera.com)
|
|
Profil || Suche
|