Prymitywne wykrywanie kolizji + zegar i zapis do pliku w javie

0

Witam, robię moją 1 grę w javie i mam problem z 2 rzeczami:

  1. Mam obrazek który po włączeniu programu opada do pewnej wartości na osi Y i chciałbym aby po osiągnięciu tej wartości pokazywał się jakiś inny obrazek ( np. Game Over). Takie prymitywne wykrywanie kolizji. Zrobiłem cos takiego:
   public void run()
        {

            if(klawisze[0])
                wsp[1]-=2;             
           
            
           wsp[1]++;                    
           wsp[1] = (wsp[1]<0)?0:wsp[1];
           wsp[1] = (wsp[1]>300)?300:wsp[1];
           
           
            repaint();
            
            if(wsp[1]>300)
               System.out.println("GAME OVER");
        }
  }}

Ostatni if niestety nie odnosi skutku i nie mogę dojść dlaczego. Dla testu zamiast wyświetlania obrazka zrobiłem po prostu println.

  1. Chciałbym zrobić zegar który będzie wyświetlał czas działania programu i wrzucić go na stałe na ekran np. w lewy dolny róg oraz dodać do tego zapis czasu działania programu wraz z datą uruchomienia do pliku txt.
    Tutaj patrzyłem na klasę Timer ale nie za bardzo wiem jak jej poprawnie użyć do powyższego celu.

Z góry dziękuję za pomoc :)

0

To samo, jedynie po ludzku i będzie działać:

public void run()
  {
   wsp[1]=klawisze[0]?Math.max(0,wsp[1]-1):Math.min(300,wsp[1]+1);
   repaint();
   if(wsp[1]>=300) System.out.println("GAME OVER");
  }
0

Wyświetlanie czasu:

        javax.swing.Timer timer = new javax.swing.Timer(0,new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                GregorianCalendar date = new GregorianCalendar();
                clock.setText(""+date.getTime()); //tu można sformatować wyświetlany czas
                repaint();
            }            
        });
        timer.setDelay(1000);
        timer.start();

Ten timer startuje od razu i aktualizuje czas co 1000 ms (jedną sekundę).

0

Dzięki, a podpowiesz coś jak zrobić ten zegar i zapis do pliku?

0

Dzięki za timer, jednak po zrobieniu potrzebnych importów pokazuje mi błąd w linijce

clock.setText(""+date.getTime()); //tu można sformatować wyświetlany czas

Konkretnie podkreśla clock na czerwono i pokazuje "cannot find symbol". Muszę gdzieś wcześniej zadeklarować clock jako zmienną czy o co chodzi?

0

W którym momencie pracy programu chcesz zapisywać do pliku?

    long start = System.currentTimeMillis(); //pole w klasie
    JLabel clock = new JLabel(); //pole w klasie        
        javax.swing.Timer timer = new javax.swing.Timer(0,new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                long elapsedTime = System.currentTimeMillis() - start;
                long elapsedTimeInSeconds = elapsedTime/1000;
                clock.setText(""+elapsedTimeInSeconds);
                repaint();
            }            
        });
        timer.setDelay(1000);
        timer.start();
0

Zapis do pliku planowałem na samym końcu, tzn. z chwilą zamknięcia programu.

0

Jeśli masz w programie

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

to zamień na

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
//i dopisz kod
frame.addWindowListener(new WindowAdapter()
{
      public void windowClosing(WindowEvent e)
      {
            writeToFile();
            System.exit(0);
     }
});

W metodzie writeToFile() umieść kod zapisujący do pliku, godzinę rozpoczęcia programu zapamiętaj np. w konstruktorze

GregorianCalendar start = new GregorianCalendar();

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