
// WormChase.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Červík se pohybuje přes obrazovku a uživatel musí
   klepnout (stisknout) na jeho hlavu.

   Pokud ji uživatel mine, přidá se na obrazovku modrá
   kostička (pokud neklepnul na tělo červíka).

   Červík se přes tuto kostičku nemůže pohybovat, takže 
   přidaná překážka může usnadnit lov.

   Červík začíná na nulové délce a roste až do své
   maximální délky, která mu zůstane.

   Na konci se na obrazovce zobrazí dosažený počet bodů,
   vypočítáný z počtu kostiček a uplynulého času. Méně kostiček
   a kratší čas znamená vyšší skóre.

   -------------
   
   Okno přes celou obrazovku bez titulní lišty či dekorací (okrajů).
   Vypínají se v metodě setUndecorated().

   Žádná dekorace znamená, že se kreslí pouze panel JPanel s aktivním
   vykreslováním ve třídě WormPanel a tak můžeme ignorovat události
   repaint() voláním metody setIgnoreRepaint().

   Pozastavení/Opětovné spuštění/Ukončení je řízeno přes tlačítka na 
   obrazovce. Také sledujeme událost ukončení programu.

   Používáme časovač knihovny Java 3D: J3DTimer.getValue()
     *  nanosekundy místo milisekund

   Průměrné hodnoty FPS / UPS
		     20		50	    80		100
   Win 98 (práce): 20/20       48/50       70/83       70/100
   Win 2000:       18/20       19/50       18/83       18/100
   Win XP (1):     20/20       50/50       77/83       73/100
   Win XP (2):     20/20       50/50       68/83       69/100


   Umístěn v adresáři /WormUFS
*/

import javax.swing.*;
import java.awt.*;


public class WormChase extends JFrame
{
  private static int DEFAULT_FPS = 80;


  public WormChase(long period)
  { super("The Worm Chase");

    Container c = getContentPane(); 
    c.setLayout( new BorderLayout() );   

    WormPanel wp = new WormPanel(this, period);
    c.add(wp, "Center");

    setUndecorated(true);   // žádné okraje ani titlní lišta
    setIgnoreRepaint(true);  // vypni všechny kreslící události, protože máme aktivní vykreslování
    pack();
    setResizable(false);
    setVisible(true);
  }  // konec konstruktoru: WormChase()

  

  // -----------------------------------------

  public static void main(String args[])
  {  
    int fps = DEFAULT_FPS;
    if (args.length != 0)
      fps = Integer.parseInt(args[0]);

    long period = (long) 1000.0/fps;
    System.out.println("fps: " + fps + "; period: " + period + " ms");

    new WormChase(period*1000000L);    // ms --> nanosekundy 
  }  

} // konec třídy: WormChase


