200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 打砖块 如何实现三个球 java_小球弹砖块游戏(JAVA)

打砖块 如何实现三个球 java_小球弹砖块游戏(JAVA)

时间:2024-02-27 00:47:15

相关推荐

打砖块 如何实现三个球 java_小球弹砖块游戏(JAVA)

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

完整的下载链接:/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.x

speedX*=-1;//X轴移动速度取反,使球的移动方向相反

}

if(rect.y>GameCore.MAX_Y-16 ||rect.y

speedY*=-1;

}

//判断档板是否与球相交

if(rect.intersects(boardRect)){

speedY*=-1;

}

//球的X和Y轴更新

rect.setLocation(rect.x+speedX, rect.y+speedY);

//判断球是否掉出去,如果是,游戏结束

if(rect.y+16>boardRect.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;i

Block b=blocks.get(i);

if(ball.getRect().intersects(b.getRect())){

blocks.remove(i);//移动对象

//球的移动方向反弹

ball.setSpeedY(ball.getSpeedY()*-1);

break;

}

}

//判断如果球被销毁

if(ball.isDispose()){

ball=null;

if(currentLife

ball=new Ball(board.getRect().x+60, board.getRect().y-30);

currentLife++;

}else{

JOptionPane.showMessageDialog(null, "游戏结束!");

}

}

}

}

@Override

public void paint(Graphics g) {

// TODO Auto-generated method stub

g.drawImage(bgImg, 0, 0, null);

//调用球的绘制方法

if(ball!=null)

ball.draws(g);

board.draws(g);

for(int i=0;i

blocks.get(i).draws(g);

}

//设置字体

g.setFont(new Font("宋体", Font.BOLD, 15));

g.setColor(Color.WHITE);

g.drawString("当前生命:"+(maxLife-currentLife), 10, 90);

}

@Override

public void mouseDragged(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseMoved(MouseEvent e) {

// TODO Auto-generated method stub

if(e.getX()>GameCore.MIN_X && e.getX()

board.getRect().setLocation(e.getX(), board.getRect().y);

}

}

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。