AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehr Speed für Random?

Ein Thema von Schlabbermampf · begonnen am 22. Jul 2007 · letzter Beitrag vom 25. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Schlabbermampf

Registriert seit: 22. Jul 2007
7 Beiträge
 
#1

Mehr Speed für Random?

  Alt 22. Jul 2007, 18:38
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:
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;
Die Prozedur wurd immer benutzt wenn gewürfelt wird, und das is ziemlich oft der Fall...
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Mehr Speed für Random?

  Alt 22. Jul 2007, 18:51
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Mehr Speed für Random?

  Alt 22. Jul 2007, 18:53
Habe nur etwas grundlegendes:

randomize sollte nur einmal aufgerufen werden, vielleicht beim Start des Programms
und nicht bei jedem Würfeln.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Mehr Speed für Random?

  Alt 22. Jul 2007, 22:03
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Schlabbermampf

Registriert seit: 22. Jul 2007
7 Beiträge
 
#5

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 00:28
Zitat von Nikolas:
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.
könntest du mal den Quellcode dafür aufschreiben? ich wüsste grade nich wie ich das umsetzen soll...

Zitat von Nikolas:
Wie viele von diesen Würfen musst du denn simulieren?
man kann eingeben wie oft der kampf direkt hintereinander wiederholt werden soll damit man ein schönes durchschnittliches ergebnis hat, dachte so an 1000 etwa. also ich denke mal die funktion wird schon im vier- oder fünfstelligen bereich oft ausgeführt

Zitat von Klaus01:
randomize sollte nur einmal aufgerufen werden, vielleicht beim Start des Programms
und nicht bei jedem Würfeln.
Ich hab das randomize jetzt vor das repeat gesetzt. läuft alles superschnell jetzt, allerdings kommts mir etwas spanisch vor, dass beim Endergebnis, wo angezeigt wird, wer wie oft gewonnen hat und wie oft ein unentschieden erreicht wurde, so nie ein unentschieden auftritt, wenn das das randomize jedoch direkt vor dem random befehl steht kommt es schon ab und zu vor. woran kann sowas liegen?


Edit: Hab jetzt das komplette Projekt gezippt beigefügt.

mfg Fabian
Angehängte Dateien
Dateityp: rar wh_432.rar (168,2 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 01:53
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 17:11
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?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Schlabbermampf

Registriert seit: 22. Jul 2007
7 Beiträge
 
#8

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 17:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 17:27
Wenn du aber nur einmal werfen willst, wie kommst du dann auf die 1000?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Schlabbermampf

Registriert seit: 22. Jul 2007
7 Beiträge
 
#10

Re: Mehr Speed für Random?

  Alt 23. Jul 2007, 17:40
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz