VC++ If-Problem?
-
Hi, ich habe angefangen ein kleines Textadventure zu mahen, aber immer wenn ich einen Befehl im laufendem Programm eingebe, passiert nichts. Warum? Wie kann ich das lösen?++
// Textadventure 1.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include "iostream" #include "string" using namespace std; int _tmain() { string eingabe; bool key1see = false; bool key1have = false; const string zu = "Abgeschlossen"; const string leer = "Da ist nichts"; const string zeile = " \n \n"; const string haben = "Du besitzt jetzt "; cout << "Du wachst in einem grauen Raum auf und du kannst dich an nichts mehr errinern. Es gibt eine Tuer, einen Tisch, einen Muelleimer und das Bett in dem du gelegen hast." << zeile; cin >> eingabe; if (eingabe == "Öffne Tür" && key1have == false) cout << zeile << zu << zeile; if (eingabe == "Schaue Tisch an"){cout << "Leer" << leer << zeile;} if (eingabe == "Schaue Mülleimer an" && key1have == false) { cout << zeile << "Da ist ein Schlüssel" << zeile; key1see = true; } if (eingabe == "Schaue Mülleimer an" && key1have == true) cout << zeile << leer << zeile; if (eingabe == "Nimm Schlüssel" && key1see == true) { cout << haben << "Zellenschlüssel"; key1have = true; } cout << "Test"; //getchar(); //return(0); system("PAUSE"); }**
key1see key1have**
Variablen ob der Spieler den Schlüssel sieht und besitzt
if(eingabe == "Schaue Mülleimer an" && key1have == false)
Wenn der Spiele Befehl ... gibt und er den Schlüssel noch nicht hat sollte er den Schlüssel sehen können und da stehen "Da ist ein Schlüssel"Bitte, helft mir. Ich hoffe der Code ist selbsterklärend
P.S.: Ich möchte keine Antworten wie "Probier was anderes" oder "Mach was leichteres"
-
_tmain? main heißt die Funktion.
#include "iostream" wird zu #include <iostream>, das gleiche gilt für string
system("PAUSE"); ist nicht Standardkonform.
return(0); am Ende fehlt.
Nächster Schritt: Bitte formatier deinen Code anständig, dann haben wir es leichter und sag uns, was nicht tut, was es soll: 1. Code, 2. Was soll er tun 3. Was passiert. Das 3. fehlt bislang

-
Mr X schrieb:
return(0); am Ende fehlt.
Wo steht, dass das Pflicht ist? main darf doch ruhig ohne return-Statement notiert werden.
@MadBonsaiJr:
Dein Problem ist, dass du mit cin nur die Zeichen bis zum ersten Whitespace bekommst. Nutze den Debugger, dann siehst du, dass bei einer Eingabe "Schaue in Mülleimer" nur "Schaue" in eingabe steht. Wie du das mit cin lösen kannst, kann ich dir aber auch nicht auf Anhieb sagen, ich schreibe eigentlich keine Konsolenprogramme.Übrigens: was machst du, wenn jemand nicht penibelst deine Groß-/Kleinschreibung beachtet?
-
_matze schrieb:
@MadBonsaiJr:
Dein Problem ist, dass du mit cin nur die Zeichen bis zum ersten Whitespace bekommst. Nutze den Debugger, dann siehst du, dass bei einer Eingabe "Schaue in Mülleimer" nur "Schaue" in eingabe steht. Wie du das mit cin lösen kannst, kann ich dir aber auch nicht auf Anhieb sagen, ich schreibe eigentlich keine Konsolenprogramme.getline(cin,eingabe);Liest eine ganze Zeile ein.
Verträgt sich aber nicht gut mit anderen Einleseaktionen durch den Operator >>, also lieber nicht mischen. Dürfte hier ja kein Problem sein, da dein Spielchen zeilenbasiert ist.Ein weiteres potentielles Problem sind die Umlaute, zumindest falls dein Programmcode in einer anderen Codierung gespeichert sein sollte, als die Konsole hinterher benutzt.
-
Das Umlautproblem könnte man lösen, indem Du Handlungen vorschlägst und durchnummerierst und dann nur die Nummer verlangst.
_matze: Ja, ich weiß, inzwischen ists wohl sogar vom Standard erlaubt. Für mich muss eine int-Funktion aber auch einen Integer zurückgeben und main wird nunmal als int main() definiert.
-
Mr X schrieb:
Das Umlautproblem könnte man lösen, indem Du Handlungen vorschlägst und durchnummerierst und dann nur die Nummer verlangst.
_matze: Ja, ich weiß, inzwischen ists wohl sogar vom Standard erlaubt. Für mich muss eine int-Funktion aber auch einen Integer zurückgeben und main wird nunmal als int main() definiert.
Durchnummerieren halte ich nicht für sinnvoll, das führt nur zu stumfen Probieren, bis man die "richtige" Möglichkeit gewählt hat.
Besser wäre eine Überprüfung, die tolerant zu z.B. Groß- und Kleinschreibung oder kleineren Vertippern ist.Und
maingibt durchaus einenintzurück, nämlich0. Der Standard erlaubt lediglich das Weglassen desreturn-Statements, mit der Existenz des Rückgabewerts an sich hat das aber in diesem Fall nichts zu tun.
-
wofür sollte man der Groß-/Kleinschreibung Beachtung schenken ?
einfach tolower()....für die Sonderzeichen den ASCII-Wert benutzen...
-
Durchnummerieren finde ich auch nicht gut. Ein Grund wurde schon genannt, ein anderer wäre, dass Textadventures viel mehr Spaß machen, wenn man die Wörter selbst tippt.
