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

Mr-Black

Frischling

  • »Mr-Black« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Zu Hause

Beruf: Koch

  • Private Nachricht senden

21

24.07.2014, 21:40

Demm namen nach ist das in english oder ?
wenn ja da hab ich so meine probleme fürs verstehn der meisten sachen reicht mein english.
Aber um ein ganzes buch ab zu arbeiten da wirds dann schon hard an / über die grenze.
Si vis pacem para bellum = Wer den Frieden sucht, muss sich für den Krieg rüssten

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

22

24.07.2014, 21:59

Gibt es auch auf Deutsch (Das Buch ist jedoch KEIN Anfaengerbuch. Jedoch serh gut um die Kenntnisse spaeter zu vertiefen):
[amazon]3827330467[/amazon]

Ich wuerde aber Empfehlen mehr Englisch zu lesen, da die besten Informationen idR im Englischen zu finden sind.

Mr-Black

Frischling

  • »Mr-Black« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Zu Hause

Beruf: Koch

  • Private Nachricht senden

23

24.07.2014, 22:33

Danke xardias.
Hab mir denn link gleich mal gespeichert.

ja also english lesen ist jetzt nicht das problem ^^.
Aber es ist halt ein unterschied mal 10 - 20 sätze zu lesen nd zu verstehn.

Als ein ganzes Buch^^ das meinte ich damit. ist jetzt nicht so als ob ich kein english könnte.

aber noch mals danke für denn link ist schon im waren korb und bestellt ^^ und das es kein anfänger BUch war mir klar da der vorredner meinte wenn ich mit C++ für Spiele Programirung gurch bin ^^ sollte ich es mir mal an schaun da her kann ich ja davon aus gehn das nix für anfänger ist =)

Ich möchte mich aber noch mal bei allen bedanken die mir hier die netten FeedBacks gegeben haben. sowas bin ich von anderen Foren.
Nicht gewohnt. nice COM hier =)
Si vis pacem para bellum = Wer den Frieden sucht, muss sich für den Krieg rüssten

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

24

25.07.2014, 07:23

Mein Vorschlag nach dem ersten Kaffee heute morgen

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
#include <iostream>

using namespace std;

struct GameData {
  
  int spieler;
  char modus;
  int level;  

  GameData()  : spieler(0) , modus('x') , level(0) {}

};

int getPlayers() {
    int players = 0;
    cout << "Willkommen im Spiel." << endl;
    cout << "Bitte Wählen sie die Anzahl der Spieler aus : 0 , 1 , 2 , 3 , 4 Spieler, vobei 0 SPieler das Spiel Beendet." << endl;
    cout << "Hier bitte die anzahl der SPielr Schreiben : ";
    cin >> players;
    return players;
}

int getLevel(int minLevel,int maxLevel) {
    int level = 0;    
    cout << "Bitte wähle ein Level";
    cin >> level;    
    if ( level < minLevel || level > maxLevel ) {
        cout << "Dises level existirt nicht, Programm wird Beendet.";
        // mark level as invalid by using -1
        level = -1;
    }
    return level;
}

char getModues() {
    char modus = 'x';
    cout << "Willkommen im Multiplayer Modus." << endl;
    cout << "Wollt ihr im (J)eder gegen Jeden Modus spielen? dann Drück bitte J und dann Enter." << endl;
    cout << "Oder" << endl;
    cout << "Wollt ihr im (T)eam Modus ihr gegen denn PC Spielen? dann Drück bitte T und dann Enter." << endl;
    cout << "J/T : ";
    cin >> modus;
    return modus;
}

int main () {
    GameData data;

    data.spieler = getPlayers();

    if ( data.spielter == 0)  {
        cout << "Danke für das Spielen.";
    }
    else if ( data.spieler == 1) {
        cout << "Willkommen im Singel Palayer Modus." << endl;
        data.level = getLevel(1,3);
    }
    else {
        data.modues = getModus();
    }

    cout << "Spieler: " << data.spieler << endl;
    cout << "Level: " << data.level << endl;
    cout << "Modus: " << data.modus << endl;

    if (data.spieler > 1 ) {
        cout << "Willkommen im Multiplayer Modus." << endl;
        if (data.modus == 'J') {
            cout << "Willkommen im Modus Jeder Gegen Jeden, Hier ist alles erlaubt." << endl;
            data.level = getLevel(1,3);
        }
        else if (ch_Modus == 'T') {
            cout << "Willkommen im Team Modus, Macht denn PC plat Jungs." << endl;
            data.level = getLevel(1,3);
        }
        else {
            cout << "Disen Modus Gibt es nicht, Programm wird Beendet.";
        }
            
    }   

return 0;

}

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

25

25.07.2014, 13:36

Schon strukturierter.
Ich frage mich langsam echt ihr an diesem "endl" habt. Das täte es besser:

C-/C++-Quelltext

1
2
3
4
5
cout << "Willkommen im Multiplayer Modus.\n"
    "Wollt ihr im (J)eder gegen Jeden Modus spielen? dann Drück bitte J und dann Enter.\n"
    "Oder\n"
    "Wollt ihr im (T)eam Modus ihr gegen denn PC Spielen? dann Drück bitte T und dann Enter.\n"
    "J/T : ";


Kritisieren würde ich außerdem:
  1. Hier geht es richtig übel her im Quellcode mit dem "Denglisch". "getPlayers" aber "spieler" usw. Man muss sich schon für eine Sprache entscheiden und bei den meisten Programmiersprachen gibt es kaum eine andere sinnvolle Wahl als Englisch.
  2. Die Funktionen sollten Memberfunktionen sein.
  3. Es wären noch mehr Funktionen sinnvoll. (Eigentlich das meiste im "main")
  4. Inkonsistente Formatierungen
  5. "using namespace std;" würde ich mir auch eher mal abgewöhnen.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

26

25.07.2014, 14:50

Ich verstehe das Problem mit endln nicht. Es ist schon ein Unterschied zwischen "\n" und endln, denn zweiteres sorgt für einen flush des verwendeten Buffers.
Eventuell möchte er das so. Darum würde ich das nicht generell als besser darstellen, denn wir wissen nicht was er möchte.
Die Namen habe ich so gelassen wie er sie bereits hatte.

Das die Funktionen Memberfunktionen sein sollen halte ich für völlig abwegig. Denn dann müßte man ja erst einmal eine Klasse erstellen.
Was wäre aber der Inhalt der Klasse aus fachlicher Sicht? Eine "HandleGameData" Klasse? Welche Zustände oder Attribute sollte diese Klasse haben?
Es wäre nur unnötiger Overhead. Darum reichen die Funktionen vollkommen aus. Hier wäre jeglicher OOP Ansatz wirklich überflüssig.

Noch mehr aus der main Methode herausziehen ergibt aus meiner Sicht auch keinen Sinn. Denn in der main Methode steckt die ganze Logik drin.
Die alten Redundanzen sind raus.

Warum Du auch unbestimmt das "using namespace std;" raus haben willst, kann ich nicht nachvollziehen. Das ist eine völlig legitime Verwendung hier.
Lediglich in Header Files sollte man tunlichst darauf verzichten, denn man weiß ja nie wer diesen Header einbindet und dann dieses "using" mit am Hals hat.
Aber in diesem Fall vollkommen in Ordnung und genau dafür ist das "using" auch eingeführt worden.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

27

25.07.2014, 15:19

Zitat von »buggypixels«

Eventuell möchte er das so. Darum würde ich das nicht generell als besser darstellen, denn wir wissen nicht was er möchte.

Doch. Er möchte Text ausgeben mit einem Zeilenumbruch. Das wissen wir. Den Nebeneffekt mit dem Flush war im vermutlich bisher schlicht gar nicht bekannt. Es ist einfach bloß schwachsinnig an zufälligen Stellen einfach mal den Stream zu flushen. Man könnte auch sagen, wir wissen nicht, ob er eine Struktur oder Methoden verwenden will. Darum geht es aber überhaupt nicht. Wir wissen was er erreichen will und dafür sind Methoden ebenso wie normale Zeilenumbrüche die richtige Wahl. Das Thema gibt es um vorzuschlagen, was besser gemacht werden könnte.

Zitat von »buggypixels«

Die Namen habe ich so gelassen wie er sie bereits hatte.

Dann hätte es konsequenter Weise auch "GebeSpieler" anstatt "GetPlayer" heißen müssen. Außerdem geht es gerade darum es anders(besser) zu machen.

Zitat von »buggypixels«

Das die Funktionen Memberfunktionen sein sollen halte ich für völlig abwegig.

Warum?

Zitat von »buggypixels«

Denn dann müßte man ja erst einmal eine Klasse erstellen.

Genau das hast du getan. Eine Struktur ist das selbe wie eine Klasse.

Zitat

Welche Zustände oder Attribute sollte diese Klasse habe

Zum Beispiel die Methode "GetPlayers()" und in dem Beispiel alles andere.

Zitat von »buggypixels«

Es wäre nur unnötiger Overhead.

Membermethoden besitzen keinen wirklichen Overhead gegenüber freien Methoden. Der Unterschied ist hauptsächlich stilistisch. Es gibt einen "versteckten" "this" Parameter und die Methode ist aufgeräumt und hängt nicht mehr lose rum. Das ist so ungefähr der Unterschied.

Zitat von »buggypixels«

Hier wäre jeglicher OOP Ansatz wirklich überflüssig.

Bei der Aufgabenstellung wäre das ohne Zweifel der sauberste Ansatz. Wenn man mit OO beginnt, wie du, ist es sinnvoll diesen Ansatz auch zu Ende zu denken. Und das führt zu Membermethoden.

Zitat von »buggypixels«

Denn in der main Methode steckt die ganze Logik drin.

Das ist das "Problem". Eine Methode die mehrere Aufgaben hat. Es ist besser wartbar wenn man die Methode weiter nach Teilaufgaben aufteilt.
In dem Fall scheinen mir eindeutig mehrere klar trennbare Aufgaben auslagerbar zu sein.

Zitat von »buggypixels«

Warum Du auch unbestimmt das "using namespace std;" raus haben willst, kann ich nicht nachvollziehen. Das ist eine völlig legitime Verwendung hier. Lediglich in Header Files sollte man tunlichst darauf verzichten, denn man weiß ja nie wer diesen Header einbindet und dann dieses "using" mit am Hals hat.

Das stimmt zwar prinzipiell schon, allerdings ist man nunmal Gewohnheitsmensch. Gewöhnt man sich erstmal an, den Namensraum nicht explizit anzugeben sondern immer mit "using namespace ..." einzuschleifen, passiert das nachher sehr leicht auch versehentlich an anderen Stellen. Außerdem ermöglicht es es auf den ersten Blick zu erkennen, dass es sich um eine STL Methode handelt. Für einen Anfänger wahrscheinlich noch wertvoller als für Erfahrenere, die wissen, was alles zu "std" gehört. Meiner Persönlichen Meinung nach, ist es auch definitiv kurz genug, als das es nicht besonders anstrengend ist.
Wenn man natürlich immer "endl" damit auszeichnen muss, wird es vielleicht störend lang. ;)

Generell scheint mir, dass es dir mehr darum geht den bestehenden Code von dir zu verteidigen. Es geht aber eher darum ihn weiter zu verbessern. In einem Minimalbeispiel wie dem Coden hier ist im Prinzip alles wurscht. Man könnte auch die Variablen mit Buchstaben alphabetisch mit Buchstaben benennen, wie ich das ganz gern gemacht habe, als ich damals in VBA angefangen habe. In dem Code wäre das egal. Er ist kurz genug und wird nicht Jahrelang gewartet und erweitert werden. Aber das macht all diese Dinge, wie mein Extrembeispiel, natürlich nicht besser und wenn man sich um sauberen Stil Gedanken macht, sollte man gerade danach schauen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (25.07.2014, 15:24)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

28

25.07.2014, 16:24

Es ist immer schön wenn einer den totalen Durchblick hat und uns alle erhellen kann. Meine Meinung ist die einzig richtige. Das beschreibt so einige Leute hier im Forum. Meiner Meinung nach wird die Diskussion hier unsinnig. Es geht wieder um persönliche Vorlieben und der Threadersteller kann die antworten nicht richtig bewerten um den für sich schönsten und besten weg zu finden. Ich klink mich hier wieder aus und das selbe würde ich dem Threadersteller auch vorschlagen. Lieber Erfahrung sammeln und dann selbst gucken.
„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.“

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

29

25.07.2014, 16:48

Ich programmiere übrigens komplett auf Deutsch. Wegen der Kürze nehme ich trotzdem Get und Set für Auslesen bzw. Schreiben eines Wertes. Und weißt Du was? Nach wenigen Stunden hast Du Dich dran gewöhnt.

Allgemein finde ich es gut, dass der OP nach gutem Stil fragt und lernen möchte. Zu diesem kleinen Stück Code ist aber inzwischen alles gesagt, glaube ich. Schreib was größeres, Mr-Black! Damit kannst Du dann gern wiederkommen und es wieder kritisieren lassen :-)

Allgemein: bleib dran, probier Dinge aus. Du kannst nichts kaputt machen! Also keine Sorge. Solange Du neugierig bleibst und immer wieder Neues ausprobierst, wirst Du bald ein guter Programmierer werden.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

25.07.2014, 17:01

Ich programmiere übrigens komplett auf Deutsch.
Das is'n Scherz, richtig?
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]

Werbeanzeige