# Java Delay für Shuffle funktion?



## StundmanMike (23. Dez 2007)

Hallo freunde...

Ich will das Spiel "Kniffel" Programmieren (auch bekannt unter "Pasch" oder "Knippel")
Jetzt habe ich einen Würfel-werfer Programmiert wo ich per knopfduck immer neue Würfel erzeuge per Random. 

Nun will ich aber das man das Würfeln "sehen" kann! Also so das die Random-Funktion mehrmals ausgeführt wird aber mit einem Delay um dazwischen immer die gerade gewürfelten Würfel für wenige Millisekunden anzuzeigen!
So das die Würfel so zu sagen Flackern ein paar mal.

Random Funktion:

```
public int zufallsZahlen(){
    generator = new Random();
    nr = Math.abs(generator.nextInt()) % 6;
    repaint();
    return nr;
```

mit der zurückgegebenen Zahl wird dann in einem String-Array auf den Index zugegriffen und der String ist dann der PAssende Dateiname der geladen wird.
(Funktioniert einwandfrei) 

So nun muss dort irgendwo eine for-schleife rein und ein delay.
Ich hab das mal mit dieser delay Methode versucht:

```
private void delay(long ms) {
	Date d = new Date();
	Date e;
	long cTime = d.getTime();
	long tTime;
	do {
		e = new Date();
		tTime = e.getTime();
	} while (tTime - cTime <= ms);
		return;
	}
```

dann sah die Random-Funktion so aus:

```
public int zufallsZahlen(){
    for(int i=0; i<=10; i++){
        generator = new Random();
        nr = Math.abs(generator.nextInt()) % 6;
        repaint();
        delay(20);
    }
    return nr;
```

Kann sein das die Millisekunden zu wenig sind aber bei 100 funktioniert auch nicht viel mehr.
Um so höher die zahl ist in der Delay methode ist um so länger dauert es einfach bis er mir die würfel ganz normal so anzeigt wie vorher, nur das es einfach etwas länger dauert, aber vom schuffle ist da nicht zu sehen?!?!?!

Ich hoffe ich habs gut genug erklärt! Wäre cool Hilfe zu finden hier
Danke schonmal im vorraus!

Bye der StundmanMike[/code]


----------



## Campino (23. Dez 2007)

Warum nimmst du für deinen delay nicht einfach Thread.sleep()? Erwartet als Argument die Schlafenszeit in ms...


----------



## Guest (23. Dez 2007)

werd ich wohl ma ausprobieren...
Das Problem is ich bin im 2ten Semester  wir hatten noch keine Threads hehe

bin grad dabei das mit Timer zu machen, aber das will auch noch nicht so richtig, aber man sieht schonmal was.

aber danke ich teste das gleich mal


----------



## Guest (23. Dez 2007)

OK habs jetzt versucht mit Thread.sleep() aber es passiert genau das selbe wie bei der delay() funktion... 
mit dem java.swing.timer funktioniert es aber ich weiss noch nicht so recht das gerät zu bedienen!


```
ActionListener wurf = new ActionListener(){
        public void actionPerformed(ActionEvent ae){
        	pause = 1000;
        	speed = 100;
        	timer = new Timer(speed, this);
        	timer.start();
    		würfeln();
    		timer.setInitialDelay(pause);
    		//delay(10);
        	timer.stop();
        }
	};
```

Wenn man timer.stop(); auskommentiert funktioniert es genau so wie ich es mir dachte nur leider unendlich lange!?


----------



## Prusik (31. Dez 2007)

Wirklich Threads in der Schule gelernt habe ich auch (noch) nicht - also erwarte keine Höchstleistungen, kann nur sagen, wie ich solche Wartprobleme jeweils gelöst habe:


```
ActionListener wurf = new ActionListener(){
        public void actionPerformed(ActionEvent ae){

          wuerfeln(); //bitte keine äöü!!!
          try{
             Thread.wait(500);
          }
          catch(Exception e){
              e.printStackTrace();
          }
        }
   };
```
Der Code ist nicht getestet.. hoffe er funktioniert... 



InitialDelay wird wohl (ohni dass ich jetzt die API frage), wahl ein Delay beim initialisieren des Timers - das macht nicht so sinn...


----------

