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

📄 maingamethread.java

📁 联机坦克游戏
💻 JAVA
字号:
package tankgame;

/*
 * Created on 2005-1-8
 *
 */
import java.util.Vector;
import java.util.Properties;
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.io.*;
import javax.swing.*;

import ui.GameFrame;
import ui.GameFrame_keyAdapter;
import resource.ResourceFactory;
import components.*;

/**
 * @author Emtry Immortal
 */
public class MainGameThread {
	GameFrame winFrame;

	JPanel m_grCv = null;

	Vector vContainer = new Vector();

	Tank gmTank = null;

	ICamera camera = null;

	protected Controller controller = new Controller();

	protected Properties prpUser = new Properties();

	private boolean isPlaying = true;

	//frame pack
	boolean packFrame = true;

	ResourceFactory resource;

	BufferStrategy bufferStrategy = null;

	GraphicsDevice graphicsDevice = null;

	DisplayMode originalDisplayMode = null;
	
	boolean isFullScreen=true;

	/**
	 *  
	 */
	public MainGameThread() {
		super();
	}

	public void initGame() {
		resource = ResourceFactory.getInstance();

		if (camera != null) {
			return;
		}
		//clear container
		vContainer.removeAllElements();

		//read user properties
		try {
			prpUser.load(new FileInputStream("configure" + File.separator
					+ "User.properties"));
		} catch (IOException e) {
			e.printStackTrace();
			prpUser.setProperty("UserName", "Player");
		}

		loadMap("Battle.map");

		initScreen();
		
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		long imsec, imsec2;
		try {
			while (isPlaying) {
				//imsec=System.currentTimeMillis();

				controller.doKeyInput();
				update();

				//camera.view((Graphics2D)m_grCv.getGraphics());
				Graphics2D g2D = (Graphics2D) bufferStrategy.getDrawGraphics();
				camera.view(g2D);
				bufferStrategy.show();
				//g2D.dispose();

				/*
				 * imsec2=System.currentTimeMillis()-imsec+1;
				 * ((TrackCamera)camera).fps=1000/imsec2; imsec=1000/60-imsec2;
				 * if(imsec <0){ continue; }
				 */

				Thread.sleep(16);
			}
		} catch (InterruptedException e) {
		} finally {
			if(isFullScreen){
				graphicsDevice.setDisplayMode(originalDisplayMode);
				graphicsDevice.setFullScreenWindow(null);
			}
		}
	}

	private void update() {
		for (int i = 0; i < vContainer.size(); i++) {
			((GmComponent) vContainer.get(i)).updateOject();
		}
	}

	/**
	 * @return Returns the camera.
	 */
	public ICamera getCamera() {
		return camera;
	}

	private void loadMap(String map) {
		BattleMapLoader.readMap(map, this.vContainer);
	}

	public void windowsMode() {
		winFrame = new GameFrame("Tank_Game", controller, this);
		Canvas renderCanvas;
		
		winFrame.setResizable(false);
		if (packFrame) {
			winFrame.pack();
		} else {
			winFrame.validate();
		} 
		renderCanvas = new Canvas() {
	    	public Dimension getPreferredSize() {
	    		return new Dimension(800, 600);
	    	}
	    };
	    
	    renderCanvas.setIgnoreRepaint(true);
	    
		winFrame.getContentPane().add(renderCanvas,BorderLayout.CENTER);
		winFrame.setSize(new Dimension(800, 600));
		winFrame.setVisible(true);
        renderCanvas.createBufferStrategy(2);
		bufferStrategy = renderCanvas.getBufferStrategy();
		camera = new TrackRender(800,600, gmTank, this.vContainer);
		controller.setCamera(camera);
		
		//add adapter
		renderCanvas.addMouseMotionListener
				(new ui.GameFrame_mouseMotionAdapter(controller));
		renderCanvas.addMouseListener
				(new ui.GameFrame_mouseAdapter(controller));
		GameFrame_keyAdapter lsk=new GameFrame_keyAdapter(controller);
		renderCanvas.addKeyListener(lsk);
		winFrame.addKeyListener(lsk);
		
		//Center the window 
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = winFrame.getSize();
		if (frameSize.height > screenSize.height) {
			frameSize.height = screenSize.height;
		}
		if (frameSize.width > screenSize.width) {
			frameSize.width = screenSize.width;
		}
		winFrame.setLocation((screenSize.width - frameSize.width) / 2,
				(screenSize.height - frameSize.height) / 2);
	}

	public void quitGame() {

	}

	/**
	 * @param isPlaying
	 *            The isPlaying to set.
	 */
	public void setPlaying(boolean isPlaying) {
		this.isPlaying = isPlaying;
	}

	private void initScreen() {
		int mode=Integer.parseInt(prpUser.getProperty("DisplayMode"));
		//full screen
		isFullScreen=prpUser.getProperty("FullScreen").equals("1");
		if (isFullScreen) {
			fullScreenMode(mode);
		} else {
			windowsMode();
		}

	}

	private void fullScreenMode(int mode) {
		GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment
				.getLocalGraphicsEnvironment();
		graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
		DisplayMode displayModes[] = graphicsDevice.getDisplayModes();
		originalDisplayMode = graphicsDevice.getDisplayMode();
		
		winFrame = new GameFrame("Tank_Game", controller, this);
		winFrame.setUndecorated(true);
		winFrame.setIgnoreRepaint(true);
		try {
			if (graphicsDevice.isFullScreenSupported()) {
				graphicsDevice.setFullScreenWindow(winFrame);
			}
			//800 x 600 32 85Hz
			DisplayMode displayMode = displayModes[mode];
			camera = new TrackRender(displayMode.getWidth(), displayMode
					.getHeight(), gmTank, this.vContainer);
			controller.setCamera(camera);

			if (graphicsDevice.isDisplayChangeSupported()) {
				graphicsDevice.setDisplayMode(displayMode);
			}
			winFrame.createBufferStrategy(2);
			bufferStrategy = winFrame.getBufferStrategy();
			
			//add adapter
			winFrame.addMouseMotionListener
				(new ui.GameFrame_mouseMotionAdapter(controller));
			winFrame.addMouseListener
				(new ui.GameFrame_mouseAdapter(controller));
			winFrame.addKeyListener
				(new GameFrame_keyAdapter(controller));
		} catch (Exception e) {
			//e.printStackTrace();
			graphicsDevice.setDisplayMode(originalDisplayMode);
			graphicsDevice.setFullScreenWindow(null);
			quitGame();
			System.exit(0);
		}
	}
}

⌨️ 快捷键说明

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