|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Darkevel Mini JLI'ler
Anmeldedatum: 11.11.2002 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 19.11.2002, 18:28 Titel: random optimierung |
|
|
Hallo,
ich such eine Möglichkeit rand() zu optimieren. Für mein spiel soll ein Sprite an einen punkt geblittet werden wo bisher kein sprite vorhanden ist.
Die x und y koordinaten von jedem sprite welches schon vorhanden ist, ist in einem Array gespeichert.
Wenn ich nun aber sehr viele Sprites habe, brauch mein Rechner recht lange um noch eine x und y koordinate zu bekommen, die nicht in diesem Array vorhanden ist.
Gibt es eine Methode womit man rand() bereiche eingeben kann welche von dem Suchprozess ausgeschlossen sind? Und kann rand() auch bereiche geben die sich aus x*y ergeben? |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 19.11.2002, 19:48 Titel: |
|
|
Zuerst beantworte ich den 2. Teil der Frage: Eine 2-Dimensionale Matrix kann man auch eindimensional speichern. Die einzelnen X/Y-Paare lassen sich recht einfach berechnen, auch der Index aus einem X/Y-Wert ist einfach zu berechnen:
Code: |
Index=Y*(MaxX+1)+X; // X/Y muß bei 0 beginnen
X=Index%(MaxX+1); // Modulorechnung
Y=Index/(MaxX+1); // Ganzzahldivision
|
Das erste Problem läßt sich auch ganz einfach lösen:
Nimm einfach eine Zufallszahl zwischen 0 und dem Wert noch offener Stellen und zähle dann einfach die passende Stelle aus dem Array aus. Wenn ein Feld schon belegt ist, nicht incrementieren. Das geht für jede mögliche Belegung des Feldes fast gleich schnell und ist mit Sicherheit schneller, als zu probieren, ob eine bestimmte Kombination noch frei ist.
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Darkevel Mini JLI'ler
Anmeldedatum: 11.11.2002 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 21.11.2002, 20:13 Titel: |
|
|
danke AFE-GmdG
Auf die Lösung der Berechnung von den x/y Koordinaten aus der eindimensionalen Matrix wäre ich nie gekommen. |
|
Nach oben |
|
|
Darkevel Mini JLI'ler
Anmeldedatum: 11.11.2002 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 26.11.2002, 10:31 Titel: |
|
|
Hallo,
ich hab alles nun so weit geschrieben. Jedoch ist jezt RAND_MAX zu klein da am anfang der Wert noch offener Stellen jeder Pixel des Bildschirms ist, also 1024*768=786 432. Rand_MAX geht aber nur bis 32.000 und ist somit viel zu klein. Hat jemand eine lib mit einem Zufallsgenerator bereit der grössere Zahlen berechnet? |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 26.11.2002, 16:35 Titel: |
|
|
wieso machst es net einfach so:
du rechnest dir ne konstante aus damit rand()*(rand()%konstante) als maximalwert deine 768*1024 ergeben kann _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 27.11.2002, 07:00 Titel: |
|
|
Gab es nicht mal eine Zufallsfunktion, mit der man einen Wert zwischen 0 und 1 ermitteln konnte? Wenn ja, Benutze doch diese Funktion und Multipliziere dann mit deinem Maximalwert - und schon hast du dein eigenes RAND_MAX...
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|