//6-18完成
//推箱子带音乐版
//右键单击--悔棋功能
//用时1:40分钟
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.util.ArrayList;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class GameFrame extends JFrame implements ActionListener, MouseListener// 主面板类
, KeyListener {
private int grade = 0;
// row,column记载人的行号 列号
// leftX,leftY 记载左上角图片的位置 避免图片从(0,0)坐标开始
private int row = 7, column = 7, leftX = 0, leftY = 0;
// 记载地图的行列数
private int mapRow = 0, mapColumn = 0;
// width,height 记载屏幕的大小
private int width = 0, height = 0;
private boolean acceptKey = true;
// 程序所用到的图片
private Image pic[] = null;
// 定义一些常量,对应地图的元素
final byte WALL = 1, BOX = 2, BOXONEND = 3, END = 4, MANDOWN = 5,
MANLEFT = 6, MANRIGHT = 7, MANUP = 8, GRASS = 9, MANDOWNONEND = 10,
MANLEFTONEND = 11, MANRIGHTONEND = 12, MANUPONEND = 13;
private byte[][] map = null;
private ArrayList list = new ArrayList();
Sound sound;
public void getManPosition() {
for (int i = 0; i < map.length; i++)
for (int j = 0; j < map[0].length; j++)
if (map[i][j] == MANDOWN || map[i][j] == MANDOWNONEND
|| map[i][j] == MANUP || map[i][j] == MANUPONEND
|| map[i][j] == MANLEFT || map[i][j] == MANLEFTONEND
|| map[i][j] == MANRIGHT || map[i][j] == MANRIGHTONEND) {
row = i;
column = j;
break;
}
}
/* 显示提示信息对话框 */
public void DisplayToast(String str) {
JOptionPane.showMessageDialog(null, str, "提示",
JOptionPane.ERROR_MESSAGE);
}
// 撤销移动
public void undo() {
if (acceptKey) {
// 撤销
if (list.size() > 0) {
// 若要撤销 必须走过
Map priorMap = (Map) list.get(list.size() - 1);
map = priorMap.getMap();
row = priorMap.getManX();
column = priorMap.getManY();
repaint();
list.remove(list.size() - 1);
} else
DisplayToast("不能再撤销!");
} else {
DisplayToast("此关已完成,不能撤销!");
}
}
public void nextGrade() {
// grade++;
if (grade >= MapFactory.getCount() - 1) {
DisplayToast("恭喜你完成所有关卡!");
acceptKey = false;
} else {
grade++;
initMap();
repaint();
acceptKey = true;
}
}
public void priorGrade() {
grade--;
acceptKey = true;
if (grade < 0)
grade = 0;
initMap();
repaint();
}
public void initMap() {
map = getMap(grade);
list.clear();
getMapSizeAndPosition();
getManPosition();
// Map currMap=new Map(row, column, map);
// list.add(currMap);
}
/*
* //原来是从数组读取 2012-4-20 public byte[][] getMap(int grade) { return
* MapFactory.getMap(grade); }
*/
public GameFrame() {
super("推箱子游戏带音乐版");
setSize(600, 600);
setVisible(true);
setResizable(false);
setLocation(300, 20);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cont = getContentPane();
cont.setLayout(null);
cont.setBackground(Color.black);
// 最初始13张图片
getPic();
width = this.getWidth();
height = this.getHeight();
this.setFocusable(true);
initMap();
// 构造方法执行时从优先数据中恢复游戏
// 关卡切换时调用initMap()
// resumeGame();
this.addKeyListener(this);
this.addMouseListener(this);
sound = new Sound();
sound.loadSound();
}
private void getMapSizeAndPosition() {
// TODO Auto-generated method stub
mapRow = map.length;
mapColumn = map[0].length;
leftX = (width - map[0].length * 30) / 2;
leftY = (height - map.length * 30) / 2;
System.out.println(leftX);
System.out.println(leftY);
System.out.println(mapRow);
System.out.println(mapColumn);
}
public void getPic() {
pic = new Image[14];
for (int i = 0; i <= 13; i++) {
pic[i] = Toolkit.getDefaultToolkit().getImage(
"images\\pic" + i + ".JPG");
}
}
public byte grassOrEnd(byte man) {
byte result = GRASS;
if (man == MANDOWNONEND || man == MANLEFTONEND || man == MANRIGHTONEND
|| man == MANUPONEND)
result = END;
return result;
}
private void moveUp() {
// 上一位p1为WALL
if (map[row - 1][column] == WALL)
return;
// 上一位p1为 BOX,BOXONEND,须考虑P2
if (map[row - 1][column] == BOX || map[row - 1][column] == BOXONEND) {
// 上上一位p2为 END,GRASS则向上一步,其他不用处理
if (map[row - 2][column] == END || map[row - 2][column] == GRASS) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte boxTemp = map[row - 2][column] == END ? BOXONEND : BOX;
byte manTemp = map[row - 1][column] == BOX ? MANUP : MANUPONEND;
// 箱子变成temp,箱子往前一步
map[row - 2][column] = boxTemp;
// 人变成MANUP,往上走一步
map[row - 1][column] = manTemp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
}
} else {
// 上一位为 GRASS,END,不须考虑P2。其他情况不用处理
if (map[row - 1][column] == GRASS || map[row - 1][column] == END) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte temp = map[row - 1][column] == END ? MANUPONEND : MANUP;
// 人变成temp,人往上走一步
map[row - 1][column] = temp;
// 人刚才站的地方变成GRASS或者END
map[row][column] = grassOrEnd(map[row][column]);
// 人离开后修改人的坐标
row--;
}
}
}
private void moveDown() {
// 下一位p1为WALL
if (map[row + 1][column] == WALL)
return;
// 下一位p1为 BOX,BOXONEND,须考虑P2
if (map[row + 1][column] == BOX || map[row + 1][column] == BOXONEND) {
// 下下一位p2为 END,GRASS则向下一步,其他不用处理
if (map[row + 2][column] == END || map[row + 2][column] == GRASS) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte boxTemp = map[row + 2][column] == END ? BOXONEND : BOX;
byte manTemp = map[row + 1][column] == BOX ? MANDOWN
: MANDOWNONEND;
// 箱子变成boxTemp,箱子往下一步
map[row + 2][column] = boxTemp;
// 人变成manTemp,往下走一步
map[row + 1][column] = manTemp;
// 人刚才站的地方变成 grassOrEnd(map[row][column])
map[row][column] = grassOrEnd(map[row][column]);
row++;
}
} else {
// 下一位为 GRASS,END,不须考虑P2,其他情况不用处理
if (map[row + 1][column] == GRASS || map[row + 1][column] == END) {
Map currMap = new Map(row, column, map);
list.add(currMap);
byte temp = map[row + 1][column] == END ? MANDOWNONEND
: MANDOWN;
// 人变成temp,人往下走一步
map[row + 1][column] = temp;
// 人刚才站的地方变成 grassOrEnd(map[row][column])
map[row][column] = grassOrEnd(map[row][column]);
row++;
}
}
}
private void moveLeft() {
// 左一位p1为WALL
if (map[row][column - 1] == WALL)
return;
// 左一位p1为 BOX,BOXONEND
if (map[row][column - 1] == BOX || map[row][column - 1] == BOXONEND) {
// 左左一位p2为 END,GRASS则向左一步,其他不用处理
if (map[row][column - 2] == END || map[row][column - 2] == GRASS) {
Map currMap = new M
没有合适的资源?快使用搜索试试~ 我知道了~
详细解读Java推箱子音乐版2游戏的源代码-课程设计
共33个文件
jpg:14个
mid:5个
class:4个
需积分: 5 0 下载量 123 浏览量
2023-08-15
03:15:38
上传
评论
收藏 100KB ZIP 举报
温馨提示
详细解读Java推箱子音乐版2游戏的源代码--【课程设计】 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知! 喜欢的朋友还可以自己查到本站的N多毕业设计与课程设计, 如果错误或其它需要请留言!或发邮件至8195819@qq.com 本系列校训 用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干! 只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知! 喜欢的朋友还可以自己查到本站的N多毕业设计与课程设计, 如果错误或其它需要请留言!或发邮件至8195819@qq.com
资源推荐
资源详情
资源评论
收起资源包目录
Java推箱子音乐版2.zip (33个子文件)
Java推箱子2
.classpath 232B
src
GameFrame.java 14KB
MapFactory.java 6KB
Map.java 967B
.idea
workspace.xml 9KB
misc.xml 267B
modules.xml 275B
bin
MapFactory.class 8KB
GameFrame.class 11KB
Sound.class 2KB
Map.class 1KB
.project 696B
images
pic5.jpg 1KB
pic6.jpg 1KB
pic12.JPG 1KB
pic4.JPG 1006B
pic11.JPG 1KB
Thumbs.db 22KB
pic8.jpg 1KB
pic3.JPG 1022B
pic1.JPG 1KB
pic9.JPG 910B
pic0.JPG 1KB
pic13.JPG 1KB
pic7.jpg 1KB
pic2.JPG 965B
pic10.JPG 1KB
musics
eyes on me.mid 45KB
popo.mid 15KB
qin.mid 44KB
guang.mid 74KB
nor.mid 27KB
Java推箱子2.iml 448B
共 33 条
- 1
资源评论
项目花园范德彪
- 粉丝: 7373
- 资源: 219
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功