Single Tech Games

1. An Almost Full-Screen (AFS) Worm

Una aplciacion casi full screen es una aplicacion que esta maximizada en pantalla, el cambio en el codigo es muy pequeño, asi tenemos:
1.1. The WormChase Class
Ahora le constructor debera calcular, no solo la nueva dimension, sino tambien la barra de tareas de windows y otros componentes swing en la ventana (los 2 textfields)
Modificaremos el constructor:

private int pWidth, pHeight;   // dimensiones de el panel
public WormChase(long period)
  { super("The Worm Chase");
    makeGUI();
    pack();   // primero (El GUI o incluye ek JPanel todavia)
    setResizable(false);   // el tamaño podria variar si ponemos true
    calcSizes();
    setResizable(true);
    Container c = getContentPane();
    wp = new WormPanel(this, period, pWidth, pHeight);
    c.add(wp, "Center");
    pack();  // segundo, despues de agregar a JPanel
    addWindowListener( this );
    addComponentListener( new ComponentAdapter() {
      public void componentMoved(ComponentEvent e)
      /* Llamado por el ComponentListener cuando el jFrame es movido
       * . Lo pone todo en su sitio de nuevo*/
      {  setLocation(0,0);  }
    });
    setResizable(false);
    setVisible(true);
  }  // fin de WormChase()

makegui() hace la GUI sin dibujarala:

  private void makeGUI()
  // crea la GUI, Menos el area de dibujo (Jpanel)
  {
    Container c = getContentPane();    // BorderLayout usado por default
    JPanel ctrls = new JPanel();   // una fila de textfields
    ctrls.setLayout( new BoxLayout(ctrls, BoxLayout.X_AXIS));
    jtfBox = new JTextField("Boxes used: 0");
    jtfBox.setEditable(false);
    ctrls.add(jtfBox);
    jtfTime = new JTextField("Time Spent: 0 secs");
    jtfTime.setEditable(false);
    ctrls.add(jtfTime);
    c.add(ctrls, "South");
  }  // fin de makeGUI()

calcSizes() inicializa 2 variables locales pWidth y pHeight, que luego pasan a WormPanel

  private void calcSizes()
  /* Calcula el tamaño del panel de dibujo para llenar la pantalla,
   * deja espacio para los otros componentes de Jframe y la barra
   * de tareas del sistema operativo*/
  {
    GraphicsConfiguration gc = getGraphicsConfiguration();
	Rectangle screenRect = gc.getBounds();
    // System.out.println("Screen size: " + screenRect);
    Toolkit tk = Toolkit.getDefaultToolkit();
    Insets desktopInsets = tk.getScreenInsets(gc);
    // System.out.println("OS Insets: " + desktopInsets);
    Insets frameInsets = getInsets();     // funciona despues de llamar a pack()
    // System.out.println("JFrame Insets: " + frameInsets);
    Dimension tfDim = jtfBox.getPreferredSize();   // tamaño del textfield
    // System.out.println("Box TF Size: " + tfDim );
    // System.out.println("Time TF Size: " + jtfTime.getPreferredSize() );
    pWidth = screenRect.width - (desktopInsets.left + desktopInsets.right)
                              - (frameInsets.left + frameInsets.right);
    pHeight = screenRect.height - (desktopInsets.top + desktopInsets.bottom)
                                - (frameInsets.top + frameInsets.bottom)
                                - tfDim.height;
    // System.out.println("pWidth: " + pWidth + "; pHeight: " + pHeight);
  }  // fin de calcSizes()



1.2. Stopping Window Movement
El codigo para mover la ventana al centro siemrpe que se quiera mover es

    addComponentListener( new ComponentAdapter() {
      public void componentMoved(ComponentEvent e)
      /* Llamado por el ComponentListener cuando el jFrame es movido
       * . Lo pone todo en su sitio de nuevo*/
      {  setLocation(0,0);  }
    });



1.3. Timings for AFS
Calculos estadisticos para AFS, no los tomare en cuenta
1.4. Cambios en WormPanel

  private long period;                // periodo entre dibujos, en ms
  private int pWidth, pHeight;   // dimensiones de el panel
  -
  -
   public WormPanel(WormChase wc, long period, int w, int h)
  {
    wcTop = wc;
    this.period = period;
    pWidth = w; pHeight = h;
    setBackground(Color.white);
    setPreferredSize( new Dimension(pWidth, pHeight));
    setFocusable(true);
    requestFocus();    // El JPanel ahora es enfocado
	readyForTermination();
    // crea componentes del juego
    obs = new Obstacles(wcTop);
    fred = new Worm(pWidth, pHeight, obs);
    gameOver = false;
    addMouseListener( new MouseAdapter() {
      public void mousePressed(MouseEvent e)
      { testPress(e.getX(), e.getY()); }
    });
    // fuente del mensaje
    font = new Font("SansSerif", Font.BOLD, 24);
    metrics = this.getFontMetrics(font);
    fpsStore = new double[NUM_FPS];
    upsStore = new double[NUM_FPS];
    for (int i=0; i < NUM_FPS; i++) {
      fpsStore[i] = 0.0;
      upsStore[i] = 0.0;
    }
  }  // fin de WormPanel()
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments