Schiffeversenken: Feld zeichnen



  • Weil ich hier 2 Bücher liegen habe, die es im Lernverzeichnis drin haben. Wenns so schlimm ist, wieso gehen dann viele Autoren darauf ein? Letztenendes ist es doch egal, ich kanns meinetwegen auch xyz nennen und auf CXyz verzichten...



  • Weil es viele Idioten auf der Welt gibt. Es hat absolut keinen Mehrwert und hat mit der ursprünglichen ungarischen Notation nichts mehr zu tun.



  • Hm okay, scheinst ja sehr selbstbewusst zu sein, wenn du sowas schreibst... Naja, aber das ist hier nicht das Thema. Vielleicht kannst du mir ja mal helfen :p



  • Okay, ich habs selber gelöst. Hier nochmal die "fertige" for-Schleife.

    for(int i = 0; i < 9; i++)
    	{
    		std::cout << "\n\n			";
    		for(int j = 0; j < 9; j++)
    		{
    			for(int l = 0; l < PosShip.size(); l++)
    			{
    				if(i == PosShip[l].x - 1 && j == PosShip[l].y - 1)
    				{
    					acField[i][j] = '#';
    					break;
    				}
    				else acField[i][j] = 'O';
    			}
    			std::cout << "  " << acField[i][j];
    		}
    	}
    

  • Mod

    klucki9 schrieb:

    Hm okay, scheinst ja sehr selbstbewusst zu sein, wenn du sowas schreibst...

    Er hat da nicht ganz unrecht. Es gibt viele gute Gründe die dagegen sprechen und wenige dafür. Siehe hier für eine ausführliche Begründung:
    http://www.c-plusplus.net/forum/p1773551#1773551

    Okay, ich habs selber gelöst. Hier nochmal die "fertige" for-Schleife.

    Ach, ich wollte es mir gerade angucken. Was mir schonmal beim Querlesen aufgefallen ist:
    1. Initialisierungsliste mal googlen und benutzen.
    2. Wozu einen leeren Destruktor definieren? Deutet da drauf hin, dass du mal Destruktoren gesehen hast, aber nicht verstanden. Häufig wird so etwas auch von schlechten Lehrern weitergegeben. Was von beidem hier der Fall ist, musst du wissen.
    3. Deine Methode SetShip macht ganz merkwürdige Sachen, die nicht zum Namen passen. Eher so eine Art GetPos von dem was es macht. Den Rückgabewert kannst du übrigens bei POD-structs auch direkt initialisieren mit SPositionShip PosShip ={iPosX, iPosY}; . Oder spendier der Position einen passenden Konstruktor.
    4. Bei Klassenmethoden ist ein this-> implizit und nur nötig, um Namenskonflikte aufzulösen.



  • SeppJ schrieb:

    klucki9 schrieb:

    Hm okay, scheinst ja sehr selbstbewusst zu sein, wenn du sowas schreibst...

    Er hat da nicht ganz unrecht. Es gibt viele gute Gründe die dagegen sprechen und wenige dafür. Siehe hier für eine ausführliche Begründung:
    http://www.c-plusplus.net/forum/p1773551#1773551

    Okay, ich habs selber gelöst. Hier nochmal die "fertige" for-Schleife.

    Ach, ich wollte es mir gerade angucken. Was mir schonmal beim Querlesen aufgefallen ist:
    1. Initialisierungsliste mal googlen und benutzen.
    2. Wozu einen leeren Destruktor definieren? Deutet da drauf hin, dass du mal Destruktoren gesehen hast, aber nicht verstanden. Häufig wird so etwas auch von schlechten Lehrern weitergegeben. Was von beidem hier der Fall ist, musst du wissen.
    3. Deine Methode SetShip macht ganz merkwürdige Sachen, die nicht zum Namen passen. Eher so eine Art GetPos von dem was es macht. Den Rückgabewert kannst du übrigens bei POD-structs auch direkt initialisieren mit SPositionShip PosShip ={iPosX, iPosY}; . Oder spendier der Position einen passenden Konstruktor.
    4. Bei Klassenmethoden ist ein this-> implizit und nur nötig, um Namenskonflikte aufzulösen.

    1.] Okay 🙂
    2.] Ja wurde mir so beigebracht, was soll denn sonst da rein? Alles auf NULL setzen?
    3.] Ja das ist mir auch aufgefallen. Ich hätte auch einfach GetPosX und GetPosY als funktionen definieren sollen und einfach in der main()-Funktion mit der Struktur binden sollen:

    SPositionShip PosShip1
    PosShip1.x = Ship1.GetPosX();
    PosShip1.y = Ship1.GetPosY();
    

    oder wie meinst du das?
    4.] Ja ich weiß, ist es schlimm, es trotzdem zu machen (aus übersichtlichen Gründen)?

    Danke dir 😉



  • klucki9 schrieb:

    Hm okay, scheinst ja sehr selbstbewusst zu sein, wenn du sowas schreibst... Naja, aber das ist hier nicht das Thema. Vielleicht kannst du mir ja mal helfen :p

    Gewoehn dich dran, 314159265358979 traegt generell nichts zum Thema bei, sondern ist immer auf der Suche nach Fehlern oder anderen Sachen die er dem Threadsteller auf die Nase binden kann.



  • Wie man in den Wald hineinruft...


  • Mod

    klucki9 schrieb:

    2.] Ja wurde mir so beigebracht, was soll denn sonst da rein? Alles auf NULL setzen?

    Nein bloß nicht. Lass es einfach ganz weg.

    Hmm. Ungarische Notation, Destruktoren nicht verstanden. 💡 Wechsel lieber den Lehrer. Lieber nichts gelernt, als falsch gelernt.

    3.] Ja das ist mir auch aufgefallen. Ich hätte auch einfach GetPosX und GetPosY als funktionen definieren sollen und einfach in der main()-Funktion mit der Struktur binden sollen:

    SPositionShip PosShip1
    PosShip1.x = Ship1.GetPosX();
    PosShip1.y = Ship1.GetPosY();
    

    oder wie meinst du das?

    Kommt es dir nicht etwas komisch vor, erst ein neues Objekt anzulegen, dann Wert für Wert dessen Attribute zu setzen und es dann zurück zu geben, anstatt z.B. gleich das richtige zurück zu geben?

    4.] Ja ich weiß, ist es schlimm, es trotzdem zu machen (aus übersichtlichen Gründen)?

    Nein, das ist in Ordnung, wenn's dadurch besser lesbar ist.



  • Okay, ich nehms mir zu Herzen 🙂 Aber heute nicht mehr 😛 ich danke Euch


Anmelden zum Antworten