Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
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-.-

Quellcode:
#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

zum Seitenanfang zum Seitenende 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:
Quellcode:
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

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende Profil || Suche
004
16.01.2002, 20:25
Kriz



Quellcode: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)

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende Profil || Suche
007
21.01.2002, 21:43
jannisch



Zitat:
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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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...

--

zum Seitenanfang zum Seitenende Profil || Suche
013
22.01.2002, 19:57
jannisch



jo des wars thx

--

hm..d0n´t u know?
jannisch

zum Seitenanfang zum Seitenende 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
Quellcode:
struct dos
{
bool look;
bool go;
bool fetch;
bool give;
bool use;
bool usewith;
bool open;
bool close;
bool speak;
bool help;
};

moep.cpp

Quellcode:
#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.
zum Seitenanfang zum Seitenende 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

zum Seitenanfang zum Seitenende 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)

zum Seitenanfang zum Seitenende Profil || Suche