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

15.02.2013, 15:29

Ist der Code übersichtlich, gibt es Verbesserungsvorschläge?

Hallo zusammen,

ich habe Heute ein kleines Programm geschrieben auf Grundlage dessen was ich bisher aus dem Buch gelernt habe.
Es ist nichts schwieriges und es läuft wie gedacht.

Nun hätte ich gerne Feedback zur Übersicht des Code´s.
Ist es gut lesbar?


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
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
// Übung für C++
// 1.1
// 
#include <iostream>

using namespace std;

// Hauptprogramm
//
int main ()
{
    // Variablen
    int unsigned nSpieler;                          // Anzahl der Spieler
    int unsigned nSpielerPunkte = 0;                // Punkte des Spielers

    int unsigned nBesterHighscore_SP_E = 50000;     // Derzeitiger Highscore im einfachen Singelplayer
    int unsigned nBesterHighscore_SP_M = 35000;     // Derzeitiger Highscore im mittleren Singelplayer
    int unsigned nBesterHighscore_SP_S = 10020;     // Derzeitiger Highscore im schweren Singelplayer
    int unsigned nBesterHighscore_MP_JgJ = 45100;   // Derzeitiger Highscore im Jeder gegen Jeden Multiplayer
    int unsigned nBesterHighscore_MP_TS = 22000;    // Derzeitiger Highscore im Teamspiel Multiplayer

    char chAuswahl;                                 // Menüauswahl


    // Singelplayer oder Multiplayer?
    cout << "Wie viele Spieler nehmen teil? " << endl;
    cin >> nSpieler;

    // Falsche Angabe < Singelplayer oder Multiplayer
    if (nSpieler == 0)
        {
        cout << "Falsche Angabe" << endl;
        }
    // Singelplayer < Singelplayer oder Multiplayer
    else if (nSpieler == 1)
        {
        cout << "Willkommen im Singelplayer, bestimmen sie die Schwierigkeitsstufe: " << endl;
        cout << " (E)infach  (M)ittel  (S)chwer " << endl;
        cin >> chAuswahl;

        // Einfach < Síngelplayer
        if ((chAuswahl == 'E') || (chAuswahl == 'e'))
            {
            cout << "Sie haben die einfache Schwierigkeitsstufe bestimmt." << endl;
            cout << "(S)tarten oder (H)ighscore ansehen" << endl;
            cin >> chAuswahl;

            // Starten < Einfach
            if ((chAuswahl == 'S') || (chAuswahl == 's'))
                {
                cout << "Viel Spass im Kindergarten" << endl;
                }

            // Highscore < Einfach
            else if ((chAuswahl == 'H') || (chAuswahl == 'h'))
                {
                // Punktzahl eingeben und vergleichen < Highscore
                cout << "Derzeitiger Highscore: " << nBesterHighscore_SP_E << " Punkte!" << endl;
                cout << "Gib deine erreichte Punktzahl ein" << endl;
                cin >> nSpielerPunkte;
                    
                    // Ist der Highscore höher als die erreichten Punkte?
                    if (nSpielerPunkte < nBesterHighscore_SP_E)
                    cout << "Du hast leider keinen neuen Highscore erreicht" << endl;
                    
                    // Ist der Highscore geringer als die erreichten Punkte?
                    if (nSpielerPunkte > nBesterHighscore_SP_E)
                    cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

                    // Ist derHighscore gleich mit den erreichten Punkten?
                    if (nSpielerPunkte == nBesterHighscore_SP_E)
                    cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;
                }   
            //Falsche Angabe < Einfach
            else
                {
                cout << "Falsche Angabe" << endl;
                }
            }

        // Mittel < Singelplayer
        else if ((chAuswahl == 'M') || (chAuswahl == 'm'))
            {
            cout << "Sie haben die mittlere Schwierigkeitsstufe bestimmt." << endl;
            cout << "(S)tarten oder (H)ighscore ansehen" << endl;
            cin >> chAuswahl;

            // Starten < Mittel
            if ((chAuswahl == 'S') || (chAuswahl == 's'))
                {
                cout << "Viel Spass im Spiel" << endl;
                }

            // Highscore < Mittel
            else if ((chAuswahl == 'H') || (chAuswahl == 'h'))
                {
                // Punktzahl eingeben und vergleichen < Highscore
                cout << "Derzeitiger Highscore: " << nBesterHighscore_SP_M << " Punkte!" << endl;
                cout << "Gib deine erreichte Punktzahl ein" << endl;
                cin >> nSpielerPunkte;
                    
                    // Ist der Highscore höher als die erreichten Punkte?
                    if (nSpielerPunkte < nBesterHighscore_SP_M)
                    cout << "Du hast leider keinen neuen Highscore erreicht" << endl;
                    
                    // Ist der Highscore geringer als die erreichten Punkte?
                    if (nSpielerPunkte > nBesterHighscore_SP_M)
                    cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

                    // Ist der Highscore gleich mit den erreichten Punkten?
                    if (nSpielerPunkte == nBesterHighscore_SP_M)
                    cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;
                }
            // Falsche Angabe < Mittel
            else
                {
                cout << "Falsche Angabe" << endl;
                }
            }

        // Schwer < Singelplayer
        else if ((chAuswahl == 'S') || (chAuswahl == 's'))
            {
            cout << "Sie haben die schwere Schwierigkeitsstufe bestimmt, sind sie sicher das sie das wollen? " << endl;
            cout << " (J)a  (N)ein " << endl;
            cin >> chAuswahl;

                // Bestätigung < Schwer

                //Ja < Bestätigung
                if ((chAuswahl == 'J') || (chAuswahl == 'j'))
                {
                cout << "(S)tarten oder (H)ighscore ansehen" << endl;
                cin >> chAuswahl;

                    // Starten < Ja
                    if ((chAuswahl == 'S') || (chAuswahl == 's'))
                    {
                    cout << "Viel Spass in der Unterwelt" << endl;
                    }

                    // Highscore < Ja
                    else if ((chAuswahl == 'H') || (chAuswahl == 'h'))
                    {
                        // Punktzahl eingeben und vergleichen < Highscore
                        cout << "Derzeitiger Highscore: " << nBesterHighscore_SP_S << " Punkte!" << endl;
                        cout << "Gib deine erreichte Punktzahl ein" << endl;
                        cin >> nSpielerPunkte;
                    
                            // Ist der Highscore höher als die erreichten Punkte?
                            if (nSpielerPunkte < nBesterHighscore_SP_S)
                            cout << "Du hast leider keinen neuen Highscore erreicht" << endl;
                    
                            // Ist der Highscore geringer als die erreichten Punkte?
                            if (nSpielerPunkte > nBesterHighscore_SP_S)
                            cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

                            // Ist der Highscore gleich mit den erreichten Punkten?
                            if (nSpielerPunkte == nBesterHighscore_SP_S)
                            cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;
                    }
                    // Falsche Angabe < Ja 
                    else
                    {
                    cout << "Falsche Angabe" << endl;
                    }
                }

                // Nein < Bestätigung
                else if ((chAuswahl == 'N') || (chAuswahl == 'n'))
                {
                cout << "Verlassen sie das Spiel!" << endl;
                }

                // Falsche Angabe < Bestätigung
                else
                {
                cout << "Falsche Angabe" << endl;
                }
            }

        // Falsche Angabe < Singelplayer
        else
            {
            cout << "Falsche Angabe" << endl;
            }
        }

    // Multiplayer < Singelplayer oder Multiplayer
    else
        {
        cout << "Willkommen im Multiplayer, bestimmen sie den Spielmodus" << endl;
        cout << "  (J)eder gegen Jeden  (T)eamspiel  " << endl;
        cin >> chAuswahl;

            // Jeder gegen Jeden < Multiplayer
            if ((chAuswahl == 'J') || (chAuswahl == 'j'))
            {
            cout << "(S)tarten oder (H)ighscore ansehen" << endl;
            cin >> chAuswahl;

                // Starten < Jeder gegen Jeden
                if ((chAuswahl == 'S') || (chAuswahl == 's'))
                {
                cout << "Viel Spass bei Jeder gegen Jeden!" << endl;
                }

                // Highscore < Jeder gegen Jeden
                else if ((chAuswahl == 'H') || (chAuswahl == 'h'))
                {
                // Punktzahl eingeben und vergleichen < Highscore
                cout << "Derzeitiger Highscore: " << nBesterHighscore_MP_JgJ << " Punkte!" << endl;
                cout << "Gib deine erreichte Punktzahl ein" << endl;
                cin >> nSpielerPunkte;
                    
                    // Ist der Highscore höher als die erreichten Punkte?
                    if (nSpielerPunkte < nBesterHighscore_MP_JgJ)
                    cout << "Du hast leider keinen neuen Highscore erreicht" << endl;
                    
                    // Ist der Highscore geringer als die erreichten Punkte?
                    if (nSpielerPunkte > nBesterHighscore_MP_JgJ)
                    cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

                    // Ist der Highscore gleich mit den erreichten Punkten?
                    if (nSpielerPunkte == nBesterHighscore_MP_JgJ)
                    cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;
                }
                // Falsche Angabe < Jeder gegen Jeden
                else
                {
                cout << "Falsche Angabe" << endl;
                }
            }

            // Teamspiel < Multiplayer
            else if ((chAuswahl == 'T') || (chAuswahl == 't'))
            {
            cout << "(S)tarten oder (H)ighscore ansehen" << endl;
            cin >> chAuswahl;

                // Starten < Teamspiel
                if ((chAuswahl == 'S') || (chAuswahl == 's'))
                {
                cout << "Viel Spass beim Teamspiel" << endl;
                }

                // Highscore < Teamspiel
                else if ((chAuswahl == 'H') || (chAuswahl == 'h'))
                {
                // Punktzahl eingeben und vergleichen < Highscore
                cout << "Derzeitiger Highscore: " << nBesterHighscore_MP_TS << " Punkte!" << endl;
                cout << "Gib deine erreichte Punktzahl ein" << endl;
                cin >> nSpielerPunkte;
                    
                    // Ist der Highscore höher als die erreichten Punkte?
                    if (nSpielerPunkte < nBesterHighscore_MP_TS)
                    cout << "Du hast leider keinen neuen Highscore erreicht" << endl;
                    
                    // Ist der Highscore geringer als die erreichten Punkte?
                    if (nSpielerPunkte > nBesterHighscore_MP_TS)
                    cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

                    // Ist der Highscore gleich mit den erreichten Punkten?
                    if (nSpielerPunkte == nBesterHighscore_MP_TS)
                    cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;
                }
                // Falsche Angabe
                else
                {
                cout << "Falsche Angabe" << endl;
                }
            }

            // Falsche Angabe
            else
            {
            cout << "Falsche Angabe" << endl;
            }
        }

    return 0;

}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

15.02.2013, 15:38

Ich hab mir den Code nicht Zeile für Zeile angeguckt sondern nur grob drauf geguckt. Was mir dabei auffällt ist dass alles in einer Methode steht. Versuch doch vielleicht Teile vom Code zu Funktionen zusammen zu fassen. Wenn du die sinnvoll benennst ist gleich klar was passiert. Manche setzen sich die Richtlinie, dass eine Funktion nur so lang sein darf, dass sie auf einen Bildschirm passt. So extrem kann und muss man das natürlich nicht angehen, aber es steckt schon Sinn dahinter.
Des weiteren würde ich deine Benennung von Variablen überdenken. Deine Variablen fangen mit n an, was du vermutlich aus irgendeinem Buch übernommen hast. Das beruht auf der ungarischen Notation. Das ist eigentlich heutzutage veraltet. Wenn du deine Variablen klug benennst, ist normal sofort ersichtlich worum es sich bei der Variable handelt. Und heutige IDE's (Visual Studio zum Beispiel) verraten dir den Datentyp einer Variable wenn du die Maus über sie hälst. Der Vorteil, wenn du deine Variablen nicht mit so einem Präfix beginnen lässt, ist die Kürze und die einfachere Lesbarkeit. Ein paar Beispiele:
nCounter <-> counter
bFlag <-> flag
bIsRunning <-> isRunning
nHighscore <-> highscore
Schlimmer wirds dann wenn noch mit Zeigern gearbeitet wird und man irgendwelche Kombinationen aus Präfixen hat. Das sind die zwei Vorschläge die ich dir spontan mache.
„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.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

15.02.2013, 15:41

Nun hätte ich gerne Feedback zur Übersicht des Code´s.


Was mir erstmal auffällt: int unsigned. Normalerweise schreibt man unsigned int.

Was die Übersicht angeht ... da gibt es keine!
Es ist ein einziger zusammenhängender Haufen Code ohne jede Struktur, alles in dieselbe Funktion gepresst.
Versuch mal ein paar Teile in separate Funktionen auszulagern.

Und übrigens, vor dem Genitiv-"s" schreibt man kein Apostroph ("des Codes" ist richtig, "des Code´s" ist falsch).

4

15.02.2013, 15:54

Nur 2 Kleinigkeiten:

C-/C++-Quelltext

1
2
                cout << "Derzeitiger Highscore: " << nBesterHighscore_MP_JgJ << " Punkte!" << endl;
                cout << "Gib deine erreichte Punktzahl ein" << endl;

kann man auch als:

C-/C++-Quelltext

1
2
                cout << "Derzeitiger Highscore: " << nBesterHighscore_MP_JgJ << " Punkte!" << endl
                       << "Gib deine erreichte Punktzahl ein" << endl;

schreiben. Ist evtl. etwas hübscher, läuft aber natürlich auf genau das selbe hinaus.

Bei

C-/C++-Quelltext

1
                else if ((chAuswahl == 'N') || (chAuswahl == 'n'))

wäre ein

C-/C++-Quelltext

1
                else if (( 'N'==chAuswahl) || ('n'==chAuswahl))

schöner. Denn es macht Sinn, den konstanten Wert nach links zu schreiben, solltest du ein = vergessen und 5=x statt 5==x schreiben, bekommst du einen Kompilerfehler, bei x=5 statt x==5 dagegen kompiliert der Code, aber tut nicht das, was er soll. Ist mir in den letzten 10 Jahren zwar ungefähr 2 mal passiert, aber es kostet ja nichts, das so rum zu schreiben, und 2 mal weniger debuggen ist auch schon was.

Ansonsten: Das Hauptproblem ist wie schon angesprochen die Strukturierung des Codes.
Lieber dumm fragen, als dumm bleiben!

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

15.02.2013, 16:17

Viel zu viele Kommentar. Der Rest wurde schon gesagt.

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

6

15.02.2013, 18:51

Also neben dem was die anderen gesagt haben würde mir noch einfallen kein globales (am besten gar kein) using namespace zu verwenden. Du solltest auch bestrebt sein deinen Code „flach“ zu halten, möglichst wenig Schleifentiefen. Die können ohne dass sie so aussehen böses laufzeitverhalten erzeigen zudem wird der Code schlecht lesbar.

Ich war mal so frech und hab ein bisschen an deinem Code rumgebastelt, da ist immer noch einiges zu machen aber ich wollte ihn mal etwas aufteilen (Und hab versucht es so zu halten ohne viel Neues rein zu bringen). Ich fand es am Anfang immer schwer sinnvolle Funktionen zu finden. Aber für mich ist es ein guter Anhaltspunkt Funktionen oder Templates zu verwenden wenn ich mich anfange im Code zu wiederholen.

Was ich jetzt nicht gemacht habe, aber du machen solltest. Du solltest nicht auf groß und Kleinschreibung vergleichen, sondern es in eine einheitliche Form umwandeln und mit der dann arbeiten. Generell klein oder eben groß. (Meine bei deiner Eingabe).

Aber gleich dazu, jeder macht und mag es immer etwas anders. Da solltest du einfach deinen Weg finden. Und jeder hat so seine Macken ;)

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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
// Übung für C++
// 1.1
// 
#include <iostream>
#include <string>

namespace {
    /// <summary>Dialogmenu des Einspieler Spiels</summary>
    auto EinspielerDialog() -> void;

    /// <summary>Dialogmenu des Mehrspieler Spiels</summary>
    auto MehrspielerDialog() -> void;

    /// <summary>Einspieler Spiels</summary>
    /// <param name="begruessung">[in] Begruessungsnachricht</param>
    auto EinspielerSpiel(const std::string begruessung) -> void;

    /// <summary>Mehrspieler Spiel</summary>
    /// <param name="begruessung">[in] Begruessungsnachricht</param>
    auto MehrspielerSpiel(const std::string begruessung) -> void;

    /// <summary>Fehlerbehandlung bei falscher Angabe</summary>
    auto FalscheAngabe() -> void;

    /// <summary>Zeigt den Highscore und die Spielerpunkte an.</summary>
    /// <param name="highscore">Der Highscore.</param>
    /// <returns>Die Punkte des Spielers.</returns>
    auto HighscoreAnzeigen(unsigned int highscore) -> unsigned int;
}

// ----------------------------------------------------------------------------------------------------------
// Anwendungs-Einstiegs-Punkt
// ----------------------------------------------------------------------------------------------------------
/// <summary>Anwendungs Einstieg.</summary>
/// <returns>Anwendungsfehlercode</returns>
int main ()
{
    using std::cout;
    using std::cin;
    using std::endl;

    int unsigned spielerzahl;                          // Anzahl der Spieler

    // Singelplayer oder Multiplayer?
    cout << "Wie viele Spieler nehmen teil? " << endl;
    cin >> spielerzahl;

    if (spielerzahl == 0)
    {
        FalscheAngabe();
        exit(0);
    }

    switch (spielerzahl)
    {
    case 0:
        FalscheAngabe();
        break;
    case 1:
        EinspielerDialog();
        break;
    default:
        MehrspielerDialog();
        break;
    }

    return 0;
}

namespace {
    // ------------------------------------------------------------------------------------------------------
    // EinspielerDialog
    // ------------------------------------------------------------------------------------------------------
    auto EinspielerDialog() -> void
    {
        using std::cout;
        using std::cin;
        using std::endl;
        using std::string;

        cout << "Willkommen im Singelplayer, bestimmen sie die Schwierigkeitsstufe: " << endl;
        cout << " (E)infach  (M)ittel  (S)chwer " << endl;
        char auswahl;
        cin >> auswahl;

        string begruessung;
        unsigned int highscore = 0;
        switch (auswahl)
        {
        case 'E':
            cout << "Sie haben die einfache Schwierigkeitsstufe bestimmt." << endl;
            begruessung = "Viel Spass im Kindergarten";
            highscore = 50000;
            break;
        case 'M':
            cout << "Sie haben die mittlere Schwierigkeitsstufe bestimmt." << endl;
            begruessung = "Viel Spass im Spiel";
            highscore = 30000;
            break;
        case 'S':
            cout << "Sie haben die schwere Schwierigkeitsstufe bestimmt." << endl;
            begruessung = "Viel Spass in der Unterwelt";
            highscore = 10000;
            break;
        default:
            FalscheAngabe();
            exit(0);
            break;
        }

        cout << "(S)tarten oder (H)ighscore ansehen" << endl;
        cin >> auswahl;

        switch(auswahl)
        {
        case 'S':
            EinspielerSpiel(begruessung);
            break;
        case 'H':
            HighscoreAnzeigen(highscore);
            break;
        default:
            FalscheAngabe();
            exit(0);
            break;
        }
    }

    // ------------------------------------------------------------------------------------------------------
    // MehrspielerDialog
    // ------------------------------------------------------------------------------------------------------
    auto MehrspielerDialog() -> void
    {
        using std::cout;
        using std::cin;
        using std::endl;
        using std::string;

        cout << "Willkommen im Multiplayer, bestimmen sie den Spielmodus" << endl;
        cout << "  (J)eder gegen Jeden  (T)eamspiel  " << endl;
        char auswahl;
        cin >> auswahl;

        string begruessung;
        unsigned int highscore = 0;
        switch (auswahl)
        {
        case 'J':
            begruessung = "Viel Spass bei Jeder gegen Jeden!";
            highscore = 45000;
            break;
        case 'T':
            begruessung = "Viel Spass beim Teamspiel";
            highscore = 22000;
            break;
        default:
            FalscheAngabe();
            exit(0);
            break;
        }

        cout << "(S)tarten oder (H)ighscore ansehen" << endl;
        cin >> auswahl;

        switch(auswahl)
        {
        case 'S':
            MehrspielerSpiel(begruessung);
            break;
        case 'H':
            HighscoreAnzeigen(highscore);
            break;
        default:
            FalscheAngabe();
            exit(0);
            break;
        }
    }

    // ------------------------------------------------------------------------------------------------------
    // EinspielerSpiel
    // ------------------------------------------------------------------------------------------------------
    auto EinspielerSpiel(const std::string begruessung) -> void
    {
        using std::cout;
        using std::endl;

        cout << begruessung << endl;
    }

    // ------------------------------------------------------------------------------------------------------
    // MehrspielerDialog
    // ------------------------------------------------------------------------------------------------------
    auto MehrspielerSpiel(const std::string begruessung) -> void
    {
        using std::cout;
        using std::endl;

        cout << begruessung << endl;
    }

    // ------------------------------------------------------------------------------------------------------
    // FalscheAngabe
    // ------------------------------------------------------------------------------------------------------
    auto FalscheAngabe() -> void
    {
        using std::cout;
        using std::endl;

        cout << "Falsche Angabe!" << endl;
    }

    // ------------------------------------------------------------------------------------------------------
    // HighscoreAnzeigen
    // ------------------------------------------------------------------------------------------------------
    auto HighscoreAnzeigen(unsigned int highscore) -> unsigned int
    {
        using std::cout;
        using std::cin;
        using std::endl;

        unsigned int spielerpunkte;

        cout << "Derzeitiger Highscore: " << highscore << " Punkte!" << endl;
        cout << "Gib deine erreichte Punktzahl ein" << endl;
        cin >> spielerpunkte;

        if (spielerpunkte < highscore)
            cout << "Du hast leider keinen neuen Highscore erreicht" << endl;

        if (spielerpunkte > highscore)
            cout << "Glueckwunsch du hast den Highscore geknackt!!" << endl;

        if (spielerpunkte == highscore)
            cout << "Das war knapp viel Erfolg beim naechsten Versuch!" << endl;

        return spielerpunkte;
    }
}
// -------------------------------------------------------------------------------------------------------END
:love: := Go;

7

15.02.2013, 19:24

Hm, interessant, die Variante mit "auto HighscoreAnzeigen(unsigned int highscore) -> unsigned int" statt "unsigned int HighscoreAnzeigen(unsigned int highscore)" kannte ich noch nicht, aber hat das auch irgendeinen Vorteil?

Ansonsten muss ich sagen, dass ich using am Anfang von cpp Dateien schon überaus sinnvoll finde, denn mal ehrlich, wenn man innerhalb einer Übersetzungseinheit so viele doppelte Namen hat, ist eh was am Design gehörig daneben. So viel Überblick über die vorhandenen Symbole sollte man da schon haben. Aber das ist vielleicht ein Thema für einen anderen Thread, es ist auf jeden Fall auch sehr nützlich mal ein lokales using gesehen zu haben.
Lieber dumm fragen, als dumm bleiben!

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

8

15.02.2013, 19:38

Im Zusammenhang mit Templates hat sie einen. Ich persönlich mag sie aber auch lieber lesen… frag mich nicht wieso.
So muss ich dir mit dem using namespace recht geben, man selbst kann das. Es war auch eher auf die Verwendung von Bibliotheken bezogen, dort werden gern mal Namen wie Value verwendet und da hat man dann nicht wirklich Einfluss drauf wo welches denn grad herkommt wenn man die using Reihenfolge nicht einhält und bekommt die buntesten Meldungen. Wenn using namespace würde ich es nur in einem Block verwenden.
:love: := Go;

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

9

16.02.2013, 12:18

Was mir am meisten auffällt (neben den fehlenden Funktionen) ist, dass du inkonsistente Einrückungen hast.

Am Anfang steht das:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Falsche Angabe < Singelplayer oder Multiplayer
    if (nSpieler == 0)
        {
        cout << "Falsche Angabe" << endl;
        }
    // Singelplayer < Singelplayer oder Multiplayer
    else if (nSpieler == 1)
        {
        cout << "Willkommen im Singelplayer, bestimmen sie die Schwierigkeitsstufe: " << endl;
        cout << " (E)infach  (M)ittel  (S)chwer " << endl;
        

später dann wieder das:

C-/C++-Quelltext

1
2
3
4
5
// Falsche Angabe < Bestätigung
                else
                {
                cout << "Falsche Angabe" << endl;
                }


1. Mach das konsistent und
2. Mach die Einrückungen sinnvoll.

Ich denke es ist weitestgehend akzeptiert, dass man so einrückt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
if(...)
{
    cout << "Falsche Angabe" << endl;
}
else
{
    cout << "Richtige Angabe" << endl;
}

um unnötige Diskussionen vorzubeugen. Das hier finden einige auch Ok (finde ich persönlich nicht so übersichtlich, aber ist wohl Geschmackssache):

C-/C++-Quelltext

1
2
3
4
5
6
if(...){
    cout << "Falsche Angabe" << endl;
}
else{
    cout << "Richtige Angabe" << endl;
}


Auch bei Bedingungen, die nur eine Zeile Codeblock haben und somit keine Klammern sollte der Codeblock eingerückt werden (machst du z.B. auch nicht).

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

10

16.02.2013, 15:17

Zitat

Hm, interessant, die Variante mit "auto HighscoreAnzeigen(unsigned int highscore) -> unsigned int" statt "unsigned int HighscoreAnzeigen(unsigned int highscore)" kannte ich noch nicht, aber hat das auch irgendeinen Vorteil?
Wenn man schon weiß, was es zurück gibt, oder zu Mindest 'ne Ahnung hat, stört es nur, im besten Fall ewig lang definierte Rückgabetypen zu lesen. Daher sind sie hinten geschickter. Ein einfacheres Beispiel als Templates wäre auch derart offensichtliches:

C-/C++-Quelltext

1
2
3
4
5
iterator_t       iterator()  const noexcept;
const_iterator_t citerator() const noexcept;
// vs.
auto iterator()  const noexcept -> iterator_t
auto citerator() const noexcept -> const_iterator_t
Hat sich zwar noch nicht in meine Codes eingefunden, aber das liegt eher daran, dass der Nutz-Faktor bei mir noch nicht über hübschere Einrückung hinaus geht.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige