17-10-2011, Monday-00:05:43
Simutrans benutzt zum Glück relativ wenig und meist auch nur vernüftig dokumentiertes C++; sonst hätte ich 2004 auch gleich das Handtuch geworfen. Die std:: sachen find ich eher (bsch) und den reichlichen Gebrauch von templates z.B. bei grund_t::find<...>() ist auch nicht mein Ding.
Ind koord.h findet sich die Routine: weight_by_distance(). Die berechnet aus dem Level und der Entfernung ein Gewicht für die Auswahl des Ziels.
Alle potentiellen Ziele werde so berechnet und in ein Array mit gewichten Leveln einsortiert. Aus Level 3 wird 300, um auch Luft nach unten zu haben. In Entfernung 10 wird daraus vielleicht 4127 und int 1000 Kästchen Entfernung 7. Danach werden die Levels in derm Array aufaddiert und ergeben zusamenn z.B. 904357. Dann wird eine Zahl zufällig ausgewählt, sagen wir 41728. Nun wird von Anfang das Haus gesucht, dessen summiertes Level kleiner-gleich dieser Zahl ist und dessen Nachfolger darüber liegt. Das geht sehr fix und ist nur dank templates mittlerweile etwas unübersichtlich geworden.
Ind koord.h findet sich die Routine: weight_by_distance(). Die berechnet aus dem Level und der Entfernung ein Gewicht für die Auswahl des Ziels.
Alle potentiellen Ziele werde so berechnet und in ein Array mit gewichten Leveln einsortiert. Aus Level 3 wird 300, um auch Luft nach unten zu haben. In Entfernung 10 wird daraus vielleicht 4127 und int 1000 Kästchen Entfernung 7. Danach werden die Levels in derm Array aufaddiert und ergeben zusamenn z.B. 904357. Dann wird eine Zahl zufällig ausgewählt, sagen wir 41728. Nun wird von Anfang das Haus gesucht, dessen summiertes Level kleiner-gleich dieser Zahl ist und dessen Nachfolger darüber liegt. Das geht sehr fix und ist nur dank templates mittlerweile etwas unübersichtlich geworden.