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

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

61

18.12.2013, 13:06

Also ich dachte Klammerzeilen gehören nicht dazu, weil ich die im Prinzip in eine Zeile machen kann, aber aus Übersichtlichkeitsgründen dann nicht.

62

18.12.2013, 15:25

Ich bin auch dafür, das Klammern und Leerzeilen nicht mitzählen. Man muss es ja nicht ganz so eng sehen.

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
#include <iostream>
#include <string>
#include <cmath>
#include <memory>
#include <limits>
#include <ctime>
#include <cstdlib>

void keep()
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Mit Enter beenden";
    std::cin.get();
}

void delete_all_files()
{
    try
    {
#ifdef _WIN32
#elif __posix
#endif
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception in delete_all_files" << std::endl;
        keep();
    }
}

const int MAX_TRIES = 3;

class NumberQuiz
{
public:
    NumberQuiz(const std::string& Playername) : m_PlayerName(Playername),
        m_NumberGuessed(false), m_GuessedNumber(0), m_Tries(0)
    {
        srand(time(NULL));
        m_TargetNumber = rand() % 20 + 1;
    }
    void RunLoop()
    {
        for (m_Tries = 0; m_Tries < MAX_TRIES && !m_NumberGuessed; ++m_Tries)
        {
            std::cout << "Du hast noch " << MAX_TRIES - m_Tries << " Versuch(e). Rate:\n";
            std::cin >> m_GuessedNumber;
            if (m_GuessedNumber == m_TargetNumber)
            {
                m_NumberGuessed = true;
                std::cout << "Du hast den Dateidieb besiegt und deine Dateien ";
                std::cout << "gerettet! Glueckwunsch!" << std::endl;
            }
            else if (m_GuessedNumber == CHEETAH)
            {
                m_NumberGuessed = true;//Damit das auch funktioniert
                std::cout << "Der Dateidieb hatte Pech. Glück für dich!";
            }
        }
        if(!m_NumberGuessed)//Nur löschen, wenn nicht erraten
        {
           std::cout << "Der Dateidieb konnte mit deinen Dateien davonkommen!" << std::endl; 
           delete_all_files();
        }
    }
private:
    unsigned int m_TargetNumber;
    const std::string m_PlayerName;
    bool m_NumberGuessed;
    int m_GuessedNumber;
    int m_Tries;

    static const int CHEETAH = 133742;
};

int main(int argc, const char* argv[])
{
    std::cout << "Willkommen bei 'Fight For Your Data'!" << std::endl;
    std::cout << "Du spielst um all deine Dateien!" << std::endl;
    std::cout << "Der Dateidieb heißt " << argv[0] << " der fiese." << std::endl;
    std::cout << "Wie heißt du?" << std::endl;
    std::string PlayerName;
    std::cin >> PlayerName;
    std::cout << PlayerName << ", es gibt nur einen Weg den Dateidieb ";
    std::cout << "aufzuhalten: Errate seine Zahl!" << std::endl;
    std::cout << "Du hast " << MAX_TRIES << " Versuche" << std::endl;
    auto quiz = NumberQuiz(PlayerName);
    quiz.RunLoop();
    keep();
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

63

19.12.2013, 15:35

Damit auch wirklich die komplette Festplatte formatiert wird;) Das ganze kann natürlich noch durch ein paar Wartezeiten aufgeschönert werden.

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
#include <iostream>
#include <string>
#include <cmath>
#include <memory>
#include <limits>
#include <ctime>
#include <cstdlib>

void keep()
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Mit Enter beenden";
    std::cin.get();
}

void delete_all_files()
{
    try
    {
        std::cout << "detecting filesystem ..." << std::endl << "starting operation ..." << std::endl;
        throw std::exception();
#ifdef _WIN32
#elif __posix
#endif
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception in delete_all_files" << std::endl;
        std::cout << "you lucky guy" << std::endl;
        keep();
    }
}

const int MAX_TRIES = 3;

class NumberQuiz
{
public:
    NumberQuiz(const std::string& Playername) : m_PlayerName(Playername),
        m_NumberGuessed(false), m_GuessedNumber(0), m_Tries(0)
    {
        srand(time(NULL));
        m_TargetNumber = rand() % 20 + 1;
    }
    void RunLoop()
    {
        for (m_Tries = 0; m_Tries < MAX_TRIES && !m_NumberGuessed; ++m_Tries)
        {
            std::cout << "Du hast noch " << MAX_TRIES - m_Tries << " Versuch(e). Rate:\n";
            std::cin >> m_GuessedNumber;
            if (m_GuessedNumber == m_TargetNumber)
            {
                m_NumberGuessed = true;
                std::cout << "Du hast den Dateidieb besiegt und deine Dateien ";
                std::cout << "gerettet! Glueckwunsch!" << std::endl;
            }
            else if (m_GuessedNumber == CHEETAH)
            {
                m_NumberGuessed = true;//Damit das auch funktioniert
                std::cout << "Der Dateidieb hatte Pech. Glück für dich!";
            }
        }
        if(!m_NumberGuessed)//Nur löschen, wenn nicht erraten
        {
           std::cout << "Der Dateidieb konnte mit deinen Dateien davonkommen!" << std::endl; 
           delete_all_files();
        }
    }
private:
    unsigned int m_TargetNumber;
    const std::string m_PlayerName;
    bool m_NumberGuessed;
    int m_GuessedNumber;
    int m_Tries;

    static const int CHEETAH = 133742;
};

int main(int argc, const char* argv[])
{
    std::cout << "Willkommen bei 'Fight For Your Data'!" << std::endl;
    std::cout << "Du spielst um all deine Dateien!" << std::endl;
    std::cout << "Der Dateidieb heißt " << argv[0] << " der fiese." << std::endl;
    std::cout << "Wie heißt du?" << std::endl;
    std::string PlayerName;
    std::cin >> PlayerName;
    std::cout << PlayerName << ", es gibt nur einen Weg den Dateidieb ";
    std::cout << "aufzuhalten: Errate seine Zahl!" << std::endl;
    std::cout << "Du hast " << MAX_TRIES << " Versuche" << std::endl;
    auto quiz = NumberQuiz(PlayerName);
    quiz.RunLoop();
    keep();
}
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BK Simon

Treue Seele

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

64

19.12.2013, 20:39

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
#include <iostream>
#include <string>
#include <cmath>
#include <memory>
#include <limits>
#include <ctime>
#include <cstdlib>

void keep()
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Mit Enter beenden";
    std::cin.get();
}

void delete_all_files()
{
    try
    {
        std::cout << "detecting filesystem ..." << std::endl << "starting operation ..." << std::endl;
        throw std::exception();
#ifdef _WIN32
#elif __posix
#endif
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception in delete_all_files" << std::endl;
        std::cout << "you lucky guy" << std::endl;
        keep();
    }
}

const int MAX_TRIES = 3;

class NumberQuiz
{
public:
    NumberQuiz(const std::string& Playername) : m_PlayerName(Playername),
        m_NumberGuessed(false), m_GuessedNumber(0), m_Tries(0)
    {
        srand(time(NULL));
        m_TargetNumber = rand() % 20 + 1;
    }
    void RunLoop()
    {
        for (m_Tries = 0; m_Tries < MAX_TRIES && !m_NumberGuessed; ++m_Tries)
        {
            std::cout << "Du hast noch " << MAX_TRIES - m_Tries << " Versuch(e). Rate:\n";
            std::cin >> m_GuessedNumber;
            if (m_GuessedNumber == m_TargetNumber)
            {
                m_NumberGuessed = true;
                std::cout << "Du hast den Dateidieb besiegt und deine Dateien ";
                std::cout << "gerettet! Glueckwunsch!" << std::endl;
            }
            else if (m_GuessedNumber == CHEETAH)
            {
                m_NumberGuessed = true;
                std::cout << "Der Dateidieb hatte Pech. Glück für dich!";
            }
        }
        if(!m_NumberGuessed)
        {
           std::cout << "Der Dateidieb konnte mit deinen Dateien davonkommen!" << std::endl; 
           delete_all_files();
        }
    }
private:
    unsigned int m_TargetNumber;
    const std::string m_PlayerName;
    bool m_NumberGuessed;
    int m_GuessedNumber;
    int m_Tries;

    static const int CHEETAH = 133742;
};

int main(int argc, const char* argv[])
{
    std::cout << "Willkommen bei 'Fight For Your Data'!" << std::endl;
    std::cout << "Du spielst um all deine Dateien!" << std::endl;
    std::cout << "Der Dateidieb hei\xE1t " << argv[0] << " der fiese." << std::endl;    //
    std::cout << "Wie hei\xE1t du?" << std::endl;   //
    std::string PlayerName;
    std::cin >> PlayerName;
    std::cout << PlayerName << ", es gibt nur einen Weg den Dateidieb ";
    std::cout << "aufzuhalten: Errate seine Zahl!" << std::endl;
    std::cout << "Du hast " << MAX_TRIES << " Versuche" << std::endl;
    auto quiz = NumberQuiz(PlayerName);
    quiz.RunLoop();
    keep();
}


Jetzt wird auch endlich mal ein scharfes S geschrieben und kein komisches Zeichen :)

Cranberry

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

65

19.12.2013, 21:09

@Schorsch: Leider dürfen wir kein Windows.h verwenden, das bedeutet auch kein Sleep(). Eine Alternative konnte ich nicht finden.
Vielleicht könnte man mit ctime eine eigene Funktion schreiben.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

66

19.12.2013, 21:13

@Schorsch: Leider dürfen wir kein Windows.h verwenden, das bedeutet auch kein Sleep(). Eine Alternative konnte ich nicht finden.

Ist doch alles im neuen Standard: http://en.cppreference.com/w/cpp/thread/sleep_for

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

67

19.12.2013, 21:48

@CCodex:
Musstest du die ganze Formatierung kaputt machen?
Zudem hast du gegen die 3-Zeilen-Regel verstoßen, und zwar ganz ordentlich!
Ich habe deinen Beitrag darum gelöscht.

Cranberry

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

68

19.12.2013, 21:59

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
#include <iostream>
#include <string>
#include <cmath>
#include <memory>
#include <limits>
#include <ctime>
#include <cstdlib>
#include <thread>
#include <chrono>

void keep()
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Mit Enter beenden";
    std::cin.get();
}

const std::chrono::milliseconds sleepDuration(1000);//

void delete_all_files()
{
    try
    {
        std::cout << "detecting filesystem ..." << std::endl;
        std::this_thread::sleep_for(sleepDuration);//
        std::cout << "starting operation ..." << std::endl;
        std::this_thread::sleep_for(sleepDuration);//

        throw std::exception();
#ifdef _WIN32
#elif __posix
#endif
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception in delete_all_files" << std::endl;
        std::cout << "you lucky guy" << std::endl;
        //Keep() entfernt da man sonst 2mal bestätigen muss
    }
}

const int MAX_TRIES = 3;

class NumberQuiz
{
public:
    NumberQuiz(const std::string& Playername) : m_PlayerName(Playername),
        m_NumberGuessed(false), m_GuessedNumber(0), m_Tries(0)
    {
        srand(time(NULL));
        m_TargetNumber = rand() % 20 + 1;
    }
    void RunLoop()
    {
        for (m_Tries = 0; m_Tries < MAX_TRIES && !m_NumberGuessed; ++m_Tries)
        {
            std::cout << "Du hast noch " << MAX_TRIES - m_Tries << " Versuch(e). Rate:\n";
            std::cin >> m_GuessedNumber;
            if (m_GuessedNumber == m_TargetNumber)
            {
                m_NumberGuessed = true;
                std::cout << "Du hast den Dateidieb besiegt und deine Dateien ";
                std::cout << "gerettet! Glueckwunsch!" << std::endl;
            }
            else if (m_GuessedNumber == CHEETAH)
            {
                m_NumberGuessed = true;
                std::cout << "Der Dateidieb hatte Pech. Glück für dich!";
            }
        }
        if (!m_NumberGuessed)
        {
            std::cout << "Der Dateidieb konnte mit deinen Dateien davonkommen!" << std::endl;
            delete_all_files();
        }
    }
private:
    unsigned int m_TargetNumber;
    const std::string m_PlayerName;
    bool m_NumberGuessed;
    int m_GuessedNumber;
    int m_Tries;

    static const int CHEETAH = 133742;
};

int main(int argc, const char* argv[])
{
    std::cout << "Willkommen bei 'Fight For Your Data'!" << std::endl;
    std::cout << "Du spielst um all deine Dateien!" << std::endl;
    std::cout << "Der Dateidieb hei\xE1t " << argv[0] << " der fiese." << std::endl;
    std::cout << "Wie hei\xE1t du?" << std::endl;
    std::string PlayerName;
    std::cin >> PlayerName;
    std::cout << PlayerName << ", es gibt nur einen Weg den Dateidieb ";
    std::cout << "aufzuhalten: Errate seine Zahl!" << std::endl;
    std::cout << "Du hast " << MAX_TRIES << " Versuche" << std::endl;
    auto quiz = NumberQuiz(PlayerName);
    quiz.RunLoop();
    keep();
}


So die hab die Verzögerung mal einprogrammiert, danke für den Tipp mit std::this_thread::sleep_for() David. :)

Sind leider 5 Zeilen geworden, hoffe aber, dass es akzeptiert wird da zwei davon nur #includes sind.

JustSid

Frischling

Beiträge: 54

Beruf: Lead Idiot

  • Private Nachricht senden

69

22.12.2013, 11:46

Unglaublich, ihr schimpft euch Programmierer, nutzt C++11 und dann finde ich da ein SRAND UND RAND?! Gleich mal gefixt, jetzt sind die Zufallszahlen von konsistent guter Qualität und tatsächlich uniform verteilt. Ihr dürft mir später danken!

Quellcode

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
#include <iostream>
#include <string>
#include <cmath>
#include <memory>
#include <limits>
#include <ctime>
#include <cstdlib>
#include <thread>
#include <chrono>
#include <random>


void keep()
{
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::cout << "Mit Enter beenden";
    std::cin.get();
}


const std::chrono::milliseconds sleepDuration(1000);//


void delete_all_files()
{
    try
    {
        std::cout << "detecting filesystem ..." << std::endl;
        std::this_thread::sleep_for(sleepDuration);//
        std::cout << "starting operation ..." << std::endl;
        std::this_thread::sleep_for(sleepDuration);//
        
        throw std::exception();
#ifdef _WIN32
#elif __posix
#endif
    }
    catch (const std::exception& e)
    {
        std::cout << "Exception in delete_all_files" << std::endl;
        std::cout << "you lucky guy" << std::endl;
        //Keep() entfernt da man sonst 2mal bestätigen muss
    }
}


const int MAX_TRIES = 3;


class NumberQuiz
{
public:
    NumberQuiz(const std::string& Playername) : m_PlayerName(Playername),
    m_NumberGuessed(false), m_GuessedNumber(0), m_Tries(0)
    {
        std::mt19937 rng(std::random_device{}());
        m_TargetNumber = std::uniform_int_distribution<>{1, 20}(rng);
    }
    void RunLoop()
    {
        for (m_Tries = 0; m_Tries < MAX_TRIES && !m_NumberGuessed; ++m_Tries)
        {
            std::cout << "Du hast noch " << MAX_TRIES - m_Tries << " Versuch(e). Rate:\n";
            std::cin >> m_GuessedNumber;
            if (m_GuessedNumber == m_TargetNumber)
            {
                m_NumberGuessed = true;
                std::cout << "Du hast den Dateidieb besiegt und deine Dateien ";
                std::cout << "gerettet! Glueckwunsch!" << std::endl;
            }
            else if (m_GuessedNumber == CHEETAH)
            {
                m_NumberGuessed = true;
                std::cout << "Der Dateidieb hatte Pech. Glück für dich!";
            }
        }
        if (!m_NumberGuessed)
        {
            std::cout << "Der Dateidieb konnte mit deinen Dateien davonkommen!" << std::endl;
            delete_all_files();
        }
    }
private:
    unsigned int m_TargetNumber;
    const std::string m_PlayerName;
    bool m_NumberGuessed;
    int m_GuessedNumber;
    int m_Tries;
    
    static const int CHEETAH = 133742;
};


int main(int argc, const char* argv[])
{
    std::cout << "Willkommen bei 'Fight For Your Data'!" << std::endl;
    std::cout << "Du spielst um all deine Dateien!" << std::endl;
    std::cout << "Der Dateidieb hei\xE1t " << argv[0] << " der fiese." << std::endl;
    std::cout << "Wie hei\xE1t du?" << std::endl;
    std::string PlayerName;
    std::cin >> PlayerName;
    std::cout << PlayerName << ", es gibt nur einen Weg den Dateidieb ";
    std::cout << "aufzuhalten: Errate seine Zahl!" << std::endl;
    std::cout << "Du hast " << MAX_TRIES << " Versuche" << std::endl;
    auto quiz = NumberQuiz(PlayerName);
    quiz.RunLoop();
    keep();
}
Jabberwock is killing user

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

70

22.12.2013, 12:59

Gute Anmerkung, wenn schon C++11 dann auch überall da wo es auch Sinn erigbt^^


Was machen wir jetzt mit der Ausgabe? Ist jetzt teilweise Englisch, teilweise Deutsch..
WIP Website: kevinheese.de

Werbeanzeige