![]() |
Mehr Speed für Random?
Hi Leute!
Bin gerade dabei ein Programm zu basteln mit dem Nahkämpfe im Tabeltop-Spiel Warhammer 40.000 berechnet werden. hab nur gerade das Problem, dass das Ganze ziemlich langsam läuft... hier mal der Quelltext von dem Ausschnitt um dens sich dreht:
Delphi-Quellcode:
Die Prozedur wurd immer benutzt wenn gewürfelt wird, und das is ziemlich oft der Fall...
function wurf (a,w:real):real;
var wa,wr,anw:integer; begin wr:=0; anw:=0; if a=0 then result:=0 else begin wa:=0; repeat wa:=wa+1; randomize; wr:=random(6)+1; if wr>=w then anw:=anw+1 until wa=a; result:=round(anw); end end; a ist die Anzahl der Würfe und w das Ergebnis, dass mit einem Wurf erreicht werden muss. z.B. greift man mit 5 Attacken an, und muss mit jeder eine 3 oder mehr Würfeln, damit sie den Gegner trifft. habt ihr ne Idee wie man das Ganze schneller machen könnte als es bis jetzt ist? mfg Fabian |
Re: Mehr Speed für Random?
Das dürfte sich recht einfach optimieren lassen. Könntest du nochmal die Regeln erklären?
Die Wahrscheinlichkeit, mit einem Würfel einen Wert nicht zu erreichen, liegt doch bei etwa (w-1)/6. Die Wahrscheinlichkeit mit keinem von n Würfeln drüber zu kommen, liegt dann eben bei ((w-1)/6)^n. Dann brauchst du nur noch einen einzigen Random aufruf und du bist fertig. |
Re: Mehr Speed für Random?
Habe nur etwas grundlegendes:
randomize sollte nur einmal aufgerufen werden, vielleicht beim Start des Programms und nicht bei jedem Würfeln. Grüße Klaus |
Re: Mehr Speed für Random?
Wie viele von diesen Würfen musst du denn simulieren? Alternativ gäbe es auch die Möglichkeit eine Liste mit den jeweiligen Wahrscheinlichkeiten im Vorraus zu berechnen und sich dann viele Randoms zu sparen.
|
Re: Mehr Speed für Random?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
Zitat:
Edit: Hab jetzt das komplette Projekt gezippt beigefügt. mfg Fabian |
Re: Mehr Speed für Random?
Es würde die Lesbarkeit wesentlich erhöhen, wenn du nur den relevanten Teil hier posten würdest und ansonsten dein Projekt an deinen Beitrag anhängen würdest.
|
Re: Mehr Speed für Random?
Was willst du denn jetzt eigentlich? Einen einzelnen Zug mit mehreren Würfeln durchrechnen, oder ausrechnen, was ein durchschnittlicher Wert für die treffenden Angriffe ist?
|
Re: Mehr Speed für Random?
ich will nicht den durchschnittlichen wert berechnen, sondern den Spielzug möglichst realistisch ablaufen lassen.
dazu werden eine bestimmte anzahl an würfeln geworfen, wobei jeder einzeln das benötigte ergebnis erzielen muss. |
Re: Mehr Speed für Random?
Wenn du aber nur einmal werfen willst, wie kommst du dann auf die 1000?
|
Re: Mehr Speed für Random?
also, das ganze sieht so aus:
ich greife an, dabei werden trefferwürfe, verwundungswürfe, rettungswürfe etc gemacht, wobei jedesmal diese eine funktion "wurf" verwendet wird. (zB habe ich mit meinen einheiten insgesamt 20 attacken die auf die 4 ode mehr treffen. die funktion ermittelt dass 15 attacken getroffen haben. die 15 attacken verwunden nun auf die 3+ und die funktion ermittelt dann wieviele getroffene attacken verwunden konnten, usw usw) dann schlägt mein gegner zurück, auch mit den diversen würfen. danach nochmal ich, und dann der gegner, solange bis einer von uns beiden keine lebenspunkte mehr hat. wer gewonnen hat wird dann registriert. der gesamte vorgang wird jetzt wiederholt, und zwar solange wie man es selbst eingestellt hat, also zB 1000 mal. am ende steht dann da wer wie oft gewonnen hat und man kann sich ein bild machen wer gegen wen wie anfällig ist etc. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 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