Seite 16 von 202 ErsteErste ... 61213141516171819202666116 ... LetzteLetzte
Ergebnis 226 bis 240 von 3026

Thema: [Programmiererstammtisch] "Zum ächzenden Compiler"

  1. #226
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Was soll tick überhaupt machen?

  2. #227
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Ist nur ein Beispielprogramm, wäre aber zbs sowas wie:

    Cat::Tick(){
    hunger++;
    tired++;
    decideAction();
    }

    Cat::decideAction() {
    if (Cat.hunger > 50) {
    hunt(); //hier bräuchte ich die Infos wo sich die Maus befindet. Müsste bei meiner Idee mit this, die World bis hier runter durchtragen...
    } else { sleep(); }
    }
    }

    Das ganze lässt sich dann beliebig erweitern das man mehr Daten von der World braucht...

  3. #228
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Du siehst ja hier, was für Verrenkungen man machen müsste. Man muss sich die Frage stellen, ob in Cat tatsächlich die Jagdlogik (hunt) gehört. Ich würde sie verneinen, weil sonst endet man so, wie es im Civ4-SDK ist - alles ist irgendwie miteinander verwoben.

    Hier am Beispiel mit World usw. würde ich so vorgehen: jede Tätigkeit von Cat und Mouse, die Wissen über ihre Umgebung braucht, wird außerhalb von Cat und Mouse implementiert.
    Cat bietet aber dann eine Methode an, mit der auf Hunger geprüft werden kann. Dann kann Cat auf die Jagd geschickt werden, aber diese Jagdlogik ist außerhalb von Cat implementiert.


    Ich strebe für meine Klassenhierarchie eine Art gerichtete Baumstruktur an, damit Abhängigkeiten unter den Klassen auf ein Minimum reduziert werden.

  4. #229
    Moderator Avatar von viktorianer
    Registriert seit
    14.07.07
    Ort
    Berlin
    Beiträge
    14.913
    Zitat Zitat von [VK] Beitrag anzeigen
    Ist nur ein Beispielprogramm, wäre aber zbs sowas wie:

    Cat::Tick(){
    hunger++;
    tired++;
    decideAction();
    }

    Cat::decideAction() {
    if (Cat.hunger > 50) {
    hunt(); //hier bräuchte ich die Infos wo sich die Maus befindet. Müsste bei meiner Idee mit this, die World bis hier runter durchtragen...
    } else { sleep(); }
    }
    }

    Das ganze lässt sich dann beliebig erweitern das man mehr Daten von der World braucht...
    Zitat Zitat von alpha civ Beitrag anzeigen
    Du siehst ja hier, was für Verrenkungen man machen müsste. Man muss sich die Frage stellen, ob in Cat tatsächlich die Jagdlogik (hunt) gehört. Ich würde sie verneinen, weil sonst endet man so, wie es im Civ4-SDK ist - alles ist irgendwie miteinander verwoben.

    Hier am Beispiel mit World usw. würde ich so vorgehen: jede Tätigkeit von Cat und Mouse, die Wissen über ihre Umgebung braucht, wird außerhalb von Cat und Mouse implementiert.
    Cat bietet aber dann eine Methode an, mit der auf Hunger geprüft werden kann. Dann kann Cat auf die Jagd geschickt werden, aber diese Jagdlogik ist außerhalb von Cat implementiert.


    Ich strebe für meine Klassenhierarchie eine Art gerichtete Baumstruktur an, damit Abhängigkeiten unter den Klassen auf ein Minimum reduziert werden.
    Ich finde der Ansatz ist falsch bzw. ich kann diesen so nicht folgen.

    Ich würde das anders machen. Die Katze muss doch wissen wie man jagt. Und sie ist nicht eine "Gott-Katze" die aus einem Wunder heraus jagen kann. Konkret würde das also Heißen:

    Die Katze ist wie oben Aufgebaut - mit der Methode hunt() von mir aus.
    Was fehlt, ist die Interaktion mit der Welt. In den Beispielen oben scheint mir das nicht gut gelöst zu sein.

    Die Welt und die Katze können besser über z.B. ein Observer Design Pattern kommunizieren.
    In dieser Welt werden Katzen geboren und jede Katze ist der Welt bekannt. Die Welt kennt also alle Katzen in der Welt und auch alle Mäuse. Jede Maus aber auch jede Katze muss die Welt kennen.

    Kommuniziert wird aber über Nachrichten. Über Nachrichten bekommt die Katze die neuen Mäuse in der Umgebung mitgeteilt und kann dann ihre eigene Jagt-Logik anwenden.


    MP live streams | Civ6: Civ 6 - Allgemeines und Civ 6 Strategien-FAQ | PBEM-Tool : PBEM1 - Russland PBC6 - Ägypten+Sumerien PBC18 - Cree PBC19 - Australien

    Amateurastronomie Blog

    "Eine überragende Kultur kann nicht von außen her erobert werden, so lange sie sich nicht von innen her selbst zerstört hat"

  5. #230
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Die Frage ist doch, wo die Jadglogik implementiert wird - in World oder Cat? Das Observer-Pattern sorgt ja nur dafür, dass Objekte auf Zustandsänderungen eines anderen Objekts reagieren können, ohne das dieses Objekt seine Beobachter kennen muss. (Hier also z.B. das World von dem Hunger-Status von einer Katze erfährt und entsprechend reagiert.)

  6. #231
    Moderator Avatar von viktorianer
    Registriert seit
    14.07.07
    Ort
    Berlin
    Beiträge
    14.913
    Na sagte ich doch. Die Katze muss es machen. Nicht die Welt oder jemand anderer.


    MP live streams | Civ6: Civ 6 - Allgemeines und Civ 6 Strategien-FAQ | PBEM-Tool : PBEM1 - Russland PBC6 - Ägypten+Sumerien PBC18 - Cree PBC19 - Australien

    Amateurastronomie Blog

    "Eine überragende Kultur kann nicht von außen her erobert werden, so lange sie sich nicht von innen her selbst zerstört hat"

  7. #232
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Damit sind aber Katze und Welt zu stark miteinander gekoppelt. Das die Welt von den Katzen weis - ok, die Welt ist u.a. ein Container für Katzen. Aber die Katze darf dann nichts über die gesamte Welt wissen. Die Jadglogik (und somit auch die Bewegungslogik) darf nicht in Cat verlagert werden. Nur so kann man eine gegenseitige Abhängikeit vermeiden.

  8. #233
    Moderator Avatar von viktorianer
    Registriert seit
    14.07.07
    Ort
    Berlin
    Beiträge
    14.913
    Die Katze lebt in dieser Welt. Sie muss diese also zwangsweise kennen. Sie muss nicht wissen welche Welt das ist aber das man in dieser Welt jagen kann und das man sich bewegt. Allerdings muss die Welt nicht wissen wie die Katze das macht. Das weiß die Katze alleine.


    Und beide haben keine Abhängigkeit, über das passende Vorgehen - s.O..
    Beide kennen sich nicht direkt. Beide sind austauschbar.


    MP live streams | Civ6: Civ 6 - Allgemeines und Civ 6 Strategien-FAQ | PBEM-Tool : PBEM1 - Russland PBC6 - Ägypten+Sumerien PBC18 - Cree PBC19 - Australien

    Amateurastronomie Blog

    "Eine überragende Kultur kann nicht von außen her erobert werden, so lange sie sich nicht von innen her selbst zerstört hat"

  9. #234
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Auch wenn Civ4 auf der letzten Seite dafür kritisiert wurde... vielleicht ist es dort doch recht durchdacht dargestellt. Die Jagd-Routine gehört nicht direkt zum Tier, aber ist einer KI/einer Spielelogik zugeordnet, die auf den Tieren operiert. In Civ4 werden nun den 'Einheiten'-Klassen (z.B. Unit) als Basisklassen für Klassen verwendet, die die KI-Operationen durchführt. (UnitAI).

    Wenn man die Jagd-Routine nicht der Katze direkt zuordnen will, könnte man auch mit Function-Handlern arbeiten. D.h. der Katze wird ein Pointer auf die Welt gegeben und beim Jagen wird dann eine Methode der Welt aufgerufen.
    Dabei trifft man nat. trotzdem auf das von Alpha Civ beschriebene Problem, dass die Katze Kenntnis von der Welt haben muss (und deren Header-Datei importieren muss). Das sehe ich aber nicht (Edit) als negativ an.
    Geändert von Ramkhamhaeng (06. Juni 2014 um 20:15 Uhr)

  10. #235
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    (Edit zum Edit) Man kommt dann um Vorwärtsdeklarationen nicht vorbei. Bei Civ4 müssen z.B. die Header der Klassen CvArea, CvPlot und CvUnit alle untereinander mit Vorwärtsdeklarationen versehen werden, da jede dieser Klassen sich gegenseitig inkludiert. Das ist eine zu enge Verzahnung.
    Ein Nachteil bei Vorwärtsdeklarationen ist, dass man keine Inline-Methoden schreiben darf, die diese Klassen verwenden.

    Generell wird auch das Testen schwieriger, je höher die Abhängigkeiten unter den Klassen sind.
    Geändert von alpha civ (06. Juni 2014 um 20:32 Uhr)

  11. #236
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Oh, nach der Zustimmung musste ich doch noch mal meinen Text lesen. Da hab ich beim Umstellen des letzten Satzes doch glatt das „nicht“ vergessen
    Ich wollte sagen, dass man gewisse Abhängigkeiten nicht vermeiden kann.

  12. #237
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    In file included from src\IBrush.hpp:6:0,
    from src\BlockBrush.hpp:3,
    from src\BlockBrush.cpp:1:
    src\Plane.hpp: In member function 'virtual void Plane::write(std::ostream&) cons
    t':
    src\Plane.hpp:25:12: error: cannot bind 'std::basic_ostream<char>' lvalue to 'st
    d::basic_ostream<char>&&'
    os << " ( " << a << " )" <<
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\BlockBrush.hpp:3,
    from src\BlockBrush.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Vec3<int>]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    Achtung Spoiler:

    In file included from src\BlockBrush.hpp:3:0,
    from src\BlockBrush.cpp:1:
    src\IBrush.hpp: In member function 'virtual void IBrush::write(std::ostream&) co
    nst':
    src\IBrush.hpp:19:27: error: cannot bind 'std::ostream {aka std::basic_ostream<c
    har>}' lvalue to 'std::basic_ostream<char>&&'
    os << p << std::endl;
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\BlockBrush.hpp:3,
    from src\BlockBrush.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Plane]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\IBrush.hpp:6:0,
    from src\IGenerator.hpp:6,
    from src\GenVK1.hpp:3,
    from src\GenVK1.cpp:1:
    src\Plane.hpp: In member function 'virtual void Plane::write(std::ostream&) cons
    t':
    src\Plane.hpp:25:12: error: cannot bind 'std::basic_ostream<char>' lvalue to 'st
    d::basic_ostream<char>&&'
    os << " ( " << a << " )" <<
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\IGenerator.hpp:6,
    from src\GenVK1.hpp:3,
    from src\GenVK1.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Vec3<int>]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\IGenerator.hpp:6:0,
    from src\GenVK1.hpp:3,
    from src\GenVK1.cpp:1:
    src\IBrush.hpp: In member function 'virtual void IBrush::write(std::ostream&) co
    nst':
    src\IBrush.hpp:19:27: error: cannot bind 'std::ostream {aka std::basic_ostream<c
    har>}' lvalue to 'std::basic_ostream<char>&&'
    os << p << std::endl;
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\IGenerator.hpp:6,
    from src\GenVK1.hpp:3,
    from src\GenVK1.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Plane]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\IBrush.hpp:6:0,
    from src\Map.hpp:9,
    from src\main.cpp:5:
    src\Plane.hpp: In member function 'virtual void Plane::write(std::ostream&) cons
    t':
    src\Plane.hpp:25:12: error: cannot bind 'std::basic_ostream<char>' lvalue to 'st
    d::basic_ostream<char>&&'
    os << " ( " << a << " )" <<
    ^
    In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39:0,
    from src\main.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Vec3<int>]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\Map.hpp:9:0,
    from src\main.cpp:5:
    src\IBrush.hpp: In member function 'virtual void IBrush::write(std::ostream&) co
    nst':
    src\IBrush.hpp:19:27: error: cannot bind 'std::ostream {aka std::basic_ostream<c
    har>}' lvalue to 'std::basic_ostream<char>&&'
    os << p << std::endl;
    ^
    In file included from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39:0,
    from src\main.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Plane]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\IBrush.hpp:6:0,
    from src\Map.hpp:9,
    from src\Map.cpp:1:
    src\Plane.hpp: In member function 'virtual void Plane::write(std::ostream&) cons
    t':
    src\Plane.hpp:25:12: error: cannot bind 'std::basic_ostream<char>' lvalue to 'st
    d::basic_ostream<char>&&'
    os << " ( " << a << " )" <<
    ^
    In file included from src\Map.hpp:5:0,
    from src\Map.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Vec3<int>]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\Map.hpp:9:0,
    from src\Map.cpp:1:
    src\IBrush.hpp: In member function 'virtual void IBrush::write(std::ostream&) co
    nst':
    src\IBrush.hpp:19:27: error: cannot bind 'std::ostream {aka std::basic_ostream<c
    har>}' lvalue to 'std::basic_ostream<char>&&'
    os << p << std::endl;
    ^
    In file included from src\Map.hpp:5:0,
    from src\Map.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Plane]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\IBrush.hpp:6:0,
    from src\StandardBrush.hpp:3,
    from src\StandardBrush.cpp:1:
    src\Plane.hpp: In member function 'virtual void Plane::write(std::ostream&) cons
    t':
    src\Plane.hpp:25:12: error: cannot bind 'std::basic_ostream<char>' lvalue to 'st
    d::basic_ostream<char>&&'
    os << " ( " << a << " )" <<
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\StandardBrush.hpp:3,
    from src\StandardBrush.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Vec3<int>]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^
    In file included from src\StandardBrush.hpp:3:0,
    from src\StandardBrush.cpp:1:
    src\IBrush.hpp: In member function 'virtual void IBrush::write(std::ostream&) co
    nst':
    src\IBrush.hpp:19:27: error: cannot bind 'std::ostream {aka std::basic_ostream<c
    har>}' lvalue to 'std::basic_ostream<char>&&'
    os << p << std::endl;
    ^
    In file included from src\IWriteable.hpp:4:0,
    from src\IMapObject.hpp:3,
    from src\IBrush.hpp:5,
    from src\StandardBrush.hpp:3,
    from src\StandardBrush.cpp:1:
    c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:602:5: error: initializing
    argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_o
    stream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_
    traits<char>; _Tp = Plane]'
    operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
    ^

    Rest wiederholt sich.

    Kann jemand mit dieser Fehlermeldungen was anfangen? Hatte jemand schon sowas ähnliches?

    Geht darum das meine op<< Funktion, mit write() als Hilfsfunktion nicht gescheit funktioniert

  13. #238
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Oh man, ich hab mich diesen Abend gewundert denn bloß meine Spline-Daten so gezackt sind. Die müssten doch total glatt sein!?
    Bild

    Jetzt ging mir ein Licht auf
    So sahen die Eingabedaten aus:
    Code:
    0,000000 194,803970 133,550808
    0,000701 195,134742 133,984334
    0,001403 195,463144 134,413711
    0,002104 195,789183 134,838953
    0,002806 196,112868 135,260079
    0,003507 196,434208 135,677102
    0,004208 196,753211 136,090041
    0,004910 197,069886 136,498911
    0,005611 197,384242 136,903727
    0,006313 197,696287 137,304507
    ……………
    Verdammt, immer wenn ich mal Gnuplot raus krame mach ich den Fehler.
    Angehängte Grafiken Angehängte Grafiken

  14. #239
    Beyond Mars Avatar von [VK]
    Registriert seit
    05.02.08
    Beiträge
    59.566
    Mal eine Frage:

    Gibt's bei vim die Möglichkeit innerhalb einer Zeile eine Zeile hoch zu gehen? Also wenn man längere Sätze schreibt die über die Zeile hinausgehen...

  15. #240
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    D.h. die Zeile wird umgebrochen und beim hochgehen willst du eigentlich N Zeichen nach vorne? Wüsste nicht dass dafür was von Hause dabei ist. Man könnte den 'j'-Befehl überschreiben und durch 'Nh' ersetzen, wenn erkannt wird, dass man sich in einer umgebrochenen Zeile befindet.

    Ah, hier steht die Lösung:
    Edit http://vim.wikia.com/wiki/Move_through_wrapped_lines
    Geändert von Ramkhamhaeng (08. Juni 2014 um 23:14 Uhr)

Seite 16 von 202 ErsteErste ... 61213141516171819202666116 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •