Zliczanie kliknięć myszką.

0

Witam. Poniżej jest program, który ustawia losowo okrąg i liczy czas po jakim został kliknięty.

  1. Chce jeszcze zrobić aby gdzieś w aplecie pokazywał mi jeszcze np ostatnie 3 pomiary. Albo coś w rodzaju tego, że wykonuję 10 ruchów, a po ich wykonaniu wyświela mi np 3 najszybsze. Niestety nie wiem w jaki sposób to zrobić.

  2. Chciałbym też wykombinować tak aby, po każdym kliknięciu okrąg zmieniał kolor, najlepiej w sposób losowy.

Niestety na zajęciach z JAVY jeszcze tego nie miałem, więc nie za bardzo wiem jak się za to zabrać.

Pozdrawiam

import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;

public class fajer extends Applet implements MouseListener
{

      int pozX, pozY;
      Random r = new Random( );          // 1
      float czas;
      Date czas1=new Date( ), czas2= new Date( );           // 2

      public void init( )
      {
            addMouseListener(this);
            losuj( ); }

      public void paint(Graphics g)
      {		
      		g.drawString("Twoim zadaniem jest szybkie trafienie w koleczko", 20, 20);
            g.drawString("Czas reakcji: " + czas + " s.", 20, 40);
            g.setColor(Color.blue);
            g.fillOval(pozX, pozY, 20, 20); }

      void losuj( )
      {
            pozY = r.nextInt(this.getHeight( )-20);
            pozX = r.nextInt(this.getWidth( )-20); }

      public void mouseClicked(MouseEvent e)
      {
            if(e.getX( )>pozX && e.getX( )<pozX+20 && e.getY( )>pozY && e.getY( )<pozY+20)
            {
                  losuj( );
                  czas2 = new Date( );
                  czas = (float)(czas2.getTime( ) - czas1.getTime( ))/1000;
                  czas1 = new Date( );
                  repaint( ); } }

      public void mouseEntered(MouseEvent e) { }
      public void mouseExited(MouseEvent e) { }
      public void mousePressed(MouseEvent e) { }
      public void mouseReleased(MouseEvent e) { } 

}
0

Na początek radziłbym ci zmiennic, sposób liczenia czasu. Zrezygnowałbym tu ze zmiennych typu Date.
W klasie System masz metode currentTimeMillis(), która zwraca ci wartość long z czasem w milisekunach, dokładnie to samo co getTime uzyte przez ciebie.

Co do pierwszego pytania to uzyj trzech zmiennych np.
t1 - zapisuje czas najszybszej reakcji
t2 - czas drugiej reakcji
t3 - czas trzeciej reakcji
i za pomoca warunkow przypisujesz zmienna czas do odpowiedniej zmiennej t,
tutaj drobna sugestia najpierw pobiez czas klikniecia, pozniej wykonaj przypisanie do zmiennej t, wywołaj metode losuj i repaint. Ty w tej chwili masz jako pierwsze losowanie co zwieksza czas miedzy kliknięciami.

Co do losowych kolorów kółeczek to zdefiniuj tablice Color, wypełnij ja rożnymi kolorami i losuj po prostu element z niej i wypełniaj nim okrąg.

Pozdrawiam BookaYashee

0
BookaYashee napisał(a)

Co do losowych kolorów kółeczek to zdefiniuj tablice Color, wypełnij ja rożnymi kolorami i losuj po prostu element z niej i wypełniaj nim okrąg.

Pozdrawiam BookaYashee

Ja losowanie kolorów rozwiązałem w inny troszkę sposób niż zaproponowałeś:

        int R = (int)(Math.random()*255);
		int G = (int)(Math.random()*255);
		int B = (int)(Math.random()*255);
		Color nowy = new Color(R,G,B);
		g.setColor(nowy);
		g.fillOval(pozX, pozY, 20, 20); }

Muszę się tylko jakoś zabezpieczyć przed wylosowaniem białego koloru. Z tym, że nie bardzo wiem jak. Może jakim if'em, ale nie na 100%

Jeśli natomiast chodzi o jakieś wyświetlenie najlepszego czasu, to niestety nie jestem na tyle zaawansowany w Javie, gdyż dopiero zaczynam, nie nie za bardzo potrafię wprowadzić w życie tego co mi napisałeś.

0

Na początek to czego wczesniej nie zauważyłem, zamiast metody paint(Graphics g) korzystaj z metody paintComponent(Graphics g). Urzywanie metody paint jest niebezpieczne.

Mierzenie czasów można zrealizować tak:
za zmiennymi int pozX, pozY, utworz zmienne long t1=0, t2=0, t3=0;.
Wywal zmienne typu Date.
zamien zmienna czas z typu float na typ long,
na końcu metody paintComponent umieść instukcje: czas = System.currentTimeMillis();
wnętrze ifka w metodzie mouseCicked zastap instrukcjami

long wynik = czas - System.currentTimeMillis();
//tutaj jakaś metoda przypisujaca wynik odpowienniej zmiennej t
repaint();

Pamietaj, że zmienna wynik jest czasem mierzonym w milisekundach !

Metode przypisująca zmienna wynik odpowiedniej zmiennej t zostawiam juz tobie, bo to zwykłe warunki z ktorymi powinnies sobie poradzić. Z kolorami tez zostawię ci wykonanie bo jesteś na dobrej drodze.

Pozdrawiam BookaYashee

1 użytkowników online, w tym zalogowanych: 0, gości: 1