JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=d91778e01b550fca6b8eb3de4fb893adMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

random optimierung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Darkevel
Mini JLI'ler



Anmeldedatum: 11.11.2002
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 19:28    Titel: random optimierung Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 20:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Darkevel
Mini JLI'ler



Anmeldedatum: 11.11.2002
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 21.11.2002, 21:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Darkevel
Mini JLI'ler



Anmeldedatum: 11.11.2002
Beiträge: 10

Medaillen: Keine

BeitragVerfasst am: 26.11.2002, 11:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DaN00b
JLI'ler



Anmeldedatum: 10.08.2002
Beiträge: 159

Medaillen: Keine

BeitragVerfasst am: 26.11.2002, 17:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 27.11.2002, 08:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum