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

02.11.2012, 16:08

Guess the Number Funktioniert nicht...

Ich bastel gerade mit C++ ein "Guess the Number" das soll aber nicht so ein einfaches sein was man einfach in die main.cpp Schreibt.

Hier mal mein Code:

main.cpp:

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
#include <iostream>
#include <time.h>

#include "game.h"

using namespace std;

int main()
{
    int gamerun = 1;
    char input;

    Game game;

    do
    {
        cout << "_____ Guess The Number _____" << endl;
        cout << "1. Spiel Starten" << endl;
        cout << "2. Optionen" << endl;
        cout << "3. Spiel beenden" << endl;
        cout << endl;
        cout << "Eingabe: ";

        cin >> input;

        switch(input)
        {
            case '1':
            {
                game.gameStart();
            }break;
            
            case '2':
            {
                
            }break;

            case '3':
            {
                gamerun = 0;
            }break;
        }

    }while(gamerun == 0);
}


game.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
class Game
{
    private:
        int rndNumber;
        int modeNumber;
        int numWahl;
        char gInput;

    public:
        Game();
        void gameStart();
};


game.cpp:

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
#include <iostream>
#include <time.h>
#include "game.h"

using namespace std;

Game::Game()
{
}

void Game::gameStart()
{
    do
    {
        srand(unsigned(time(NULL)));

        system("cls");
        cout << "_____ Modus Wahl _____" << endl;
        cout << "1. Zahlen von 0 - 10" << endl;
        cout << "2. Zahlen von 0 - 20" << endl;
        cout << "0. Beenden" << endl;
        cout << endl;
        cout << "Eingabe: ";

        cin >> gInput;

        switch(gInput)
        {
            case '1':
            {
                system("cls");
                modeNumber = 2;
                rndNumber = (rand()%modeNumber)+1;

                cout << "1. Wahl: ";
                cin >> numWahl;

                if(numWahl == rndNumber)
                {
                    cout << "WIN!" << endl;
                    cout << endl;
                    cout << "Nochmal Spielen?" << endl;
                    cout << "1. Ja" << endl;
                    cout << "0. Nein" << endl;

                    cout << "Eingabe: ";
                    cin >> gInput;

                    if(gInput == 1)
                    {
                        gameStart();
                    }


                }
                else
                {
                    cout << "LOOSE!" << endl;
                    cout << endl;
                    cout << "Nochmal Spielen?" << endl;
                    cout << "1. Ja" << endl;
                    cout << "0. Nein" << endl;

                    cout << "Eingabe: ";
                    cin >> gInput;

                    if(gInput == 1)
                    {
                        gameStart();
                    }
                }


            }break;

            case '2':
            {
                modeNumber = 20;
            }break;
        }

    }while(gInput == 0);
}



Der Knackpunkt sitzt eigentlich in der game.cpp, wenn ich dort den ersten Modi auswähle und dann 1 Eingebe soll gefragt werden ob man weiterspielen möchte, funktioniert auch nur wenn man "1" Eingibt also Ja
wird das Programm Beendet, und bei "0" also Nein fängt man wieder in der main an.

Ich hoffe ich konnte es einigermaßen verständlich erklären wenn nicht bitte bescheid geben.


MfG Sh4d0w

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

02.11.2012, 16:20

ich glaube an der Stelle würden die meisten folgendes in den Raum werfen: Debugger!
ich denke mal, du solltest damit dein Programm durchgehen und dabei auf die Variablen "gamerun" in der Main und "gInput" in "gameStart" achten
damit solltest du auf des Rätsels Lösung kommen ;)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Atze12321

Frischling

Beiträge: 15

Wohnort: Jena

Beruf: Schüler...

  • Private Nachricht senden

3

02.11.2012, 17:04

Hallo Sh4d0w.
Grundsätzlich hast du erstmal zwei Fehler in deinem Code. (ich denke mal du lernst gerade erst C++ (korrigiere mich wenn ich falsch liege ^^ ) , deswegen werde ich es ein wenig ausführlicher erklären)

Nummer 1 hat sich hier versteckt:

Quellcode

1
2
3
4
5
6
7
cout << "Eingabe: ";
cin >> gInput; 

if(gInput == 1) 
{ 
    gameStart(); 
}


Zur Erinnerung: Die variable gInput ist ein char. Dann wird sie jedoch mit einer Ganzzahl (nämlich 1) verglichen. Einzelne Zeichen (also chars) werden als Ganzzahl codiert (Das Zeichen '1' ist z.B. als die Zahl 49 gespeichert), weswegen dich dein Compiler nicht über diesen Fehler aufklärt, denn zwei Zahlen kann man grundsätzlich immer vergleichen. Wenn du an dieser Stelle 1 eingibst, wird also verglichen, ob 49 = 1, und das ist natürlich falsch. Du hast also zwei Optionen, diesen Fehler zu beheben:

Quellcode

1
if(gInput == 49)

oder

Quellcode

1
if(gInput == '1')


Die erste Variante ist ziemlich hässlich und trägt nun wirklich nicht zur lesbarkeit des Codes bei, deswegen würde ich stark zur 2. Methode tendieren ;).

Der 2. Fehler ist hier (ein paar Codestellen weggelassen):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
do
{
    cout << "_____ Guess The Number _____" << endl;
    [...]
    switch(input)
    {
      [...]
      case '3':
      {
          gamerun = 0;
      }break;
    }
}while(gamerun == 0);



Bei der Eingabe 3 soll das Spiel eigentlich beendet werden (also wenn gamerun auf 0 ist). In der letzten Zeile aber prüfst du bei dem while, ob gamerun = 0 ist, sodass das Spiel beendet wird, wenn es eigentlich nicht beendet werden sollte und andersherum. Du musst also überprüfen, ob gamerun = 1 (es soll ja nur wiederhohlt werden, wenn gamerun = 1 ist).

Ich hoffe das hat dir geholfen, und wie Sacaldur schon gesagt hat: Durch den Debugger hätte man so etwas schnell herrausbekommen ;).

MfG
Max
8)

4

02.11.2012, 17:30

Danke Max deine Erklärung war Super und du hattest Recht, ich Lerne gerade C++ :)

Werbeanzeige