C++ Anfänger
-
Hallo Community,
ich bringe mir mit Hilfe des Buches von Arnold Willemer "Einstieg in C++" die selbige Programmiersprache bei. Nun war das Thema Arrays und diese hab ich auch verstanden, wenn ich mich nicht irre. In einem Programm, dass zu dem Spiel "Bermuda" werden soll.
Dazu wird, wie bei Schiffe versenken, ein Spielfeld aufgebaut und der Spieler kann koordinaten angeben. Das Feld soll dann durch ein x makiert werden. Der Quelltext sieht wie folgt aus:#include <iostream> using namespace std; const int X=9; const int Y=7; int main() { char Spielfeld[X][Y]; int x, y; char cx, cy; for (x=0; x<X; x++) //jeder Wert des Arrays wird mit einem '.' belegt { for(y=0; y<Y; y++) { Spielfeld[x][y] = '.'; } } //Anzeige und Eingabe bool Schleifenende=false; int xin, yin; do { cout << " 1 2 3 4 5 6 7 8 9" << endl; for(y=0; y<Y; y++) { cout << (char) ('A'+y) << " ";/* <- */ for (x=0; x<X; x++) { cout << " " << Spielfeld [x][y]; } cout << endl; } cin >> cx >> cy; xin = cx - '1';/* <- */ yin = cy - 'A';/* <- */ if (xin=0 && xin <=9 && yin>0 && yin<=7) { Spielfeld[xin][yin] = 'x'; } else { Schleifenende = true; } } while (!Schleifenende); }Die fettmakierten stellen verstehe ich nicht richtig und im Buch finde ich hierzu auf anhieb keine Antwort. Ich nehme an, die Befehle sorgen dafür, dass anstatt der Zahlen vom Spieler für eine Reihe die Buchstaben benutzt werden.
Wäre dankbar, wenn mich jemand aufklären könnte. Danke auch im voraus für alle Mühen. Mit freundlichen Grüßen,
Corin G.
___________
kann mir jemand erklären, wie ich wegen der Übersicht Quelltexte mit Leerzeichen darstellen kann?Mod-Edit: Ich hab dir mal den Quelltext vernünftig formatiert und die "fett markierten Stellen" durch / <- / Kommentare ersetzt
-
Corin schrieb:
Die fettmakierten stellen verstehe ich nicht richtig und im Buch finde ich hierzu auf anhieb keine Antwort. Ich nehme an, die Befehle sorgen dafür, dass anstatt der Zahlen vom Spieler für eine Reihe die Buchstaben benutzt werden.
Das ist "simple" Zeichen-Arithmetik. char-Werte sind in C++ normale Ganzzahltypen, die den ASCII-Wert des gargestellten Zeichens speichern. Und auf normalen Systemen liegen die Buchstaben und Ziffern hintereinander im Zeichensatz, so daß du mit Konstrukten wie
ch - '0'den Abstand von ch zum Zeichen '0' erhältst (also faktisch den Zahlenwert der übergebenen Ziffer). Analog rechnetch-'A'die Buchstaben 'A', 'B', 'C' etc um in 0,1,2,...kann mir jemand erklären, wie ich wegen der Übersicht Quelltexte mit Leerzeichen darstellen kann?
In Kurzfassung: sfds
-
Corin schrieb:
Hallo Community,
ich bringe mir mit Hilfe des Buches von Arnold Willemer "Einstieg in C++" die selbige Programmiersprache bei.Leider falsches Forum. Hier ist Visual C++ mit der MFC!!!
#include <iostream> using namespace std; const int X=9; const int Y=7; int main() { char Spielfeld[X][Y]; int x, y; char cx, cy; for (x=0; x<X; x++) //jeder Wert des Arrays wird mit einem '.' belegt { for(y=0; y<Y; y++) { Spielfeld[x][y] = '.'; } } //Anzeige und Eingabe bool Schleifenende=false; int xin, yin; do { cout << " 1 2 3 4 5 6 7 8 9" << endl; for(y=0; y<Y; y++) { [b]cout << (char) ('A'+y) << " ";[/b] for (x=0; x<X; x++) { cout << " " << Spielfeld [x][y]; } cout << endl; } cin >> cx >> cy; [b] xin = cx - '1'; yin = cy - 'A';[/b] if (xin=0 && xin <=9 && yin>0 && yin<=7) { Spielfeld[xin][yin] = 'x'; } else { Schleifenende = true; } } while (!Schleifenende); }Die fettmakierten stellen verstehe ich nicht richtig und im Buch finde ich hierzu auf anhieb keine Antwort. Ich nehme an, die Befehle sorgen dafür, dass anstatt der Zahlen vom Spieler für eine Reihe die Buchstaben benutzt werden.
Wäre dankbar, wenn mich jemand aufklären könnte. Danke auch im voraus für alle Mühen. Mit freundlichen Grüßen,
Zur ersten unklaren Zeile: Was passiert denn im Alphabet, wenn Du von 'A' aus eins weiter gehst? Und was, wenn Du y weitergehst? Jetzt alles klar?
Zu den beiden anderen: was steht denn in cx bzw. cy? Was erhältst Du in xin bzw. yin, wenn der Benutzer 1 und B eingibt? Genau, in cx steht '1', also in xin '1' - '1' = 0, in cy demzufolge 'B' - 'A' = 1. Das ganze dient zur "Transponierung" auf binär Null, damit Du diese Werte wieder als Index in Dein Array benutzen kannst.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielen Dank für die schnellen und klaren Antworten. Tut mir Leid, wusste nicht genau in welches Forum das gehört. Danke nochmal, werd mich sicher wieder melden,
Corin G.
-
Kleine Frage: gibt es eine leiche möglichkeit entweder die Eingabe nur in Großbuchstaben zuzulassen oder groß/kleinschreibung zu ignorieren. (sodass a und A den selben wert ergeben)?
-
Du kannst einfach beliebige Buchstaben einlesen und dann alle in Großbuchstaben umwandeln. Wenn du dann vergleichst, sind nur noch Großbuchstaben da.
#include <iostream> #include <string> #include <cctype> using namespace std; int main(void) { cout << "Bitte Text eingeben: "; string myString = ""; cin >> myString; for(string::iterator it = myString.begin(); it != myString.end(); ++it) // geht alle Zeichen im string durch { *it = toupper(*it); // wandelt jedes zeichen einzeln zu einem Grossbuchstaben um } cout << myString << endl; return 0; }Mit dem String könnte man natürlich alles mögliche machen (nicht nur ausgeben
)Felix
EDIT: jedes mal wieder myString.end() aufzurufen ist nicht performant, aber besser zu lesen
