012
14.01.2018, 12:35 Uhr
ao
(Operator)
|
Zitat von Sandra39: |
Tut mir leid, es ist aber so. ... Ich poste hier nochmal den Code.
|
Auch diese Version lässt sich nicht übersetzen. Kein Rückgabetyp bei display_coordinates und nach wie vor undefinierte Member prev und next. Kann es sein, dass dein Projekt irgendwie durcheinander ist? Dass du anderen Code übersetzt als du hier postest?
Aber egal, ich kann mir das zurechtbiegen. Sprechen wir über Interessanteres.
Zitat: |
Es kann sein, das mir die Umstellung von C zu C++ schwer fällt.
|
Was heißt das? Kannst du schon C und versuchst, C++ zu lernen? Ja, das ist nicht nur ein bisschen neue Syntax. Das ist vor allem eine neue Denkweise.
Zitat: |
Wie meinst du das mit ungewöhnlich??
|
Zum Beispiel, dass du die Größe des Spielfelds im Hauptmenü abfragst (und nicht als vorbereitenden Schritt beim Programmstart). Das zwingt dich dazu, viel komplizierter zu denken als eigentlich nötig. Verschieb das (wenn überhaupt) auf später und mach es erst mal einfach.
Eine create_environment-Methode ist hier unnötig. Eigentlich will man hier einen Konstruktor, dem man Breite und Höhe des Spielfeldes übergeben kann. Danach will man im Hauptmenü landen und auf einem Spielfeld fester Größe spielen. Richtig? Dann machen wir es doch so, Schritt für Schritt:
1. environment.h: Der Konstruktor nimmt zwei Argumente h und w (Höhe und Breite). create_environment ist weg weil unnötig.
Der Area-Kram ist auch weg.
2. environment.cpp: Der Konstruktor initialisiert seine Member width und height. Kann sein, dass er in späteren Versionen noch mehr tun muss, aber im Moment ist nicht mehr erkennbar.
create_environment ist auch hier gelöscht.
3. main.cpp: height und width werden erst mal konstant vorbelegt. Falls du die Werte vom Benutzer abfragen oder per Kommandozeile übergeben willst, gibts dafür auch gute Möglichkeiten, zu denen wir später kommen können. Im Hauptmenü hat das jedenfalls nichts verloren. Fürs erste tuns die Konstanten.
Das Environment wird mit diesen Werten konstruiert, und danach erst kommt man ins Hauptmenü und kann mit dem Environment spielen.
Die Ausgabe des Menüs ist in eine Funktion ausgelagert. Dadurch wird die Hauptschleife übersichtlicher.
Der Menüpunkt 1 ist logischerweise verschwunden.
Der Menüpunkt 2 funktioniert jetzt und zeigt ein Spielfeld an. Hierzu müsstest du mal erklären, warum display_coordinates die Größen übergeben bekommt. Eigentlich könnte das Environment-Objekt hier seine eigenen Größen-Member benutzen.
Hier kommt der Code:
C++: |
// ------------------- environment.h
#ifndef ENVIRONMENT_H_INCLUDED #define ENVIRONMENT_H_INCLUDED #include <stdlib.h> #include <stdio.h> #include <iostream> #include <math.h>
using namespace std;
class Environment { public: int width; int height;
Environment(int h, int w);
~Environment() { }
void display_coordinates(int height, int width); };
#endif // ENVIRONMENT_H_INCLUDED
// ------------------ environment.cpp
#include <stdlib.h> #include <stdio.h> #include <iostream> #include <math.h> #include "environment.h"
using namespace std;
Environment::Environment(int h, int w) : width (w) , height (h) {
}
void Environment::display_coordinates(int height, int width) { int matrix[10][10] = {{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}};
int i, j;
for(i = 0; i < height; i++) { for(j = 0; j < width; j++) { printf("%4d", matrix[i][j]); } printf("\n"); } }
// -------------- main.cpp
#include <stdlib.h> #include <stdio.h> #include <iostream> #include <math.h> #include "environment.h"
using namespace std;
static void PrintMenu () { cout <<endl; cout << "*********************************************************" <<endl; cout << "*\t\t\t\t\t\t\t*" <<endl; cout << "*\t\t\t\t\t\t\t*" <<endl; cout << "*\t\tAuthor: Sandra Priller\t\t\t*" <<endl; cout << "*\t\t\t\t\t\t\t*" <<endl; cout << "*\t\t\t\t\t\t\t*" <<endl; cout << "*********************************************************" <<endl; cout <<endl; cout << "\t\tAmeisensimulation - Spiel beginnen" <<endl; cout <<endl;
cout << "2. Koordinaten ausgeben >" <<endl; cout << "3. Items ausgeben >" <<endl; cout << "4. Spiel verlassen >" <<endl; }
int main(int argc, char *argv[]) {
int height = 5; int width = 8;
Environment c (height, width);
while(1) {
PrintMenu (); int choice; cin >>choice; cout <<endl;
switch(choice) { case 2: c.display_coordinates(height, width); break; case 3: break; case 4: exit(0); break; default: cout << "Falsche Eingabe!" <<endl; } }
return EXIT_SUCCESS; }
|
Dieser Post wurde am 16.01.2018 um 09:19 Uhr von ao editiert. |