package s;
//***********************************************************
//author: FT
//date: 2016/4/9
//打砖块游戏
//实现了多关卡,多地图,背景音乐、音效,暂停、重新开始等功能
//************************************************************
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.event.*;
import javax.swing.*;
public class Game extends JFrame implements Runnable, KeyListener,
ActionListener {
private String s = new String("打砖块 V3.0 by FT");
// 定义组件
JToolBar toolbar = new JToolBar(); // 工具栏
JButton gstart = null; // 开始按钮
JButton grestart = null; // 重新开始按钮
JLabel clife=null;
JComboBox gmodel = null; // 砖块地图
JComboBox setgate=null; //设置关卡
// 定义变量
public static int through=0;
public static int n=5;//关卡列数
public static int m=4;//关卡行数
double dxb = -10, dyb = -10;//定义球速度
static int speed = 100; // 速度
static int toolgate = 0;
static boolean respeed = false;
int life = 3; // 生命
boolean isstop = true;// 开始 暂停
public static boolean setpaddle = true;
public static boolean setball = true;
int model = 1; // 砖块叠放的地图
BackMusic bm; // 音乐窗口
public static Treasure[][] trea;
FireVoice firevoice; // 碰撞声音
FireVoice click,clickiron;
Thread t = new Thread(this);
// 定义图形
public static Brick brick[][] = null; // 砖块
public static Ball ball = new Ball(); // 球
public static Paddle paddle = new Paddle(); // 板块
MyPanel panel; // 画板
public static BufferedImage img1; // 图片
public static BufferedImage img2;
public static BufferedImage img3;
public static BufferedImage img4,img5;
public Game() {//构造函数初始化
init();
}
public void initvariable() {//变量初始化
dxb=-10;
dyb=-10;
through=0;
speed = 50;
life = 3;
isstop = true;
setpaddle = true;
setball = true;
//model = 0;
switch (toolgate) {//不同关卡
case 0:
m = 6;
n = 5;
ball.r = 25;
paddle.width = 150;
try {
img2 = ImageIO.read(new File("1.jpg"));
img3=ImageIO.read(new File("5.jpg"));
} catch (IOException e1) {
e1.printStackTrace();
}
break;
case 1:
m = 8;
n = 5;
ball.r = 25;
paddle.width = 150;
try {
img2 = ImageIO.read(new File("2.jpg"));
img3=ImageIO.read(new File("6.jpg"));
} catch (IOException e1) {
e1.printStackTrace();
}
break;
default://其它关
m = 10;
n = 5;
ball.r = 20;
paddle.width = 120;
try {
img2 = ImageIO.read(new File("3.jpg"));
img3=ImageIO.read(new File("7.jpg"));
} catch (IOException e1) {
e1.printStackTrace();
}
}
ball.xBall = paddle.xpaddle + paddle.width * 0.5;//设置小球初始位置(木板正中间)
ball.yBall = paddle.ypaddle - ball.r;
brick = new Brick[m][n];
trea=new Treasure[m][n];
for (int j = 0; j < brick[0].length; j++) {//创建砖块
for (int i = 0; i < brick.length; i++) {
brick[i][j] = new Brick();
brick[i][j].visual = 3;
brick[i][j].width=640/Game.m;
brick[i][j].heigh=200/Game.n;
brick[i][j].xBrick = i * (640 / Game.m)+80;
brick[i][j].yBrick = j * (200 / Game.n)+20;
trea[i][j]=new Treasure(brick[i][j].xBrick+brick[i][j].width/2-10,brick[i][j].yBrick);
}
}
switch (toolgate) {//不同关卡
case 0:
Map.setmodel(0);
break;
case 1:
Map.setmodel(1);
break;
default://其它关
Map.setmodel(2);
break;
}
try {
img1 = ImageIO.read(new File("4.jpg"));//木板
img4=ImageIO.read(new File("9.jpg"));
img5=ImageIO.read(new File("8.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void init() {//对主界面初始化
initvariable();//变量初始化
model = 0;
bm = new BackMusic();// 开启音乐
bm.Music1Start();
firevoice = new FireVoice();
click=new FireVoice();
clickiron=new FireVoice();
// 设置窗体
//setSize(640, 500);
setSize(800,850);
setBackground(Color.black );
panel = new MyPanel();
this.setResizable(false);
this.setLocation(300, 100);
Container contentPane = getContentPane();//容器
contentPane.setLayout(new BorderLayout());//布局方式
this.setTitle(s);
// 初始化按钮
gstart = new JButton("开始");
grestart = new JButton("重新开始");
clife=new JLabel("生命:3");
String[] smodel = { "地图1", "地图2", "地图3"};// 初始化下拉栏
gmodel = new JComboBox(smodel);
String[] sgate={"第1关","第2关","第3关"};
setgate=new JComboBox(sgate);
// 将组件添加到工具栏
toolbar.add(gstart);
toolbar.addSeparator();//添加分隔栏
toolbar.add(grestart);
toolbar.addSeparator();//添加分隔栏
toolbar.add(gmodel);
toolbar.addSeparator();//添加分隔栏
toolbar.add(setgate);
toolbar.addSeparator();//添加分隔栏
toolbar.add(clife);
//添加组件到画板
contentPane.add(toolbar, BorderLayout.NORTH);//在上方添加工具栏
contentPane.add(panel, BorderLayout.CENTER);//在中部添加游戏界面
// 监听事件
gstart.addActionListener(this);
grestart.addActionListener(this);
gmodel.addActionListener(this);
setgate.addActionListener(this);
addMouseMotionListener(new MouseMove());
panel.addKeyListener(this);
panel.requestFocus();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
// 初始化变量
t.start();//线程开始
}
//键盘监听事件
public void keyPressed(KeyEvent e) {
grestart.setFocusable(false);
gmodel.setEnabled(false);
setgate.setEnabled(false);
if (e.getKeyCode() == KeyEvent.VK_SPACE) {//空格暂停
if (isstop) {//如果当前是暂停的
isstop = false;//切换状态
setpaddle = true;//允许木板活动
setball = false;//允许球活动
gstart.setEnabled(false);
} else {//如果当前是活动的
isstop = true;
setpaddle =false;
gstart.setEnabled(true);
}
}
}
//响应事件
public void actionPerformed(ActionEvent e) {//按钮监听
Object obj = e.getSource();
if (obj == gstart) { // 开始
isstop = false;
setpaddle = true;
setball = false;
panel.requestFocus();//重新获得焦点
} else if (obj == grestart) {//重新开始
isrestarts();
gmodel.setEnabled(true);
grestart.setFocusable(false);
panel.requestFocus();
} else if (obj == gmodel) {//设置地图
model = gmodel.getSelectedIndex();
initvariable();
Map.setmodel(model);
panel.requestFocus();
}else if(obj==setgate){//选择关卡
toolgate=setgate.getSelectedIndex();
initvariable();
panel.requestFocus();
}
}
public void iscompete() {//判断是否过关
int h;
for (int j = 0; j < Game.brick[0].length; j++) {
for (int i = 0; i < Game.brick.length; i++) {
if (Game.brick[i][j].visual !=0) {//只要还有一个砖块存在
if(Game.brick[i][j].treasure!=11){
return;//退出方法
}
}
}
}
h = JOptionPane.showConfirmDialog(null, " 是否进入下一关?", "过关 ",JOptionPane.YES_NO_OPTION);//弹出是否过关的选择框
if (h == 1) {
isrestarts();//选否仍是这关
} else {
nextgate();
}
}
public void isrestarts() { // 重新开始
gmodel.setSelectedIndex(0);
setgate.setSelectedIndex(0);
speed = 50;
toolgate = 0;
respeed = true;
life=3;
clife.setText("生命:"+life);
setgate.setEnabled(true);
initvariable(); // 初始化变量
}
public void nextgate() {//过关
gmodel.setSelectedIndex(0);//重置地图
toolgate++;
initvariable(); // 初始化变量
}
public void run() {
while (true) {
if (ball.xBall <= 0 || (ball.xBall + 1.5 * ball.r >= getWidth())) { // 超出左右边界
dxb = -dxb;//边框反弹
}
if (ball.yBall <= 0) { // 超出上边界
没有合适的资源?快使用搜索试试~ 我知道了~
基于JAVA的打砖块游戏
共38个文件
class:10个
java:9个
jpg:9个
5星 · 超过95%的资源 需积分: 43 213 下载量 47 浏览量
2016-04-16
00:11:09
上传
评论 11
收藏 10.71MB RAR 举报
温馨提示
将文件解压后导入Eclipse即可运行;实现了基本的关卡,动画效果,宝物掉落等功能,适合初学者学习的Java文件
资源推荐
资源详情
资源评论
收起资源包目录
game.rar (38个子文件)
game
.project 380B
1.wav 18.51MB
7.wav 81KB
5.mid 3KB
2.jpg 5KB
7.mp3 4KB
src
s
newfile.cld 35KB
Ball.java 124B
Game.java 11KB
Treasure.java 1KB
Mouse.java 682B
Brick.java 2KB
SetMusic.java 1KB
Panel.java 911B
Paddle.java 161B
Map.java 1KB
8.jpg 5KB
6.mp3 10KB
6.jpg 140KB
8.wav 48KB
4.jpg 4KB
5.jpg 143KB
1.JPG 1KB
9.jpg 21KB
.classpath 248B
7.jpg 31KB
bin
s
newfile.cld 35KB
Map.class 897B
FireVoice.class 1KB
Game.class 10KB
Ball.class 379B
Brick.class 2KB
MyPanel.class 1KB
Paddle.class 444B
BackMusic.class 1011B
MouseMove.class 991B
Treasure.class 1KB
3.jpg 8KB
共 38 条
- 1
资源评论
- headtofeet2016-04-16很有参考价值
- baidu_382299862017-04-30请问发的作者还在吗?我在看的时候不太清楚你在brick.java文件下的那些switch case语句,请问您的三个case分别代表着什么,case1和case2有什么不同吗?
sadfassd
- 粉丝: 119
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功