小球弹砖块游戏(JAVA)

运用javaGUI界面制作一个小球弹砖块的小游戏,本次游戏只有一个关卡,只是做一个简单的效果不是全部出来的

完整的下载链接:http://download.csdn.net/detail/zhuangjixiang/4874730

定义一个小球的类,挡板的类和砖块的类,这三个类可以抽取出来定义父类,然后继承,这样代码就可以减少很多了

思路是:先制作出小球碰到边框弹开,剥离到一个面板上,接着在面板上添加一个砖块,当小球碰到砖块的时候可以弹开并且砖块消失掉(是小球图片和砖块图片绘制成矩形,然后调用方法(ball.getRect().intersects(b.getRect())可以实现这个的时候就添加多个砖块到集合中然后遍历集合,接着定义小球运动边框范围

package obj;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.IOException;

import javax.imageio.ImageIO;

import util.GameCore;

/**
 * 
 * @author ZJX
 *定义球的属性以及方法
 */
public class Ball {

	private Image img;
	private Rectangle rect;
	private int speedX;
	private int speedY;
	private boolean isDispose=false;
	/**
	 * 小球的构造方法
	 * @param x定义小球的位置
	 * @param y
	 */
	public Ball(int x,int y) {
		super();
		
		try {
			//加载图片
			img=ImageIO.read(Ball.class.getResource("/img/ball.png"));
			//为矩形 位置和大小初始化
			rect=new Rectangle(x, y, img.getWidth(null), img.getHeight(null));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//初始化指定球的移动速度
		speedX=3;
		speedY=3;
		
	}
	
	/**
	 * 更新小球数据
	 */
	public void update(Rectangle boardRect){
		
		//以下是球在四周弹动过程,碰到四边框架时发生的弹动效果
		//如果球移动到窗体的最右边,这时X轴的移动要变成减,直接取反
		if(rect.x>GameCore.MAX_X-16 || rect.xGameCore.MAX_Y-16 ||rect.yboardRect.y+20){
			isDispose=true;//标识球销毁
		}
	}
	
	/**
	 * 绘制小球
	 * @param g
	 */
	public void draws(Graphics g){
		g.drawImage(img,rect.x, rect.y,null);
	}
	
	public Image getImg() {
		return img;
	}
	public void setImg(Image img) {
		this.img = img;
	}
	public Rectangle getRect() {
		return rect;
	}
	public void setRect(Rectangle rect) {
		this.rect = rect;
	}
	public int getSpeedX() {
		return speedX;
	}
	public void setSpeedX(int speedX) {
		this.speedX = speedX;
	}
	public int getSpeedY() {
		return speedY;
	}
	public void setSpeedY(int speedY) {
		this.speedY = speedY;
	}
	public boolean isDispose() {
		return isDispose;
	}
	public void setDispose(boolean isDispose) {
		this.isDispose = isDispose;
	}
	
	
}

 

 挡板的代码

package obj;
/**
 * 定义挡板的类
 */
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Board {

	private Image img;
	private Rectangle rect;
	public Board(int x,int y) {
		super();
		//加载图片
		try {
			img=ImageIO.read(Board.class.getResource("/img/board.png"));
			//为矩形 位置和大小初始化
			rect=new Rectangle(x, y, img.getWidth(null), img.getHeight(null));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 
	 * @param g绘制挡板
	 */
	public void draws(Graphics g){
		g.drawImage(img,rect.x, rect.y, null);
	}
	public Rectangle getRect() {
		return rect;
	}
	public void setRect(Rectangle rect) {
		this.rect = rect;
	}

}

 砖块的代码

package obj;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.IOException;

import javax.imageio.ImageIO;

import util.GameCore;

/**
 * 
 * @author ZJX
 *定义砖块的类
 */
public class Block {
	private Image img;
	private Rectangle rect;
	/**
	 * 砖块的构造函数
	 */
	public Block(int x,int y) {
		super();
		//加载图片
		int type=GameCore.RAN.nextInt(7)+1;//随机生成一张图片类型
		try {
			//加载图片
			img=ImageIO.read(Block.class.getResource("/img/block"+type+".png"));
			//为矩形 位置和大小初始化
			rect=new Rectangle(x, y, img.getWidth(null), img.getHeight(null));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 绘制砖块
	 * @param g
	 */
	public void draws(Graphics g){
		g.drawImage(img, rect.x, rect.y, null);
		
	}
	
	public Rectangle getRect() {
		return rect;
	}
	public void setRect(Rectangle rect) {
		this.rect = rect;
	}
	
}

 定义一个工具类,里面是需要用到的参数,主要是界面的大小以及小球运动的位置

package util;

import java.util.Random;

/**
 * @author Administrator
 *游戏中的全局变量或方法
 */
public class GameCore {
	/**
	 * 游戏界面的宽度
	 */
	public static final int GAME_WIDHT=640;
	/**
	 * 游戏界面的高度
	 */
	public static final int GAME_HEIGHT=480;
	
	//以下四个变量,保存游戏中X轴和Y轴最大和最小可移动的位置
	public static final int MIN_X=135;
	public static final int MAX_X=515;
	public static final int MAX_Y=480;
	public static final int MIN_Y=30;
	
	/**
	 * 随机种子
	 */
	public static Random RAN=new Random();
}

 添加一个面板

package frame;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.io.IOException;
import java.util.*;

import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import obj.*;
import util.GameCore;

public class GamePanel extends JPanel implements MouseMotionListener{

	private Image bgImg;//主界面的背景图片
	private Ball ball=null;//球的对象
	private Board board=null;//挡板对象
	List blocks=new ArrayList();//存放多个方块的集合
	private int maxLife=5;//最大可以使用生命的次数
	private int currentLife=1;//当前使用的生命次数
	/**
	 * Create the panel.
	 */
	public GamePanel() {
		setLayout(null);
		//加载背景图片
		try {
			bgImg=ImageIO.read(GamePanel.class.getResource("/img/1.png"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ball=new Ball(200,300);
		board=new Board(200,400);
		//绑定事件
		this.addMouseMotionListener(this);
		initBlocks();

	}
	/**
	 * 初始化砖块
	 */
	public void initBlocks(){
		for(int row=0;row<10;row++){
			for(int col=0;col<12;col++){
				Block b=new Block(col*30+145,row*15+30);
				blocks.add(b);//添加到集合中
			}
		}
	}
	//更新球的位置
	public void update(){
		//更新球的数据
		if(ball!=null){
			ball.update(board.getRect());
			//将球和所有的方块进行检测 ,是否有相交,如果有,则销毁方块
			for(int i=0;iGameCore.MIN_X && e.getX()

 把这个添加到主面板上随时更新

 

转载于:https://www.cnblogs.com/zhuangjixiang/archive/2012/12/11/2813725.html

你可能感兴趣的:(小球弹砖块游戏(JAVA))