Objektorientiert?!?!
-
hi
ich habe Folgendes projekt für die Schule gemacht://Autorennen.cpp //Dieses Programm wird ein Autorennen enthalten... #include <stdio.h> #include <iostream.h> #include <conio.h> #include <windows.h> #include "stdafx.h" #include "CONIOEX.h" void background_a() { int i; //Start design textcolor(LIGHTGREEN); gotoxy(1,1); printf("x"); Sleep(30); gotoxy(1,2); printf("x"); Sleep(30); gotoxy(1,3); printf("x"); Sleep(30); gotoxy(1,4); printf("x"); Sleep(30); gotoxy(1,5); printf("x"); Sleep(30); gotoxy(1,6); printf("x"); Sleep(30); gotoxy(1,7); printf("x"); Sleep(30); gotoxy(1,8); printf("x"); Sleep(30); gotoxy(1,9); printf("x"); Sleep(30); gotoxy(2,1); printf("x"); Sleep(30); gotoxy(2,2); printf("x"); Sleep(30); textcolor(LIGHTRED); gotoxy(2,3); printf("S"); Sleep(30); gotoxy(2,4); printf("T"); Sleep(30); gotoxy(2,5); printf("A"); Sleep(30); gotoxy(2,6); printf("R"); Sleep(30); gotoxy(2,7); printf("T"); Sleep(30); textcolor(LIGHTGREEN); gotoxy(2,8); printf("x"); Sleep(30); gotoxy(2,9); printf("x"); Sleep(30); gotoxy(3,1); printf("x"); Sleep(30); gotoxy(3,2); printf("x"); Sleep(30); gotoxy(3,3); printf("x"); Sleep(30); gotoxy(3,4); printf("x"); Sleep(30); gotoxy(3,5); printf("x"); Sleep(30); gotoxy(3,6); printf("x"); Sleep(30); gotoxy(3,7); printf("x"); Sleep(30); gotoxy(3,8); printf("x"); Sleep(30); gotoxy(3,9); printf("x"); Sleep(30); //Start design ende //Ziel design gotoxy(78,1); printf("x"); Sleep(30); gotoxy(78,2); printf("x"); Sleep(30); gotoxy(78,3); printf("x"); Sleep(30); gotoxy(78,4); printf("x"); Sleep(30); gotoxy(78,5); printf("x"); Sleep(30); gotoxy(78,6); printf("x"); Sleep(30); gotoxy(78,7); printf("x"); Sleep(30); gotoxy(78,8); printf("x"); Sleep(30); gotoxy(78,9); printf("x"); Sleep(30); gotoxy(79,1); printf("x"); Sleep(30); gotoxy(79,2); printf("x"); Sleep(30); textcolor(LIGHTRED); gotoxy(79,3); printf("Z"); Sleep(30); gotoxy(79,4); printf("I"); Sleep(30); gotoxy(79,5); printf("I"); Sleep(30); gotoxy(79,6); printf("E"); Sleep(30); gotoxy(79,7); printf("L"); Sleep(30); textcolor(LIGHTGREEN); gotoxy(79,8); printf("x"); Sleep(30); gotoxy(79,9); printf("x"); Sleep(30); gotoxy(80,1); printf("x"); Sleep(30); gotoxy(80,2); printf("x"); Sleep(30); gotoxy(80,3); printf("x"); Sleep(30); gotoxy(80,4); printf("x"); Sleep(30); gotoxy(80,5); printf("x"); Sleep(30); gotoxy(80,6); printf("x"); Sleep(30); gotoxy(80,7); printf("x"); Sleep(30); gotoxy(80,8); printf("x"); Sleep(30); gotoxy(80,9); printf("x"); Sleep(30); textcolor(WHITE); //Zieldesign ende //Straßenmarkierung for(i=4; i<=77; i++) { gotoxy(i,1); printf("-"); Sleep(30); gotoxy(i,9); printf("-"); Sleep(30); } for(i=4; i<=76; i=i+2) { gotoxy(i,5); printf("-"); Sleep(30); } } void background() { int i; //Start design textcolor(LIGHTGREEN); gotoxy(1,1); printf("x"); gotoxy(1,2); printf("x"); gotoxy(1,3); printf("x"); gotoxy(1,4); printf("x"); gotoxy(1,5); printf("x"); gotoxy(1,6); printf("x"); gotoxy(1,7); printf("x"); gotoxy(1,8); printf("x"); gotoxy(1,9); printf("x"); gotoxy(2,1); printf("x"); gotoxy(2,2); printf("x"); textcolor(LIGHTRED); gotoxy(2,3); printf("S"); gotoxy(2,4); printf("T"); gotoxy(2,5); printf("A"); gotoxy(2,6); printf("R"); gotoxy(2,7); printf("T"); textcolor(LIGHTGREEN); gotoxy(2,8); printf("x"); gotoxy(2,9); printf("x"); gotoxy(3,1); printf("x"); gotoxy(3,2); printf("x"); gotoxy(3,3); printf("x"); gotoxy(3,4); printf("x"); gotoxy(3,5); printf("x"); gotoxy(3,6); printf("x"); gotoxy(3,7); printf("x"); gotoxy(3,8); printf("x"); gotoxy(3,9); printf("x"); //Start design ende //Ziel design gotoxy(78,1); printf("x"); gotoxy(78,2); printf("x"); gotoxy(78,3); printf("x"); gotoxy(78,4); printf("x"); gotoxy(78,5); printf("x"); gotoxy(78,6); printf("x"); gotoxy(78,7); printf("x"); gotoxy(78,8); printf("x"); gotoxy(78,9); printf("x"); gotoxy(79,1); printf("x"); gotoxy(79,2); printf("x"); textcolor(LIGHTRED); gotoxy(79,3); printf("Z"); gotoxy(79,4); printf("I"); gotoxy(79,5); printf("I"); gotoxy(79,6); printf("E"); gotoxy(79,7); printf("L"); textcolor(LIGHTGREEN); gotoxy(79,8); printf("x"); gotoxy(79,9); printf("x"); gotoxy(80,1); printf("x"); gotoxy(80,2); printf("x"); gotoxy(80,3); printf("x"); gotoxy(80,4); printf("x"); gotoxy(80,5); printf("x"); gotoxy(80,6); printf("x"); gotoxy(80,7); printf("x"); gotoxy(80,8); printf("x"); gotoxy(80,9); printf("x"); textcolor(WHITE); //Zieldesign ende //Straßenmarkierung for(i=4; i<=77; i++) { gotoxy(i,1); printf("-"); gotoxy(i,9); printf("-"); } for(i=4; i<=76; i=i+2) { gotoxy(i,5); printf("-"); } } void auto1() { textcolor(LIGHTRED); printf("\"O==O_"); textcolor(WHITE); } void auto2() { textcolor(YELLOW); printf("^O==O_"); textcolor(WHITE); } void clear() { clrscr(); } void main() { textcolor(WHITE); ANFANG:; clear(); background_a(); char start=0; char taste=0; char zwichenspeicher_a=0; char zwichenspeicher_b=0; char nochmal = 0; int a1 = 4; int a2 = 4; gotoxy(a1,3); auto1(); gotoxy(a2,7); auto2(); while(a1 <= 74 && a2 <=74) { taste=getch(); if(taste == 'a' || taste == 's') { if(taste != zwichenspeicher_a) { clear(); background(); a1++; gotoxy(a1,3); auto1(); gotoxy(a2,7); auto2(); zwichenspeicher_a=taste; } } else if(taste == 'k' || taste == 'l') { if(taste != zwichenspeicher_b) { clear(); background(); a2++; gotoxy(a1,3); auto1(); gotoxy(a2,7); auto2(); zwichenspeicher_b=taste; } } } gotoxy(1,12); printf("Nochmal?"); nochmal = getch(); while(nochmal != '0' || nochmal != '1') { nochmal = getch(); if(nochmal == '1') { goto ANFANG; } else if(nochmal == '0') { goto ENDE; } } ENDE:; }Dieses Projekt würde ich gerne mal Objektorientiert machen.
Objektorientiert ahbe ich allerdings noch nie programmiert.
Nur ein Kapitel in einem C++ buch darüber gelesen.
Ich denke mal das man dieses Programm sehr gut dazu verwenden kann.Also:
Ist das Programm gut geneignet um es objekt orientiert zu machen.
Wenn ja. Wer kann mir dabei helfen.
Bzw was dieses Programmes würde sich besonders gut als objekt eignen.
Und wie setzt man sowas am besten um.ein paar vorschläge würden erstmal reichen.
Dann versuche ich das chonmal umzustezen....Danke schon mal...
Marian
-
Ich würds erstmal gescheit prozetural machen...

-
Dein Code ist irgendwie.. sagen wir komisch.
Wenns um ein Autorennen geht wäre meine erste Idee
das das Auto eine Klasse ist.Diese Klasse sollte die Coordinaten des Autos haben
und eine Methode zum Zeichnen.Mehr kann ich nicht sagen, da ich nciht genau weis
was du vorhast oder was am Ende rauskommen soll.
-
was ist denn prozetural?
Habe ich noch nie gehört.Und in wie fern ist mein code komisch. Bzw wie kann ich ihn besser machen?
Ich versuche es trotzdem mal wie du gesagt hast...
bsp aus meinem buch.
class CBuch { public: char Autor[100]; char Titel[100]; void Ausgabe() { cout<<Autor<<endl; cout<<Titel<<endl; } } einBuch;Für mein progg dann:
class Auto { public: gotoxy(a1,3); void Auto() { printf("\"O==o_"); } } autorennen;dann zu dem was mein prog machen soll/Macht...
In der Konsole wird eine Rennstrecke gezeichnet.
Auf der rennstrecke sind 2 autos.durch abwechselndes drücken von a und s bewegt sich auto1 vorwärts.
durch abwechselndes drücken von l und k bewegt sich auto2 vorwärts.wer als erstes im Ziel ist hat gewonnen.
-
Zu verbessern wäre:
1. gotoxy(a1,3); muß in einer Funktion stehen, nicht in der Klasse.
2. Normalerweise trennt man die Klassendefinition und Erzeugung einer Instanz:
class Buch { // irgendwas ]; Buch einBuch;Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.
3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.
4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).
5. Der Konstruktor (in deinem Beispiel Auto()) hat keinen Rückgabetyp (auch nicht void).
6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.
Edit: 7. Und zu deinem ursprünglichen Quelltext: Der Rückgabetyp von main ist int, nicht void.
Edit: 8. Ist mit gerade erst aufgefallen, daß in deinem urpsürnglichen Quelltext gotos drin sind. Hatte ich beim ersten Überfliegen nicht gesehen. Sonst hätte ich es möglicherweise unterlassen dazu zu kommentieren. Mit Quelltext der gotos enthält gebe ich mich normalerweise nicht ab. Ein goto ist ein guter Grund für ein lebenslanges Compiler-Verbot. Dafür gibt es wirklich keine Entschuldigung.
-
Deine gotos sind echt überflüssig. Statt goto ENDE; kannst du break nehmen und statt gogo ANFANG; kannst du eine Schleife machen, die dann mittels break beendet wird.
do { Startbildschirm aufbauen do { Spiel laufen lassen } while (SpielZuende == false); Neues Spiel? } while (NeuesSpiel == true);
-
Ok. Ich werde die gotos ersetzen.
Aber was ist so schlimm daran. das verstehe ich gernicht.
Was machen die so schlimmes?
-
-
Z2 schrieb:
Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.
was sind globale veriablen. und wieso sind die böse?
Z2 schrieb:
3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.
hatte ich vorher. Aber vie kriege ich dann den text farbig?
Z2 schrieb:
4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).
Das habe ich noch nie benutzt und weis dem entsprechned nicht wie das geht.
Könnte dazu einer ein kleines Hallo welt bsp machen?Z2 schrieb:
6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.
Dann steht da etwas von zugriffsrechten oder so...
@ReinerZufall
Ich bin deinem Link gefolgt.
Werde es in zukunft anders machen...
-
Sqwan schrieb:
Z2 schrieb:
Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.
was sind globale veriablen. und wieso sind die böse?
Globale Variablen sind Variablen, die global sind (sorry, konnte ich mir nicht verkneifen). Wenn du zum Beispiel außerhalb von Funktionen und Klassendefinitionen soetwas hier schreiben würdest:
int x;
dann wäre das eine globale Variable und sie wäre z.B. mit einem geeigneten Header auch in anderen Übersetzungseinheiten verfügbar.
Es gibt bestimmt ein Dutzend Gründe, warum diese Dinger böse. Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst, wirst du die meisten davon vermutlich nicht verstehen. Stichworte wären zum Beispiel Probleme mit der Initialisierungsreihenfolge, Reduzierung der Wiederverwendbarkeit, Erhöhung der Startup-Zeit und so weiter und so fort ...
Sqwan schrieb:
Z2 schrieb:
3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.
hatte ich vorher. Aber vie kriege ich dann den text farbig?
Standard-C++ kennt keine Farben. Das gilt auch für Standard-C (also printf).
Sqwan schrieb:
Z2 schrieb:
4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).
Das habe ich noch nie benutzt und weis dem entsprechned nicht wie das geht.
Könnte dazu einer ein kleines Hallo welt bsp machen?#include <string> #include <iostream> int main() { std::sting String ("Hello World"); std::cout << String << std::endl; }Einfacher geht es nun wirklich nicht mehr. Dazu gibts aber eigentlich mehr als genug Links und Material hier im Forum. Wenn du dich nur ein klein wenig umsiehst, findest du dazu alles, was du brauchst (hab jetzt keine Lust dir einen Link rauszusuchen, ein Bißchen was kannst du auch machen).
Sqwan schrieb:
Z2 schrieb:
6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.
Dann steht da etwas von zugriffsrechten oder so...
Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.
Edit: Rechtschreibung
-
Z2 schrieb:
Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst,
Ich hoffe mal das sollte keine beleidigung sein.
Denn ich komme sehr gut mit Schleifen zurecht.
Ich wusste nur nicht das gotos unuter todesstreafe stehen.Z2 schrieb:
Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.
Ich habe am anfang gesagt das ich 0 plan von Objektorientierung habe bis auf das bsp aus meinem buch.
Von Memberfunctionen habe ich noch nie was gehört.
Immerhin wollte ich das mir hier geholfen wird Objektorientierung zu lernen.was printf() angeht:
In Programmen die sinn machen sollen werde ich das in zukunft vermeiden.
Doch in dem simplen autorennen is die Farbe doch optisch ansprechender.
Und mit cout lässt sich das nicht Färben.Und dann kannst du mir auch direkt für das nutzen vorkompilierter header den kopf abreißen.
Aber am besten erklärst du direkt warum auch das verboten ist.PS: Mein aktuelle code...
//Autorennen.cpp //Dieses Programm wird ein Autorennen enthalten... #include <stdio.h> #include <iostream.h> #include <conio.h> #include <windows.h> #include "stdafx.h" #include "CONIOEX.h" class Autos { public: int a1, a2; void auto1(int a1) { textcolor(LIGHTRED); gotoxy(a1,3); printf("\"O==O_"); textcolor(WHITE); } void auto2(int a2) { textcolor(YELLOW); gotoxy(a2,7); printf("^O==O_"); textcolor(WHITE); } void clean() { clrscr(); } } autorennen; class background { public: void gezeichnet() { int i; //Start design textcolor(LIGHTGREEN); //Textfarbe Ändern gotoxy(1,1); printf("x"); Sleep(30); gotoxy(1,2); printf("x"); Sleep(30); gotoxy(1,3); printf("x"); Sleep(30); gotoxy(1,4); printf("x"); Sleep(30); gotoxy(1,5); printf("x"); Sleep(30); gotoxy(1,6); printf("x"); Sleep(30); gotoxy(1,7); printf("x"); Sleep(30); gotoxy(1,8); printf("x"); Sleep(30); gotoxy(1,9); printf("x"); Sleep(30); gotoxy(2,1); printf("x"); Sleep(30); gotoxy(2,2); printf("x"); Sleep(30); textcolor(LIGHTRED); //textfarbe ändern gotoxy(2,3); printf("S"); Sleep(30); gotoxy(2,4); printf("T"); Sleep(30); gotoxy(2,5); printf("A"); Sleep(30); gotoxy(2,6); printf("R"); Sleep(30); gotoxy(2,7); printf("T"); Sleep(30); textcolor(LIGHTGREEN); //textfarbe ändern gotoxy(2,8); printf("x"); Sleep(30); gotoxy(2,9); printf("x"); Sleep(30); gotoxy(3,1); printf("x"); Sleep(30); gotoxy(3,2); printf("x"); Sleep(30); gotoxy(3,3); printf("x"); Sleep(30); gotoxy(3,4); printf("x"); Sleep(30); gotoxy(3,5); printf("x"); Sleep(30); gotoxy(3,6); printf("x"); Sleep(30); gotoxy(3,7); printf("x"); Sleep(30); gotoxy(3,8); printf("x"); Sleep(30); gotoxy(3,9); printf("x"); Sleep(30); //Start design ende //Ziel design gotoxy(78,1); printf("x"); Sleep(30); gotoxy(78,2); printf("x"); Sleep(30); gotoxy(78,3); printf("x"); Sleep(30); gotoxy(78,4); printf("x"); Sleep(30); gotoxy(78,5); printf("x"); Sleep(30); gotoxy(78,6); printf("x"); Sleep(30); gotoxy(78,7); printf("x"); Sleep(30); gotoxy(78,8); printf("x"); Sleep(30); gotoxy(78,9); printf("x"); Sleep(30); gotoxy(79,1); printf("x"); Sleep(30); gotoxy(79,2); printf("x"); Sleep(30); textcolor(LIGHTRED); gotoxy(79,3); printf("Z"); Sleep(30); gotoxy(79,4); printf("I"); Sleep(30); gotoxy(79,5); printf("I"); Sleep(30); gotoxy(79,6); printf("E"); Sleep(30); gotoxy(79,7); printf("L"); Sleep(30); textcolor(LIGHTGREEN); gotoxy(79,8); printf("x"); Sleep(30); gotoxy(79,9); printf("x"); Sleep(30); gotoxy(80,1); printf("x"); Sleep(30); gotoxy(80,2); printf("x"); Sleep(30); gotoxy(80,3); printf("x"); Sleep(30); gotoxy(80,4); printf("x"); Sleep(30); gotoxy(80,5); printf("x"); Sleep(30); gotoxy(80,6); printf("x"); Sleep(30); gotoxy(80,7); printf("x"); Sleep(30); gotoxy(80,8); printf("x"); Sleep(30); gotoxy(80,9); printf("x"); Sleep(30); textcolor(WHITE); //Zieldesign ende //Straßenmarkierung for(i=4; i<=77; i++) { gotoxy(i,1); printf("-"); Sleep(15); gotoxy(i,9); printf("-"); Sleep(15); } for(i=4; i<=76; i=i+2) { gotoxy(i,5); printf("-"); Sleep(30); } } void ungezeichnet() { int i; //Start design textcolor(LIGHTGREEN); //Textfarbe Ändern gotoxy(1,1); printf("x"); gotoxy(1,2); printf("x"); gotoxy(1,3); printf("x"); gotoxy(1,4); printf("x"); gotoxy(1,5); printf("x"); gotoxy(1,6); printf("x"); gotoxy(1,7); printf("x"); gotoxy(1,8); printf("x"); gotoxy(1,9); printf("x"); gotoxy(2,1); printf("x"); gotoxy(2,2); printf("x"); textcolor(LIGHTRED); //textfarbe ändern gotoxy(2,3); printf("S"); gotoxy(2,4); printf("T"); gotoxy(2,5); printf("A"); gotoxy(2,6); printf("R"); gotoxy(2,7); printf("T"); textcolor(LIGHTGREEN); //textfarbe ändern gotoxy(2,8); printf("x"); gotoxy(2,9); printf("x"); gotoxy(3,1); printf("x"); gotoxy(3,2); printf("x"); gotoxy(3,3); printf("x"); gotoxy(3,4); printf("x"); gotoxy(3,5); printf("x"); gotoxy(3,6); printf("x"); gotoxy(3,7); printf("x"); gotoxy(3,8); printf("x"); gotoxy(3,9); printf("x"); //Start design ende //Ziel design gotoxy(78,1); printf("x"); gotoxy(78,2); printf("x"); gotoxy(78,3); printf("x"); gotoxy(78,4); printf("x"); gotoxy(78,5); printf("x"); gotoxy(78,6); printf("x"); gotoxy(78,7); printf("x"); gotoxy(78,8); printf("x"); gotoxy(78,9); printf("x"); gotoxy(79,1); printf("x"); gotoxy(79,2); printf("x"); textcolor(LIGHTRED); gotoxy(79,3); printf("Z"); gotoxy(79,4); printf("I"); gotoxy(79,5); printf("I"); gotoxy(79,6); printf("E"); gotoxy(79,7); printf("L"); textcolor(LIGHTGREEN); gotoxy(79,8); printf("x"); gotoxy(79,9); printf("x"); gotoxy(80,1); printf("x"); gotoxy(80,2); printf("x"); gotoxy(80,3); printf("x"); gotoxy(80,4); printf("x"); gotoxy(80,5); printf("x"); gotoxy(80,6); printf("x"); gotoxy(80,7); printf("x"); gotoxy(80,8); printf("x"); gotoxy(80,9); printf("x"); textcolor(WHITE); //Zieldesign ende //Straßenmarkierung for(i=4; i<=77; i++) { gotoxy(i,1); printf("-"); gotoxy(i,9); printf("-"); } for(i=4; i<=76; i=i+2) { gotoxy(i,5); printf("-"); } } } hintergrund; void main() { textcolor(WHITE); char nochmal = 0; do { autorennen.clean(); hintergrund.gezeichnet(); char start=0; char taste=0; char zwichenspeicher_a=0; char zwichenspeicher_b=0; int a1 = 4; int a2 = 4; autorennen.auto1(a1); autorennen.auto2(a2); while(a1 <= 77 && a2 <=77) { taste=getch(); if(taste == 'a' || taste == 's') { if(taste != zwichenspeicher_a) { autorennen.clean(); hintergrund.ungezeichnet(); a1++; autorennen.auto1(a1); autorennen.auto2(a2); zwichenspeicher_a=taste; } } else if(taste == 'k' || taste == 'l') { if(taste != zwichenspeicher_b) { autorennen.clean(); hintergrund.ungezeichnet(); a2++; autorennen.auto1(a1); autorennen.auto2(a2); zwichenspeicher_b=taste; } } } gotoxy(1,12); printf("Nochmal?"); nochmal = getch(); } while(nochmal != '0'); }
-
Sqwan schrieb:
Z2 schrieb:
Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst,
Ich hoffe mal das sollte keine beleidigung sein.
Nein, sollte es nicht. Bin mal davon ausgegangen, daß du Probleme mit Schleifen hast, weil ich nun wirklich nicht nachvollziehen kann, warum sonst jemand gotos verwenden sollte. Sorry, Fehlannahme auf meiner Seite.
Sqwan schrieb:
Ich wusste nur nicht das gotos unuter todesstreafe stehen.
Steht es leider nicht, zuallererst mal weil es in diesem Land keine Todesstrafe gibt. Es sollte aber unter Todesstrafe stehen (nur meine persönliche Meinung).
Sqwan schrieb:
Z2 schrieb:
Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.
Ich habe am anfang gesagt das ich 0 plan von Objektorientierung habe bis auf das bsp aus meinem buch.
Von Memberfunctionen habe ich noch nie was gehört.Memberfunktionen = Methode. Sagt dir der Begriff vielleicht etwas? Im Bereich des OOP gibt es für jeden Begriff etwa hundert Synonyme. Das kann schon mal etwas verwirrend sein.
Was das lernen von OOP in einem Forum-Thread betrift, so glaube ich nicht, daß das möglich/sinnvoll ist. Du solltest dir zunächst zumindestens mal die Grundlagen aneignen und wenn du dann konkrete Fragen hast, kannst du wiederkommen.
Sqwan schrieb:
was printf() angeht:
In Programmen die sinn machen sollen werde ich das in zukunft vermeiden.
Doch in dem simplen autorennen is die Farbe doch optisch ansprechender.
Und mit cout lässt sich das nicht Färben.Das Problem kann ich nicht nachvollziehen. Aber mag sein, daß du recht hast. Hier geht es offenbar um Windows-Konsolen und davon habe ich nun überhaupt keine Ahnung.
Sqwan schrieb:
Und dann kannst du mir auch direkt für das nutzen vorkompilierter header den kopf abreißen.
Aber am besten erklärst du direkt warum auch das verboten ist.Wenn sie funktionieren, spricht eigentlich nichts gegen vorkopilierte Header. Ich benutze sie im Allgemeinen nicht, aber mir ist kein fundamentaler Grund bekannt sie zu meiden.
-
Ach, was soll's! Ich hab gerade ein klein Bißchen Zeit. Hier ein object-orientierter Entwurf. Die Details mußt du natürlich selbst ausarbeiten:
#include <vector> // übrigen includes kannst du dir selbst raussuchen class wagen { private: char d_Taste1 char d_Taste2; bool d_LetzteTaste; int d_Farbe; // hoffe mal, das ist ein int int d_Position; public: wagen (char Taste1, char Taste2, int Farbe); // Konstruktor void Zeichne(); // Zeichnet den Wagen bool InterpretiereTaste (char Taste); // Mit zu Wagen gehörende Tasten vergleichen und ggf. Wagen bewegen // Return: Taste bekannte? bool ZielErreicht() const; }; wagen::wagen (char Taste1, char Taste2, int Farbe) : d_Taste1 (Taste1), d_Taste2 (Taste2), d_LetzteTaste (0), d_Farbe (Farbe), d_Position (0) {} // die übrigen Funktionen darfst du selbst schreiben class rennstrecke { std::vector<wagen> d_Wagen; public: void WagenHinzufügen (const wagen& Wagen); void Zeichne(); bool InterpretiereTaste (char Taste); // Return: Sieger ermittelt? }; int main() { rennstrecke Rennstrecke; Rennstrecke.Wagenhinzufügen (wagen ('a', 's', LIGHTRED)); // 2. Wagen entsprechend do { Rennstrecke.Zeichne(); } while (!Rennstrecke.InterpretiereTaste (getch())); }Das Spiel würde in diesem Fall nur einmal laufen, aber die nochmal-Schleife kannst du dir ja selbst hinzuüfgen.
Alles natürlich ungetestet und ohne jede Garantie.
-
Was das lernen von OOP in einem Forum-Thread betrift, so glaube ich nicht, daß das möglich/sinnvoll ist. Du solltest dir zunächst zumindestens mal die Grundlagen aneignen und wenn du dann konkrete Fragen hast, kannst du wiederkommen.Joa. En paar bÜcher und ca. 5 tuts zu OOP habe ich mir schon angesehen.
An diesem Autorennen-code kann man sehen das ich es nach forschrift eines buch hinbekomme. Leider ist mein erstes problem das ich nie weis was man am sinnvollsten als Objekt nimmt, zweitens was dann die dazugehörige klasse ist, und dann noch die regeln wann man public, private oder protected nimmt.EDIT:
THX. Das bearbeite ich mal und denke mich mal rein...
-
Also ich habe deinen Code mal überarbeitet.
En paar fehler habe ich weg bekommen.--------------------Konfiguration: autorennen4 - Win32 Debug-------------------- Kompilierung läuft... autorennen4.cpp c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(44) : error C2018: Zeichen '0xfc' unbekannt c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(44) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'gen' c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2018: Zeichen '0xfc' unbekannt c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'gen' c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2065: 'gen' : nichtdeklarierter Bezeichner Fehler beim Ausführen von cl.exe. autorennen4.exe - 5 Fehler, 0 Warnung(en)Das ist noch übrig.
Leider kann nirgend ein 'gen' finden.
Und 0xfc habe ich auch nirgends gefunden.
Woran kann das liegen.
Bzw was muss ich mir mal genauer ansehen?wagen::wagen (char Taste1, char Taste2, int Farbe) : d_Taste1 (Taste1), d_Taste2 (Taste2), d_LetzteTaste (0), d_Farbe (Farbe), d_Position (0) {}Das verwirrt mich auch.
Sowas habe ich noch nie gesehen.
Was genau macht das. Sowas gibts in meinem Buch garnet...
-
Was die Fehlermeldung betrifft, zeig mal die relevanten Zeilen.
Und was den Quelltext betrifft, den du nicht verstehst: Das ist ein Konstruktor mit Initialisiererliste. Elementarste Grundlagen. Wenn das in deinem Buch nicht drin steht, solltest du dir ein anderes Buch suchen.
-
Habe den fehler gefunden
WagenHinzufügen kann man nicht nehmen.
das ü macht probleme.jetzt gibts andere fehler.
--------------------Konfiguration: autorennen4 - Win32 Debug-------------------- Kompilierung läuft... autorennen4.cpp c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(63) : error C2065: 'LIGHTRED' : nichtdeklarierter Bezeichner Fehler beim Ausführen von cl.exe. autorennen4.exe - 1 Fehler, 0 Warnung(en)Das passiert wenn ich die CONIOEX.h nicht include.
leider ist da die function textcolor drinne.
Include ich die conioex.h ahbe cih folgende fehler:--------------------Konfiguration: autorennen4 - Win32 Debug-------------------- Kompilierung läuft... autorennen4.cpp Linker-Vorgang läuft... autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: bool __thiscall rennstrecke::InterpretiereTaste(char)" (?InterpretiereTaste@rennstrecke@@QAE_ND@Z) autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall rennstrecke::Zeichne(void)" (?Zeichne@rennstrecke@@QAEXXZ) autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall rennstrecke::WagenHinzufugen(class wagen const &)" (?WagenHinzufugen@rennstrecke@@QAEHABVwagen@@@Z) Debug/autorennen4.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe. autorennen4.exe - 4 Fehler, 0 Warnung(en)
-
Habe ich wirklich Hinzufügen in einen Funktionsnamen geschrieben? Oh, Mann! Wie bescheuert! Sorry, hätte ich vorher noch mal korrekturlesen sollen. Kommt davon, wenn man normalerweise nur englische Namen benutzt und dann plötzlich deutsche hinschreiben muß.
Edit: Dir fehlen mehrere Funktionen. Die mußt du natürlich noch implementieren. Außer dem wagen-Konstruktor und der main hab ich ja alle Implementierungen ausgelassen.
-
mmhh, ersetze mal die umlaute in dem code..anscheinend schluckt das der compiler nicht...
edit : zu spät..
-
ConfusedGuy schrieb:
mmhh, ersetze mal die umlaute in dem code..anscheinend schluckt das der compiler nicht...
Nein, Umlaute sind in Bezeichnern in der Tat nicht erlaubt. Sorry, noch mal.
-
Ich habe ja schon alle umlaute gelöscht.
Aber wie kann cih denn zeichenketten in einem Bool speichern?
Muss das nicht dann ein char sein oder so?weil die functionen habe ich bereits drinne.
Und muss ich die Variablen auch alle verarbeiten.Ich glaube eher das der fehler bei conioex.c liegt.
Weil ohen die klappts ja eigndlich.
nur lightred geht halt nicht...