Textadventure Problem

Hi,
Ich will ein Textadventure machen bin aber noch anfänger.Nun ich hab einen code geschrieben aber wenn ich es ausführe schreibt dos nur noch das was er ausgeben soll und höert nicht mehr auf wie in einer Endlosschleife aber erst wenn ich eine Nummer eingebe und Enter eincklicke hier der Code:

#include
int main()

{
int i;
// Eingabeschleife, wird mit break verlassen
while (1) {

// Eingabemenue
printf(„Du kommst in ein Raum und siehst eine Tuer was machst du?\n“);
printf(" 1:smiley:u machst sie auf\n");
printf(" 2:smiley:u rennst mit deiner Schulter gegen\n");
printf(" 3:smiley:u hast keine Lust mehr und gehst nach hause\n");
printf("\n Gib ne Zahl ein „);
scanf(“&d",&i);

// Bedingung fuer den Ausstieg
if (i == 0)
break;

// Die Antworten
else if (i == 1) {
printf(„Die tuer knarckst und geht auf“);
}
else if (i == 2) {
printf(„Du Schreist vor Schmerzen auf und sinkst zu boden.Alles wird schwarz“);
(******gehört nicht zum Code wollte nen break; machen*********)
break;

}
//der Default
else
printf(" Bitte entscheide dich für eine der 3 Moeglichkeiten");

}
//fertig
return 0;
}

**********************************************************************
Hoffe ihr könnt mir helfen (Natürlich ohne die *)
danke
Jonas

Hallo,

Du solltest Dir vielleicht mal ein wenig einführende Lektüre zur Programmierung allgemein und C im Besonderen zu Gemüte führen.

Ich will ein Textadventure machen bin aber noch anfänger.Nun
ich hab einen code geschrieben aber wenn ich es ausführe
schreibt dos nur noch das was er ausgeben soll und höert
nicht mehr auf wie in einer Endlosschleife aber erst wenn ich
eine Nummer eingebe und Enter eincklicke hier der Code:

Was heisst „wie in einer Endlosschleife“? Du hast doch mit „while(1)“ genau eine solche programmiert.

Du solltest Dir mal die Funktion „scanf“ genauer anschauen. Was bedeuten die Konvertierungen (conversion specifiers) und was passiert, wenn keine Übereinstimmung gefunden wird? Wo ist der Unterschied zu printf?

Als erstes solltest Du mal das „&d“ in Deinem scanf Aufruf durch das korrekte „%d“ ersetzen.

Gruß

Fritze

Hallo,
Danke scanf war das problem. Und wenn eine Zahl außerhalb eingecklickt wurde habe ich ja auch geregelt mit dem:

//der Default
else
printf(" Bitte entscheide dich fuer eine der 3 Moeglichkeiten");

Nun aber noch eine Frage. Wenn ich eine Zahl einklicke kommt die Antwort. Aber nun stehen die Fragen was ich machen möchte wieder da. Was für ein befehl löscht die vorherigen Fragen z.B:

Du kommst in ein´Raum und siehst eine Tuer was machst du

1:smiley:u machst sie auf
2:smiley:u rennst mit deiner Schulter gegen
3:smiley:u hast keine Lust mehr und gehst nach hause

gib ne Zahl ein… 1

Die tuer knarckst und geht auf

****Nun will ich das alles obere Weggeht und eine neue „Fragebogen“ erscheint.

Danke nochma für die vorherige Antwort

Hallo Jonas,

Nun aber noch eine Frage. Wenn ich eine Zahl einklicke kommt
die Antwort. Aber nun stehen die Fragen was ich machen möchte
wieder da. Was für ein befehl löscht die vorherigen Fragen
z.B:

Du kommst in ein´Raum und siehst eine Tuer was machst du

1:smiley:u machst sie auf
2:smiley:u rennst mit deiner Schulter gegen
3:smiley:u hast keine Lust mehr und gehst nach hause

gib ne Zahl ein… 1

Die tuer knarckst und geht auf

****Nun will ich das alles obere Weggeht und eine neue
„Fragebogen“ erscheint.

probier mal: system(„cls“);
dann wird der „Bildschirminhalt“ gelöscht.

Gruß Carsten

P.S. schick’ mir doch mal 'ne Version des Adventures wenn es fertig ist, bin
mal wieder sehr neugierig und gespannt

Hallo,
Ich habe das Problem gelöst indem ich das while (1) weggemacht habe.
Ich schicke dir gerne das Adventure aber das wird noch so 2 Wochen dauern, da ich noch einige speziefische sachen lernen muss. Nun gleich noch ne frage :smile: :

Ich möchte machen dass eine Tür aufgeht wenn ein Lösungswort eingetippt wird. Das sieht immoment so aus:

#include
int main()

{
int i;

printf(„Du kommst an die tuer und wenn du den Griff beruehrst ertoehnt eine \n schreien und fragt dich nach einem Loesungswort“);
printf("\n\nSag das Wort „);
scanf(“%d",&i);

if (i == 1)
printf(„Gut. Die Tuer geht auf“);

else
printf(„NEIN DAS IST FALSCH“);

getchar();
getchar();
return 0;
}

*******************************************************************
klappt wunderbar, jedoch will ich keine Zahl als Lösungswort sonder ein Wort. Wenn ich jetzt das
if (i== Zauber)
mache kommt ein fehler:
Undefined symbol „Zauber“
wo definiere ich das?

Danke

Hallo,

Du wruschtelst Dir da ja ganz schön einen ab :smile: Geh doch mal auf meinen Ratschlag ein, erstmal etwas Theorie zur Programmierung und C zu lernen, bevor Du mit einem „Textadventure“ anfängst.

Du hast „i“ als „int“ – also eine ganze Zahl – definiert. Du willst aber einen „String“ – eine Zeichenkette – zuordnen.

Dazu schreibst Du „i == Zauber“, das ist in dem Zusammenhang doppelt falsch. Erstens ist i wie gesagt Integer und zweitens werden Zeichenketten in Anführungszeichen gesetzt. Sonst werden sie als Variable interpretiert. Daher auch der Fehler. Du hast nirgends die Variable „Zauber“ definiert.

Die Funktion „getchar“ liest außerdem nur ein Zeichen ein. Du willst aber einen String. Und so weiter und so fort. Aus Deinem Listing wird klar, dass Du wirklich keinerlei Grundlagen beherrscht. Es lohnt sich bestimmt, wenn Du Dir diese aneignest. Probiers mal hiermit:

ISBN: 3827257271 Buch anschauen

Gruß

Fritze

Hab schon des buch ist super http://www.amazon.de/exec/obidos/ASIN/3827318025/qid…
allerdings denke ich, dass ich ein textadventure schon kann ledeglich
ein paar fragen.
Danke für die Antworten Jonas

Hab schon des buch ist super
http://www.amazon.de/exec/obidos/ASIN/387318025/qid=…

Also entweder ist das Buch scheisse, oder Du hast es nicht gelesen. Es reicht nicht, es sich unter das Kopfkissen zu legen …

Gruß

Fritze

Hallo,

klappt wunderbar, jedoch will ich keine Zahl als Lösungswort
sonder ein Wort. Wenn ich jetzt das
if (i== Zauber)
mache kommt ein fehler:
Undefined symbol „Zauber“
wo definiere ich das?

das Problem ist, dass du, wenn du ein Wort, also einen string einlesen willst, diesen nicht in einer variable vom Typ integer speichern kannst, wie du es mit i gemacht versucht hast.

ein kleiner Code-schnipsel dazu:

#include
#include
//wird für Überprüfung des Zauberwortes benötigt

int main(int argc, char *argv[])
{
char x[100];
//Variable x wird als string(bzw array vom typ char) deklariert

scanf("%s", &x); //der string wird von der Tastatur eingelesen, dieses Mal ist es kein integer, deshalb muss auch der Formatbezeichner „%s“ gewählt werden

if(strcmp(x, „Zauberwort“)==0) //Es wird überprüft, ob die Eingabe und ein zuvor festgelegtes Zauberwort übereinstimmen

{
printf(„richtig, „%s“ war das richtige Wort.\n Die Tuer hat sich geoeffnet.\n“, x);
}
else
{
printf(„falsch!“);
}
system(„PAUSE“);
return 0;
}

Ich hoffe ich habe jetzt keinen Fehler reingehauen,
Viel Spaß noch beim programmieren deines Adventures, Carsten

Ist gut habs erst zu nem viertel durch…

Hallo,
Super danke genau das hab ich gebraucht.bist du villeicht der sohn von Udo Mai?
Jonas

Hallo,
das geht leider nicht.Wie und wo muss ich das einfügen?
jonas

Hallo,

Super danke genau das hab ich gebraucht.bist du villeicht der
sohn von Udo Mai?

ja, und du der Sohn von Heiner Gehrlein, nehme ich an.

kannst dich wenn du willst auch per email melden, wenn du Fragen oder Probleme mit dem Programm haben solltest, geht vielleicht schneller als immer erst hier im Forum zu posten (das war jetzt keine www-Antiwerbung - würde ich nie wagen).
(Wenn das Adventure fertig ist, können wir ja mit einer Tischtennissimulation anfangen, vielleicht werde ich dann endlich besser *anmeineneiderlagezurückdenk* :wink: )

Carsten

Hallo,

das geht leider nicht.Wie und wo muss ich das einfügen?

also bei mir funktioniert das wunderbar, füge an der Stelle, bei der der Bildschrim gelöscht werden soll system(„cls“); ein, du musst allerdings bedenken, dass du darauf achtest, irgendeine Bedingung einzubauen unter der die Funktion ausgeführt wird, da sowas:

printf(„Text1“);
system(„cls“);
printf(„Text2“);

nur „Text2“ auf dem Bildschirm ausgeben würde.
Vielleicht liegt es auch am Compiler, bei mir funktioniert es beim dev-c++ und beim borland Compiler, ich weiß nicht ob das wirklich überall funktioniert.

Carsten

Hallo,

„cls“ funktioniert vor allem nur unter Dos.

Gruß

Fritze

„cls“ funktioniert vor allem nur unter Dos.

ich wusste ja nicht, dass er sein Textadventure mit GUI ausführen wollte

Bahnhof

„cls“ funktioniert vor allem nur unter Dos.

ich wusste ja nicht, dass er sein Textadventure
mit GUI ausführen wollte Es ging um Betriebssysteme, nicht Benutzeroberflächen. Es gibt außer DOS noch weitere Systeme.

Frechheit
Hallo,

Es ging um Betriebssysteme, nicht
Benutzeroberflächen. Es gibt außer DOS noch weitere
Systeme.

Dass außer DOS weitere Betriebssysteme existieren ist mir sehr wohl bekannt, dieses Posting z.B. verfasse ich unter Linux.
Auch kenne ich den Unterschied zwischen OSs und Benutzeroberflächen.
Um aber wieder auf die Fragestellung zurückzukommen:
Wenn ich weiß, das Jonas die Programme in der entsprechenden Umgebung ausführt, darf ich das auch schreiben ohne mich dafür direkt beleidigen zu lassen.

Deine fachlichen Kompetenzen möchte ich keineswegs anzweifeln, sehr wohl aber deine sozialen, da ich es unter aller Sau finde:

  1. ein Buch zu empfehlen, bei dem du selbst nicht sagen kannst, ob es (wörtlich zitiert) „scheiße“ ist
  2. fünf Beiträge zu schreiben, von denen höchstens 2 aktive Verbesserungsvorschläge liefern. In allen anderen schreibst du nur wie es nicht geht, mag’ sein, dass zu einer Beantwortung der Fragen manchmal noch Informationen fehlen, aber man kann nachfragen, anstatt ständig nur zu schreiben wie etwas nicht geht und man kann bei falschen Lösungen anderer eine richtige Lösung nachzuliefern.
  3. die Probleme von Anfängern nicht einfach zu ignorieren, wenn man nicht damit umgehen kann, dass man wenn man etwas noch nicht beherrscht auch mit Hilfe eines Buches nicht immer weiter kommt, bzw. man Zusammenhänge besser versteht, wenn man sie nicht aus einem Buch ablesen und verstehen muss, sondern mit einem kurzen Beispiel von jemand anderem erklärt bekommt.

Gruß Carsten

Hi,
Super, genau meine rede. Im Namen aller Anfänger:smiley:anke

mfg Jonas