Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

18.01.2014, 05:19

Brauche Hilfe bei einem Fragespiel [C++]

Moin,

ich kann noch nicht ganz so gut Programmieren bin jetzt 15 Jahre und wills aber zum Beruf machen Nächstes Jahr.^^

So nun zu meinem Problem.

Zur Übung wollte ich mal ein kleines Spiel entwerfen. Das ganze in der CMD Konsole. Da mir nichts leichtest gutes eingefallen ist hab ich mich für ein Fragespiel entschieden.


1. Habe ich festgestellt das man als Antwort nur 1 Buchstaben/Ziffer eingeben kann, also musst ich das Spiel so machen.
2. Wunderbar, Quellcode schreiben hab ich keine Probleme hatte ein paar Fehler aber konnt ich gut beseitigen.
3. Nun wars ziemlich fertig, 0 Fehler passt. Problem is, egal welche Antwort ich eingebe alles Richtig. Gebe ich z.B. 10 Buchstaben/Ziffern ein sind komplett alle 10 Fragen die es gibt Richtig beantwortet und man hat gewonnen.

4. Könnte mir jemand behilflich sein?

Ich würd ja gern den Quellcode posten, sonst könnt ihr mir ja schlecht helfen.^^ Aber was bringt es wenn ich Quellcode schicke und total unübersichtlich ist? Wie kann ich hier Quellcode in mein Post machen das er noch übersichtlich ist? Also so wie ich ihm im Compiler drinne stehen hab? Ich red/schreib zuviel, könnt man alles Kürzen.^^



mfG

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

18.01.2014, 09:49

Wie kann ich hier Quellcode in mein Post machen das er noch übersichtlich ist?
Du wechselst beim Schreiben Deines Beitrags und beim Reinkopieren des Codes vorher auf "Quellcode" statt auf "Editor". Das ist das Tab über dem Eingabefeld. Du findest über dem Eingabefeld auch einen Button für "C++". Da drauf klicken und den Code zwischen die Tags einfügen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

18.01.2014, 09:58

OK,

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
// Mein erstes selbstentworfenes Spiel in C++
//
// Fragespiel 1.0
// Es sind 10 Fragen richtig zu beantworten
//
//
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
    // Variablen
    //
    char chEingabe;

    // Textausgabe nach Start des Spieles
    //
    cout << "Willkommen, dies ist ein kleines Fragespiel.\n";
    cout << "Ziel des Spieles ist es 10 Fragen richtig zu loesen!\n";
    cout << "\n";
    cout << "Druecke (s) um mit dem Spiel zu beginnen!\n";
    cout << "Druecke eine beliebige Taste und zweimal Enter um das Spiel zu beenden!\n";
    cin >> chEingabe;

    // Spiel starten?
    //
    if (chEingabe == 's','S')
    {
        {
            cout << "Wieviel ist 10 hoch 3?\n";
            cout << "\n";
            cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
            cin >> chEingabe;
        }

        // Antwort abfragen
        //
        if (chEingabe == '1','E','e')
        {
            cout << "Richtig! Naechste Frage:\n";
            cout << "\n";
            cout << "An welchen Fluss liegt Muenchen?\n";
            cout << "\n";
            cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
            cin >> chEingabe;
        }

            // Antwort abfragen
            //
            if (chEingabe == 'I','i')
            {
                cout << "Richtig! Naechste Frage:\n";
                cout << "\n";
                cout << "Wie heisst der Boesewicht in der Zeichentrickserie Die Schluempfe?\n";
                cout << "\n";
                cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                cin >> chEingabe;
            }

                // Antwort abfragen
                //
                if (chEingabe == 'G','g')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Was ist das Gegenteil von Digital?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erte Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == 'A','a')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Wie nennt man eine Puppe, die mittels Faeden bewegt wird?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == 'M','m')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "1672+6491-1345= ?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == '8','A','a')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Wie nennt man das Grab eines Pharaos?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == 'P','p')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Wie nennt man verfallene Bauwerke?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == 'R','r')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Was bedeutet die Abkuerzung MEZ?\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Antwort abfragen
                //
                if (chEingabe == 'M','m')
                {
                    cout << "Richtig! Naechste Frage:\n";
                    cout << "\n";
                    cout << "Der Vater von Monika hat fuenf Toechter.\n";
                    cout << "\n";
                    cout << "- Lele\n";
                    cout << "- Lala\n";
                    cout << "- Lulu\n";
                    cout << "- Lolo\n";
                    cout << "\n";
                    cout << "Frage: Wie heisst die fuenfte Tochter? Nachdenken, es handelt sich um die letzte Frage!\n";
                    cout << "\n";
                    cout << "\n";
                    cout << "HINWEIS: Bitte nur die erste Ziffer oder den ersten Buchstaben als Antwort eingeben!\n";
                    cin >> chEingabe;
                }

                // Anwort abfragen
                //
                if (chEingabe == 'M','m')
                {
                    cout << "Richtig! Sehr gut du hast alle 10 Fragen gemeistert! Herzlichen Glueckwunsch!!!\n";
                    cout << "\n";
                    cout << "Drücke nun eine Beliebige Taste und bestätige indem du zweimal Enter drückst.\n";
                }

    }

    // Spiel beenden?
    //
    else
    {
        cout << "Bestaetige mit druck einer Beliebigen Taste die beendigung des Spieles!\n" << endl;
    }

    return 0;
}


Noch ne Frage, könnt es sein das alles als Richtige Antwort zählt weil ich noch keine Textausgabe hab für eine Falsche Antwort? Wenn ich richtig liege muss ich das dann mit else if machen?



P.S. Da ich mich noch nicht wirklich so gut auskenne mit C++ würd ich mich auch gerne freuen wenn mir wer paar Tipps hätte.

4

18.01.2014, 10:03

Erstmal sorry wegen Doppelposting aber mein Edititieren zeigts mir dann den Quellcode irg. falsch an. kp^^


Ich hab ja so gemacht das man Anfangsbuchstaben nur eintippen kann. Als ich angefangen hab mit dem Spiel zu programmieren kamen immer nur Fehler wenn die Antwort mehr als eine Stelle hatte. Wenn mir da vllt jemand helfen könnte? Weil is ja schon bissl doof wenn man immer beachten muss nur eine Ziffer oder einen Buchstaben als Antwort zu benutzen.

Danke.

5

18.01.2014, 10:20

ein Char ist nur ein einzelnes Zeichen und nimmt deshalb nicht mehr an, wenn du z.b. Int (dann aber nur Zahlen) oder n String nimmst sollte auch ne größere Eingabe für deine Antwort möglich sein.
Wenn ich das richtig sehe, kontrolliert er bei egal welcher Frage du bist schon _jede_ Frage auf die richtige Antwort durch und sobald dein Buchstabe bei einer deiner Fragen als richtige Antwort auftaucht gibt er dir das dann auch aus.

6

18.01.2014, 10:23

OK, das heißt umschreiben auf String dann sollte:

1. Ganze Wörter als Antwort gehen.
2. Würde es behoben werden das ziemlich alles was man eintippt als richtig erkannt wird.


Zu den Strings bin ich noch net gekommen.^^ Kann mir des einer erklären wie ich nen String zuweis und den dann benutze?

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

7

18.01.2014, 12:19

Quellcode

1
2
char* answer = new char[ /*maximale Anzahl an Zeichen */ 32];
cin >> answer;

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

18.01.2014, 12:56

Das ist wohl die schlechtmöglichste Variante inklusive Memoryleak.
Besser wäre:

C-/C++-Quelltext

1
2
3
4
string answer();
cin >> answer; // oder std::getline(cin, answer); für ganze Zeilen
if(answer == "blub")
//etc.

http://www.cplusplus.com/reference/string/string/getline/
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

9

18.01.2014, 13:52

Das eigentliche Problem bei deinem Code sind allerdings die if-Bedingungen.
if (chEingabe == 'M','m') bedeutet: Prüfe ob chEingabe gleich M ist, wirf dieses Ergebnis weg und benutze 'm'. Das wird als wahr ausgewertet, also ist deine Bedingung immer wahr.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

10

18.01.2014, 14:31

Witzig, wie man soetwas immer wieder übersieht :D
Um das Problem zu umgehen kann man die eingegebenen Zeichen vor dem Prüfen in die groß- bzw. kleingeschriebene Variante umwandeln.
Dafür sollte man unbedingt darauf verzichten selbst nicht rechnen(ala 'A' - 'a' = 'a' oder umgekehrt), sondern lieber die tolower-Funktionen der Standardbibliothek verwenden.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »NachoMan« (18.01.2014, 14:42)


Werbeanzeige