📄 view.java
字号:
package jegg;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import mqqqvpppm.activeObject.AbstractActiveObject;
import mqqqvpppm.util.ImagesTools;
/**
* @author mqqqvpppm
*
* TODO to dispaly game for user,
* observe model to dispaly base on model's state
*
* Create on Sep 13,2005
*/
public class View extends JPanel implements Observer {
/**
*
*/
private static final long serialVersionUID = 1L;
public View(Model model, Control control) {
this.model = model;
this.control = control;
initMainFrame();
initG2();
paintY = 0;
//paint game start picture
paintStartPicture();
}
//paint game start picture
private void paintStartPicture(){
background = ImagesTools.createImage(JEgg.class
.getResource("images/background.jpg"));
g2.drawImage(background, 0, 0, getWidth(), getHeight(), null);
g2.setColor(Color.BLACK);
g2.drawString("Mouse clicking or press enter key to start game",10,170);
g2.drawString("After start game, Mouse clicking or press space",10,200);
g2.drawString("key to throw egg!",10,230);
g2.drawString("Author: mqqqvpppm",90,360);
g2.drawString("E-mail: mqqqvpppm@yahoo.com.cn",90,380);
repaint();
}
// initialize G2 to draw all game object to G2
private void initG2() {
// all game object will be paint on imageBuffer first,
// then, imageBuffer will be paint on contentpanel to let user see it.
imageBuffer = new BufferedImage(getWidth(), getHeight() * 2,
BufferedImage.TYPE_INT_RGB);
g2 = (Graphics2D) imageBuffer.getGraphics();
// gameImagePanel.setImageBuffer(imageBuffer);
}
// repaint the new game picture
public void update(Observable o, Object arg) {
paintImageBuffer((ArrayList) arg);
repaint();
}
public void refreshPage() {
BufferedImage tempBuf = imageBuffer.getSubimage(0, 100, getWidth(),
getHeight());
g2.drawImage(tempBuf, 0, model.getDeminsion().height, null);
paintImageBuffer(model.getActiveObjects());
for (paintY = -model.getDeminsion().height + 100; paintY <= 0; paintY = paintY + 10) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
paintY = 0;
repaint();
}
private void paintImageBuffer(ArrayList actObjects) {
g2.drawImage(background, 0, 0, null);
AbstractActiveObject actObject;
for (int i = 0; i != actObjects.size(); i++) {
actObject = (AbstractActiveObject) actObjects.get(i);
actObject.paint(g2);
}
}
// initialize main frame
private void initMainFrame() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
mainFrame = new JFrame();
mainFrame.setSize(model.getDeminsion().width + 4,
model.getDeminsion().height + 30);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
mainFrame.setLocation((screenSize.width - mainFrame.getWidth()) / 2,
(screenSize.height - mainFrame.getHeight()) / 2);
mainFrame
.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
mainFrame.setResizable(false);
mainFrame.setTitle("JEgg");
mainFrame.addKeyListener(control);
mainFrame.addMouseListener(control);
// gameImagePanel = new GameImagePanel();
mainFrame.setContentPane(this);
// mainFrame.setIconImage(ImagesTools.createImageIcon());
mainFrame.setVisible(true);
}
// paint all game object
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (imageBuffer != null)
g.drawImage(imageBuffer, 0, paintY, null);
//paint time
long time;
long modelTime = model.getStartTime();
if(modelTime == 0) time = 0;
else time = System.currentTimeMillis() - modelTime;
time -= 3600*8000;
g.drawString("Level: " + model.getLevel()
+ " Time: " + new Time(time).toString(),110,20);
}
private int paintY;
private Model model;
private Control control;
private Graphics2D g2;
private JFrame mainFrame;
// this is background image of game
private Image background;
private BufferedImage imageBuffer;
// this is a content panel of main Frame
// private GameImagePanel gameImagePanel;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -