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

📄 gamescreen.java

📁 本代码为java编写的泡泡龙游戏
💻 JAVA
字号:

import java.applet.*;
import java.awt.*;
import java.util.Vector;

public abstract class GameScreen
{   
	//保存Applet对象
	private GameApplet currentApplet;
	//保存屏幕的位置
	private Rectangle screenSize;
	
	//是一个内存缓存图片,保存当前屏幕的背景
	private Image gameScreenImage;
	private Graphics gameScreenGraphics;
	
	//保存当前精灵对象的集合
	private Vector sprites;
	//保存删除精灵对象的集合
	private Vector removedSprites;
	
	//默认的构造函数
	private GameScreen() {}
	
	//构造函数
	public GameScreen(GameApplet applet)
	{
		currentApplet = applet;
		
		gameScreenImage = applet.createImage(applet.getWidth(), applet.getHeight());
		gameScreenGraphics = gameScreenImage.getGraphics();
		screenSize = new Rectangle(0, 0, applet.getWidth(), applet.getHeight());
		
		sprites = new Vector();
		removedSprites = new Vector();
	}
	
	//初始化背景
	public void initBackground()
	{
		gameScreenGraphics.setColor(Color.white);
		gameScreenGraphics.fillRect(0, 0, gameScreenImage.getWidth(currentApplet), gameScreenImage.getHeight(currentApplet));
	}
	
	//得到Applet对象
	public final GameApplet getGameApplet()
	{
		return currentApplet;
	}
	
	//将图片增加到背景中,注意:主Applet有一个内存缓存图片对象,每个屏幕也有一个内存缓存图片对象
	public final void addToBackground(Image img, Point p)
	{
		gameScreenGraphics.drawImage(img, p.x, p.y, currentApplet);
		currentApplet.getBackgroundGraphics().drawImage(img, p.x, p.y, currentApplet);
	}
	//将图片增加到背景中,同时指定能影响的区域
	public final void addToBackground(Image img, Point p, Rectangle clipArea)
	{
		gameScreenGraphics.setClip(clipArea);
		gameScreenGraphics.drawImage(img, p.x, p.y, currentApplet);
		gameScreenGraphics.setClip(screenSize);
		
		currentApplet.getBackgroundGraphics().setClip(clipArea);
		currentApplet.getBackgroundGraphics().drawImage(img, p.x, p.y, currentApplet);
		currentApplet.getBackgroundGraphics().setClip(screenSize);
	}
	
	//增加一个精灵对象
	public final void addSprite(Sprite sprite)
	{
		sprites.removeElement(sprite);
		sprites.addElement(sprite);
	}
	
	//删除一个精灵对象
	public final void removeSprite(Sprite sprite)
	{
		if (sprites.removeElement(sprite))
		{
			sprite.forceRefresh();
			removedSprites.addElement(sprite);
		}
	}
	
	//将精灵放置到最前面
	public final void spriteToBack(Sprite sprite)
	{
		sprites.removeElement(sprite);
		sprites.insertElementAt(sprite,0);
	}
	//将精灵放置到最后面
	public final void spriteToFront(Sprite sprite)
	{
		sprites.removeElement(sprite);
		sprites.addElement(sprite);
	}
	
	//刷新本屏幕中的所有精灵,被删除的精灵只有最后一次刷新后,才真正的删除
	//所谓刷新,是从Applet的背景图片中清除已画的精灵
	//即在重新显示前,要从内存缓存图片中清除原来显示的精灵
	public final void refreshAll()
	{
		Graphics output = currentApplet.getBackgroundGraphics();
				
		for (int i=0 ; i<sprites.size() ; i++)
		{
			output.setClip(screenSize);
			
			((Sprite)sprites.elementAt(i)).refresh(gameScreenImage, output, currentApplet);
		}
		
		if (removedSprites.size() != 0)
		{
			for (int i=0 ; i<removedSprites.size() ; i++)
			{
				output.setClip(screenSize);
				
				((Sprite)removedSprites.elementAt(i)).refresh(gameScreenImage, output, currentApplet);
			}
		
			removedSprites = new Vector();
		}
		
		output.setClip(screenSize);
	}
	
	//重新将所有的精灵画到内存缓存图片中
	public final void paintAll()
	{
		Graphics output = currentApplet.getBackgroundGraphics();
		
		for (int i=0 ; i<sprites.size() ; i++)
		{
			output.setClip(screenSize);
			((Sprite)sprites.elementAt(i)).paint(output, currentApplet);
		}
		
		output.setClip(screenSize);
	}
	
	public abstract void play(int[] keyCodes, Point mouseCoord, boolean leftButton, boolean rightButton);
}

⌨️ 快捷键说明

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