Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Build Order - Programm
#1
Question 
Hey liebe com!
Ich habe seit ca. 2 Jahren angefangen Java zu lernen. Jetzt möchte ich gerne einmal endlich ein großes Projekt anfangen bzw. habe bereits angefangen.

Ich möchte gerne ein Programm erstellen das die Optimalste "Build Order" berechnet. Das heißt am ende soll ich dem Programm sagen können welche Gebäude ich bis wohin ausgebaut haben möchte. Z.b. Holzfäller-lager 13 Lehmgrube 12 und Eisenmine 9. Das Programm berechnet dann welche Reihenfolge die effektivste und vor allem schnellste ist. Ausgabe könnte z.B. so sein:

Bei 0 min Holzfäller-lager
Bei 2,5 min Lehmgrube
Bei 5 min Holzfäller-lager
Bei 12 min Hauptgebäude
...
..
.
Natürlich genauer und länger.

Angefangen habe ich bereits. Auch alle nötigen Variablen wie z.B. die einzelnen Rohstoff kosten. Das einzigste was fehlt ist von jedem Gebäude die Pure zeit die es braucht um gebaut zu werden. Ich habe momentan nur die 6 wichtigsten Gebäude einbezogen. Das heißt die 3 Rohstoff-lager, Speicher, Bauernhof und das Hauptgebäude (wegen der zeitverkürzung). Und da das die macher des DS Lan Tools sicherlich auch i-wo die Zeiten gespeichert haben, hab ich nun ein paar fragen:
Sind die Zeiten die Orginalen DS-Zeiten? Wo kann ich die im Souce Code finden? Ist es mir erlaubt diese in mein Programm zu implementieren?
Bitte um hilfe!
mfg
Sp33de
Reply
#2
(22.01.2012, 17:59)Speedbreacker Wrote: Sind die Zeiten die Orginalen DS-Zeiten?
Ich bin mir nicht ganz sicher, aber ich glaube schon, kannst ja mit denen von DS vergleichen.
(22.01.2012, 17:59)Speedbreacker Wrote: Wo kann ich die im Souce Code finden?
/htdocs/include/configs/buildings.php
bei $cl_builds->set_time(basis, faktor_pro_stufe);
(22.01.2012, 17:59)Speedbreacker Wrote: Ist es mir erlaubt diese in mein Programm zu implementieren?
Ja, klar.

LG
Molt
Reply
#3
ohh sehr gut danke dir! doch jetzt steht da bei jedem gebäude nur 2 zahlen. Wie wird damit die eigentlich zeit berrechnet? Als beispiel:

Quote:$cl_builds->add_build($lang->grab("configs_buildings", "main"), "main");
$cl_builds->set_woodprice("90","1.26");
$cl_builds->set_stoneprice("80","1.275");
$cl_builds->set_ironprice("70","1.26");
$cl_builds->set_bhprice("5","1.17");
$cl_builds->set_time("1080","1.2");
$cl_builds->set_points("10","1.2");
$cl_builds->set_needbuilds(array());
$cl_builds->set_maxstage("30");
$cl_builds->set_specials(array());
$cl_builds->set_description($lang->grab("configs_buildings", "main_des"), "main");
$cl_builds->set_graphicCoords("250,120,215,140,222,200,280,230,340,195,337,130");

denn mit jeder stufe steigt ja die benötigte zeit
mfg sp33de
Reply
#4
In Java sähe das so aus:
Code:
int level = 8; // Aktuelle Stufe des Gebäudes
int base = 1080; // Die erste Zahl
float factor = 1.2; // Die zweite Zahl
int time = (int)Math.round(base * Math.pow(factor, level)); // Evtl. auch level-1, bin nicht ganz sicher

Hier fehlt jetzt aber noch der Faktor der Stufe der Hauptgebäudes.
Reply
#5
also kurz und knapp: "rundeSadbase * (factor hoch level)". Also z.B. "rundeSad1080 * (1,2 hoch 8). Daher 4643,80 stunden wahrscheinlich... Daher 1,28 stunden. Also Eine stunden 16 min.
Das haut leider nicht hin :/. Oder hab ich was falsch gerechnet? Die macher habens sich recht einfach gemacht mit den ganzen daten ^^. Siehe screenshot von meiner mühe xD:

[Image: pic1nn.th.jpg]


Reply
#6
Uhh, das ist aber gefährlich das ganze fest in den Code zu packen. Lade dir lieber die XML-Config runter und bau einen kleinen XML-Parser dafür (http://de10.die-staemme.de/interface.php...lding_info)
Reply
#7
(23.01.2012, 06:10)agrafix Wrote: Uhh, das ist aber gefährlich das ganze fest in den Code zu packen. Lade dir lieber die XML-Config runter und bau einen kleinen XML-Parser dafür (http://de10.die-staemme.de/interface.php...lding_info)

[Link]

Dein Link ging nicht, Alexander.

MfG Manuel
Reply
#8
(23.01.2012, 13:50)SlimShady95 Wrote:
(23.01.2012, 06:10)agrafix Wrote: Uhh, das ist aber gefährlich das ganze fest in den Code zu packen. Lade dir lieber die XML-Config runter und bau einen kleinen XML-Parser dafür (http://de10.die-staemme.de/interface.php...lding_info)

[Link]

Dein Link ging nicht, Florian.

MfG Manuel

Stimmt genau, Yannic!

MfG Florian
Reply
#9
Aaah fuuuu. Sorry, bin noch in der Wochenendphase ^^
Wollte Alexander schreiben >.<

MfG Manuel
Reply
#10
Das problem ist das das nicht die orginalen werte sind. Warum sollte das "gefährlich" sein? Ich hab das ,wie man auf dem oben gezeigten bild sehen kann, die Rohstoffe als Array definiert. Somit muss ich nur noch sagen "rohstoffe_hauptgebaede_holz[momentane_holz_stufe]" und er weiß was gemeint ist. Gut eure Möglichkeit würde auch gehen. Aber wie gesagt. Ich glaube nicht das das die originalen werte sind. Hab das ja schon mit der zeit ausprobiert. Also nachgerechnet und überprüft. Hab ich jetzt mit den Ressis aber nicht gemacht.

und nochmal danke für eure bisherige hilfe!
Reply
#11
(23.01.2012, 15:40)Speedbreacker Wrote: Das problem ist das das nicht die orginalen werte sind. Warum sollte das "gefährlich" sein? Ich hab das ,wie man auf dem oben gezeigten bild sehen kann, die Rohstoffe als Array definiert. Somit muss ich nur noch sagen "rohstoffe_hauptgebaede_holz[momentane_holz_stufe]" und er weiß was gemeint ist. Gut eure Möglichkeit würde auch gehen. Aber wie gesagt. Ich glaube nicht das das die originalen werte sind. Hab das ja schon mit der zeit ausprobiert. Also nachgerechnet und überprüft. Hab ich jetzt mit den Ressis aber nicht gemacht.

und nochmal danke für eure bisherige hilfe!

Öhhm... die Werte die du unter dem Link findest, sind 100% die originalen Werte die (in meinem Beispiel-Link) auf Welt10 verwendet werden. Änder einfach das de10 auf deXX wenn du Werte für eine andere Welt brauchst. Das sind auch die Werte, die im Spiel verwendet werden.

Solche Werte fest einzuprogrammieren ist in sofern "gefährlich", als das es völlig unflexibel ist und sehr fehleranfällig ist.

-alex

/€: Wie willst du deine Problemstellung eigentlich lösen? Per BruteForce?
Reply
#12
sehr schööön! Weiß nicht ob das jetzt gut oder schlecht ist. Naja wenn mans macht dann richtig Smile
Is flexibler da hast du recht.
Und ja es wird eine Art Brute-Force methode. Weiß noch nicht genau wie ich das machen werde. Aber der PC wird ne ganze menge rechnen müssen Big Grin

Speede

/edit Wie würdest du es denn machen? Ich wusste bis jetzt nicht wie ich denn den fortschrit "messen" sollte. Die punkte können nicht als maßstab genommen werden. Das ist klar. Allerdings wäre es vieleicht mit dem neuen system vieleicht möglich...
Reply
#13
und noch eine frage. :

(22.01.2012, 19:56)Molt Wrote: In Java sähe das so aus:
Code:
int level = 8; // Aktuelle Stufe des Gebäudes
int base = 1080; // Die erste Zahl
float factor = 1.2; // Die zweite Zahl
int time = (int)Math.round(base * Math.pow(factor, level)); // Evtl. auch level-1, bin nicht ganz sicher

Hier fehlt jetzt aber noch der Faktor der Stufe der Hauptgebäudes.

woher hat er das? Ich meine das "int time = (int)Math.round(base * Math.pow(factor, level))"???
Reply
#14
http://forum.die-staemme.de/showthread.php?t=84997
Reply
#15
Naja, mir würde auf die schnelle auch kein besserer Ansatz als BruteForce + Rating einfallen. Musst halt kriterien festlegen, nach denen du einen Bau-Ablauf bewertest und dann alle durchprobieren bist du den besten hast Smile
Reply
#16
(23.01.2012, 18:38)Speedbreacker Wrote: woher hat er das? Ich meine das "int time = (int)Math.round(base * Math.pow(factor, level))"???

Aus meinem Kopf?
Das ist die logische Umsetzung von einem Ausgangswert, einem Faktor und einer Stufe. ^^
Reply
#17
Naja wenn man mal überlegt...

Ich habe mal übrigens durchgerechnet. Wenn man 12 Gebäude stufen zuweisen würde. Daher zum beispiel das jedes meiner 6 erstmal als wichtig ernannten Gebäude auf stufe 2 wäre. Oder 2 Gebäude auf jeweils stufe 6 wären. Oder 3 Gebäude stufe 3 und zwei stufe 1, dann würden sich bereits über 2 Milliarden Möglichkeiten auftun(6^12) wie man diese Stufen erreichen könnte. Was natürlich utopisch ist.
Deswegen müsste man (ich, vielleicht mit eurer Hilfe) überlegen was denn ein Kriterium des "Erfolgs" sein könnte. Vielleicht so eine art Wirtschafts-Wachstum.

Eine Formel die nach immer 3 Gebäudestufen diese Wachstumsrate bestimmt.(somit wäre das ganze auf 2592 schritte runterzurechnen, bei der überprüfung alle 4 schritte auf 15.552 und bei 5 auf 93.312 was aber immernoch über zwanzig tausend mal weniger ist) Aber wenn man überlegt. Könnte es ja gut sein das es sich rechnet am anfang als erstes das Hauptgebäude einmal auszubauen, weil es ja quasi nix kostet. Aber das wird das system ja warscheinlich nicht sofort erkennen, sondern erst in den nächsten 10 schritten . Doch wenn es nur alle 3/4/5 schritte überprüft? Was meint ihr?

Reply
#18
Du könntest ja versuchen, nur das Hauptgebäude, den Speicher, den Bauernhof und die Holz/Lehm/Eisenmine zu verwenden.
Das Hauptgebäude wird nur dann ausgebaut, wenn die Rohstoffe schneller da sind, als man sie (sinnvoll) verbauen kann.
Der Speicher und Bauernhof kommt in die Bauschleife, indem du nach jedem Ausbau eine Abfrage machst, in der du den Maximalwert von BH-Plätze und Ressianzahl von den danach möglichen Gebäuden mit dem Aktuellen Platz vergleichst (Achtung: Bei den BH-Plätzen die Differenz). Ansonsten soll das Programm ausprobieren, welche Mine am besten ist zum Ausbauen (notfalls Brute-Force).
Lass dir dann den Dorfausbau in einer Liste/Datenbank abspeichern.
Die Bauzeit insgesamt wird wohl (ohne Farmen) am schnellsten nach diesem Prinzip sein.
In einem zweiten Programm könntest du dann aus der Liste/Datenbank die insgesamte Bauzeit bis zu einer gewissen Punktzahl etc. ausrechnen lassen und damit eine weiter Liste/Datenbank mit Favoriten erstellen lassen.
Diese würde ich dann aber mit dem Auge kontrollieren und bewerten. Die anderen Listen/Datenbanken lässt du bestehen, damit das Programm vergleichen kann, ob es diesen Ausbau schon hat oder nicht.
Reply
#19
okay das ist ne gute idee ich werds versuchen!
Reply
#20
Du musst bei deiner Berrechnung auch Truppen & Farming als Variablen einberechnen, sonst kommst du auf keine realistische und effektive Werte...
Reply




Users browsing this thread: 5 Guest(s)