⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamebaseui.java

📁 游戏基础
💻 JAVA
字号:
package net.java.gamebase.core;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author HAL v3 HAL - to allow the setBackgroundImage() the paintComponent
 *         method was implemented
 */
public class GameBaseUI
    extends JPanel
    implements KeyListener, Runnable {

  private static final long serialVersionUID = 1L;

  int celula = 30;

  private long step = 500;

  private JFrame frame;

  private boolean running = true;

  private Image backgroundImage;

  private ArrayList timers;

  public GameBaseUI(int width, int height) {

    setBackground(Color.white);
    setPreferredSize(new Dimension(width, height));
    setSize(width, height);
    setLayout(null);
    Thread thread = new Thread(this);
    thread.start();
    timers = new ArrayList();

    frame = new JFrame();
    frame.getContentPane().add(this);
    frame.addKeyListener(this);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(new GameAgentEscExit());
  }

  public void show() {
    frame.setVisible(true);
  }

  // v3 to allow the setBackgroundImage() HAL
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    if (getBackgroundImage() != null) {
      if (getBackgroundImage().getWidth(this) > 0) {
        g.drawImage(getBackgroundImage(), 0, 0, getWidth(),
                    getHeight(), this);
      }
    }
  }

  public void keyPressed(KeyEvent e) {

    Component[] childs = getComponents();
    for (int i = 0; i < childs.length; i++) {
      if (childs[i] instanceof GameCharMovable) {
        GameCharMovable one = (GameCharMovable) childs[i];
        one.keyPressed(e.getKeyCode());
      }

      if (childs[i] instanceof GameAgent) {
        GameAgent one = (GameAgent) childs[i];
        one.keyPressed(e.getKeyCode());
      }
    }
  }

  public void keyReleased(KeyEvent e) {
  }

  public void keyTyped(KeyEvent e) {
  }

  public void run() {

    while (Thread.currentThread() != null && running) {
      try {
        Thread.sleep(step);
      }
      catch (InterruptedException i) {
      }

      Component[] childs = getComponents();
      for (int i = 0; i < childs.length; i++) {
        if (childs[i] instanceof GameChar) {
          GameChar one = (GameChar) childs[i];
          one.tick();
        }
      }

      Iterator iterator = timers.iterator();
      while (iterator.hasNext()) {
        GameTimer element = (GameTimer) iterator.next();
        element.tick();
      }
    }

    System.exit(0);

  }

  public void exit() {
    running = false;
  }

  /**
   * evita verificacoes de overlapping de componentes
   *
   * @see javax.swing.JComponent#isOptimizedDrawingEnabled()
   */
  public boolean isOptimizedDrawingEnabled() {
    return true;
  }

  public long getStep() {
    return step;
  }

  public void setStep(long step) {
    this.step = step;
  }

  public Image getBackgroundImage() {
    return backgroundImage;
  }

  public void setBackgroundImage(Image backgroundImage) {
    this.backgroundImage = backgroundImage;
  }

  public void setBackgroundImage(String name) {
    this.backgroundImage = Toolkit.getDefaultToolkit().getImage(name);
  }

  public void addTimer(GameTimer timer) {
    timers.add(timer);
  }

  public void removeTimer(GameTimer timer) {
    timers.remove(timer);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -