Montag, 27. August 2012

Verzweigen mit switch und case

Wie im letzten Beitrag geht es auch nun wieder um Verzweigungen innerhalb eines Programms. Diesmal werde ich euch eine Alternative zu if, else und else if vorstellen. Es handelt sich dabei, welch Überraschung, um switch und case. Diese Methode macht meist dann Sinn, wenn man sehr viele Bedingungen hintereinander prüfen will, da dadurch der Schreibaufwand verringert wird. Nun kommt aber wie immer erst der Code und danach die Erklärung.
01: #include <iostream>
02: 
03: using namespace std;
04:
05: int main()
06: {
07:     //Steuerung mit den Tasten 'W', 'S', 'A' und 'D' realisieren
08:     char chTaste;
09:
10:     switch (chTaste)
11:     {
12:       case ('w'):
13:       {
14:         cout << "Spieler geht vorwärts.\n";
15:       } break;
16:       case ('s'):
17:       {
18:         cout << "Spieler geht rückwärts.\n";
19:       } break;
20:       case ('a'):
21:       {
22:         cout << "Spieler geht nach links.\n";
23:       } break;
24:       case ('d'):
25:       {
26:         cout << "Spieler geht nach rechts.\n";
27:       } break;
28:       default:
29:       {
30:         cout << "Falsche Eingabe!\n"
31:       }
32:     }
33:
34:     //Nach dem break geht es hier weiter
35:     system("pause");
36:
37:     return 0;
38: }
Dieses Programm soll zeigen, wie in einem Spiel die Steuerung mit der Tastatur realisiert werden kann. Natürlich ist dieser Code in einem richtigen Spiel nicht zu gebrauchen, da hier lediglich eine Meldung ausgegeben wird, wenn eine Bedingung zutrifft, aber in diesem Beispiel geht es auch in erster Linie um die switch und case-Bedingung und nicht um die Steuerung in einem Spiel.

Um switch und case benutzen zu können muss man sich zunächst eine Variable erstellen, die geprüft werden soll, in diesem Beispiel 'chTaste'. Diese schreibt man nun in runden Klammern hinter die switch-Anweisung. Danach folgt ein Block aus case-Anweisungen, die Bedingung wird ebenfalls in runden Klammern hinter das Schlüsselwort case gesetzt. Hier ist jedoch darauf hinzuweisen, dass die Bedingung hinter dem case nicht wie bei einer if-Bedingung nicht zwangsläufig in Klammern stehen muss. Hinter der Bedingung folgt dann noch ein Doppelpunkt, der die Bedingung abschliesst. Trifft eine Bedingung zu, z.B. beim drücken der Taste W, so wird der darunterstehende Code ausgeführt. Folgt, wie in diesem Beispiel ein break, so werden alle weiteren case-Anweisungen übersprungen und nach dem switch-case-Block fortgefahren. Jedoch kann es auch vorkommen, dass man sich vertippt und anstallt W die Taste E drückt, in diesem Fall kommt die default-Anweisung ins Spiel. Diese ersetzt sozusagen das Schlüsselwort else aus dem vorherigen Beitrag. In einem switch-case-Block kümmert sich das default also um alle anderen Eingaben oder Bedingungen, die man in seinem Programm nicht benötigt.

Dienstag, 14. August 2012

Bedingungen in C++

Das A und O eines jeden Programmes ist, auf verschiedene Situationen unterschiedlich zu reagieren. Ein Beispiel wäre: Wenn die Esc-Taste gedrückt wurde wird das Programm beendet. In C++ gibt es dafür verschiedene Möglichkeiten, die sehr einfach zu verstehen sind. Fangen wir einfach mal an.

Die if-Bedingung

Die if-Bedingung wird in der Regel immer dann benutzt, wenn man bestimmte Werte oder Operanden miteinander vergleichen will. Im folgenden Code sieht man, wie man diese in ein Programm einbaut.

01: #include 
02: 
03: using namespace std;
04:
05: int main()
06: {
07:     int Highscore = 500;  
08:     int Score     = 0;    
09:
10:     cout << "Bitte gib deine erreichte Punktzahl an: ";
11:     cin >> Score;
12:
13:     if (Score > Highscore)
14:     {
15:         cout << "Sie haben einen neuen Highscore erreicht \n";
16:         Highscore = Score;
17:     }
18:
19:     return 0;
20: }

Dieses kleine Programm prüft, ob man in einem Spiel einen neuen Highscore erreicht hat. Der erreichte Score muss zwar noch selbst eingegeben werden, was in einem richtigen Spiel natürlich nicht der Fall ist, jedoch geht es hier in erster Linie um die if-Bedingung.
Diese prüft in Zeile 13, ob der erreichte Score größer ist als der aktuelle Highscore. Hier können alle boolschen Operatoren ( ==, !=, <, >, <=, >= ) verwendet werden, um den gewünschten Vergleich durchzuführen. Natürlich kann man auch einen geringeren oder gar die selbe Punktzahl wie der Highscore erzielen. Dazu kann man sich 2 weitere if-Bedingungen erstellen, die die gewünschten Vergleiche durchführen, oder man benutzt die else-Bedingung.

Die else-Bedingung

Eine else-Bedingung wird immer zusammen mit einer if-Anweisung verwendet. Sie bedeutet soviel, wie anderenfalls oder ansonsten und kann folgendermaßen verwendet werden.

01: #include 
02: 
03: using namespace std;
04:
05: int main()
06: {
07:     int Highscore = 500;  
08:     int Score     = 0;    
09:
10:     cout << "Bitte gib deine erreichte Punktzahl an: ";
11:     cin >> Score;
12:
13:     if (Score > Highscore)
14:     {
15:         cout << "Sie haben einen neuen Highscore erreicht \n";
16:         Highscore = Score;
17:     }
18:     else if (Score == Highscore)
19:     {
20:         cout << "Sie sind gleich auf mit dem Highscore \n";
21:     }
22:     else
21:     {
22:         cout << "Sie haben zu wenig Punkte für den Highscore erreicht \n";
23:     }
24:
25:     return 0;
26: }

Hier wird, wie oben beschrieben mit Hilfe der else-Anweisung geprüft, ob die erreichte Punktzahl größer, gleich oder geringer als der Highscore ist. Ihr fragt euch sicher, warum hinter dem letzten else kein Vergleich durchgeführt wird. Nunja, da ein Wert nur größer, gleich, oder kleiner als ein anderer Wert sein kann, können wir uns Tipparbeit sparen und dem Compiler durch das alleinstehende else sagen, dass für alle anderen Fälle ( also in diesem Fall nur kleinere Werte, da wir größer und gleich ja schon getestet haben ) der darunterstehende Code ausgeführt werden soll.

Donnerstag, 26. Juli 2012

Buchempfehlung: Prata, Stephen - C++ Primer Plus 6th Edition (2012)

  • geeignet für: Anfänger und Fortgeschrittene
  • Sprache: Englisch
  • Behandelt fast alle Aspekte der C++-Programmierung sehr ausführlich und verständlich
  • Bietet außerdem einen ausführlichen Einblick in den neuen Standard C++11
  • sehr umfangreich (ca. 1400 Seiten)
ISBN: 978-0-321-77640-2 Preis: 39,95€

Freitag, 6. Juli 2012

Texteingabe mit Arrays

Einführung

Nachdem wir nun wissen wie man mit C++ rechnet ist es an der Zeit seinen eigenen Text in ein Programm eingeben zu können. Es gibt verschiedene Möglichkeiten Text in ein Programm einzugeben, in diesem Tutorial wollen wir uns jedoch erstmal den Arrays widmen.

Arrays

Arrays sind eine feine Sache, denn mit deren Hilfe ist es möglich sehr viele Variablen des gleichen Datentyps schnell und unkompliziert zu deklarieren. Schauen wir es uns einfach mal an:

int array[10];

Mit diesem Aufruf hat man nun 10 Variablen des Datentyps Integer deklariert. Dies ist viel einfacher, als wenn man jede Variable einzeln deklarieren muss, etwa so:

int array1, array2, array3 ...

Um nun die einzelnen Variablen mit Werten zu füllen, sucht man sich einfach die gewünschte Variable raus und weist ihr einen Wert zu. Wichtig dabei zu Wissen ist, dass Arrays grundsätzlich bei 0 beginnen. Ein Array der Größe 10 kann also im Bereich 0-9 aufgerufen werden. Schauen wir uns das einfach mal an:

01: int array[10];
02:
03: array[0] =  1;
04: array[1] =  2;
    ...
12: array[9] = 10;

Würde man nun array[10] definieren wollen, so würde ein Fehler vom Compiler ausgegeben werden.

Man kann auch dynamische Arrays erstellen das bedeutet, dass sich das Array automatisch der benötigten Größe anpasst. Außerdem ist es möglich Arrays, genau wie alle anderen Variablen gleichzeitig zu deklarieren und zu definieren. In der Praxis sieht das ganze so aus:

int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Dies erstellt ein Array mit 10 Integer Werten und weist jedem Element der Reihe nach einen Wert zu.

Auf gleiche Weise ist es nun auch möglich Text zu schreiben. Man erstellt sich einfach ein unbestimmtes Array des Datentyps char und weist ihm Text zu. Das ganze schaut dann so aus:

char array[] = "Dieser Text wurde in einem Array erstellt."

Texteingabe mit 'cin'

Möchte man in seinem Programm manuell Text eingeben können, so geschieht dies mit dem Schlüsselwort cin. Es ist genauso einfach zu verwenden wie cout nur, dass man noch eine zusätzliche Variable erstellen muss. Hier ein kleines Beispiel mit Zahlen:

01: int zahl;
02: 
03: std::cin >> zahl;
04:
05: std::cout << zahl;

Dieses Programm erwartet vom Benutzer die Eingabe einer Zahl, dies könnte in der Praxis zum Beispiel das Alter sein. Diese Zahl wird danach wieder vom Programm ausgegeben.

Um jedoch Text eingeben zu können benötigen wir wieder unsere Arrays. Wenn man weiß, wie lang der Text werden soll ist es empfehlenswert dem Array diese Größe zuzuweisen, z.B. array[50]. Weiß man die Länge des Textes jedoch nicht, so sollte man ein sehr großes Array, z.B. array[1000] erstellen oder Strings verwenden (Diese werde ich aber erst in späteren Tutorials vorstellen). Nun aber zur Praxis:

01: char Name[50];
02:
03: std::cin.get (Name, 49);
04:
05: cout << Name;

Dieses Programm eignet sich ganz gut, wenn man den Namen eines Benutzers, z.B. für eine Highscoreliste erfahren möchte. Mit cin.get() kann man dem Array einen Text zuweisen, welcher maximal die angegebene Größe haben darf.

Samstag, 23. Juni 2012

Buchempfehlung: Dawson, Michael - Beginning C++ Through Game Programming (2010)

  • geeignet für: Anfänger
  • Sprache: Englisch
  • Erklärt alle für die Spieleprogrammierung relevanten Aspekte der C++-Programmierung sehr ausführlich und verständlich
  • Bietet anschauliche Beispiele aus dem Bereich der Spieleprogrammierung
  • umfangreich (ca. 400 Seiten)
ISBN: 978-1-435-45742-3 Preis: 27,70€