AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi mein Battletree-Algo funktioniert nicht so wie er soll...
Thema durchsuchen
Ansicht
Themen-Optionen

mein Battletree-Algo funktioniert nicht so wie er soll...

Ein Thema von yankee · begonnen am 8. Okt 2005 · letzter Beitrag vom 8. Okt 2005
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Re: mein Battletree-Algo funktioniert nicht so wie er soll..

  Alt 8. Okt 2005, 21:06
tja, warum ich kein log. verwendet habe hat einen ziemlich plausiblen Grund: Ich habe mich zwar daran erinnert, das man sowas errechnen kann, aber ich hatte nichtmehr erinnert wie und log habe ich vollkommen verdrängt. Ich habe also im Internet gesucht und ein paar Leute in meinem Umkreis gefragt, aber keiner wusste das. Nur im Internet habe ich jemand gefunden, der es per Trial and Error vorgeschlagen hatte und dann habe ich mir eben einfach gesagt "was soll's". Also danke für den Hinweis.

Ich habe übrigens als aller erstes versucht das ganze iterativ zu lösen. Ich bin damit aber nicht sonderlich weit gekommen und dann habe ich mir gesagt "was solls, es gibt warscheinlich kein besseres Beispiel für einen Rekursiven Algo, mach's einfach neu". Und man hat schließlich nur log2(spieleranzahl) Rekursionslevel. Also selbst bei 1024 Spielern (und das könnte kein Ottonormalverbraucherbildschirm mehr anzeigen) nur 10 Rekursionslevel und das sollte den Stack hoffentlich nicht überlasten (*an ein paar Programme denk', die rekursiv die ganze Dateistruktur einer Platte durchsuchen*). Wie groß ist der Stack denn btw?

Ich habe übrigens das Problem gefunden. Aber eine Lösung habe ich immrnoch nicht. Und zwar habe ich ein loggingfeature eingefügt. Das ist die Logdatei von 8 Spielern:
Code:
[20:48:21, 2] generate Battletree
[20:48:21, 3] using parameters: cnt=8 exponent=3 vchange=120 hchange=180 newx=576 newy=250
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=120 hchange=180 newx=540 newy=130 level=2
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=60 hchange=180 newx=360 newy=70 level=1
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=30 hchange=180 newx=180 newy=40 level=0
[20:48:21, 3] Spieler1
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=-30 hchange=180 newx=180 newy=100 level=0
[20:48:21, 3] Spieler2
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=-60 hchange=180 newx=360 newy=190 level=1
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=-30 hchange=180 newx=180 newy=220 level=0
[20:48:21, 3] Spieler3
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=30 hchange=180 newx=180 newy=160 level=0
[20:48:21, 3] Spieler4
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=-120 hchange=180 newx=540 newy=370 level=2
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=-60 hchange=180 newx=360 newy=430 level=1
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=-30 hchange=180 newx=180 newy=460 level=0
[20:48:21, 3] Spieler5
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=30 hchange=180 newx=180 newy=400 level=0
[20:48:21, 3] Spieler6
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=60 hchange=180 newx=360 newy=310 level=1
[20:48:21, 3] PaintPart running with parameters: direction=topround vchange=30 hchange=180 newx=180 newy=280 level=0
[20:48:21, 3] Spieler7
[20:48:21, 3] PaintPart running with parameters: direction=bottomround vchange=-30 hchange=180 newx=180 newy=340 level=0
[20:48:21, 3] Spieler8
Der gibt jedes mal, wenn PaintPart aufgerufen wird (die erste Zeile ist aus Button1Click), aus, ob er nach unten oder oben zeichnen soll und die Parameter mit denen er aufgerufen wurde. Dann schiebt er noch schnell die Beschriftung, die er ausgeben soll hinterher, wenn er eine erstellen soll. Als erstes ist mir aufgefallen, dann die Reihenfolge richtig ist... Ganz schön verzwickt. Beim näheren überlegen habe ich mir überlegt, dass jede topround einen positiven vchange-Wert haben sollte und jede bottomround einen netagtiven. Das ist aber genau der Fehler.
.... mh, wo ich gerade so tippe, fällt mir eine mögliche Lösung ein. Moment, das teste ich gerade mal, ich editiere gleich...

EDIT:
Ha, tatsächlich. Ich habe jetzt in PaintPart den Rekursionsaufruf folgendermaßen abgeändert und es funzt!:
Delphi-Quellcode:
PaintPart(xml.Items.ItemNamed['topround'],newx, newy, hchange, abs(vchange div 2), level -1); //draw lines to the top...
        PaintPart(xml.Items.ItemNamed['bottomround'],newx, newy, hchange, abs(vchange div 2)*-1, level -1); //..and to the bottom
also das mit dem abs() ist neu.

Danke für eure Denkanregungen und den Hinweis auf log!!
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz