JAVA推箱子分解文档格式.docx
- 文档编号:18142765
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:12
- 大小:16.88KB
JAVA推箱子分解文档格式.docx
《JAVA推箱子分解文档格式.docx》由会员分享,可在线阅读,更多相关《JAVA推箱子分解文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
super.setBounds(60,15,24*48,15*48+30);
super.setResizable(false);
//初始化面板
this.initPanel();
this.addEvent();
}
//加载关卡信息
publicvoidloadLevel(Levellevel){
this.workerImgPaths=level.getWorkerImgPaths();
//添加工人箱子目的地
box=this.addComp(level.getBoxImgPath(),level.getBoxLocation());
goal=this.addComp(level.getGoalImgPath(),level.getGoalLocation());
worker=this.addComp(level.getWorkerImgPaths()[0],level.getWorkerLocation());
//初始化围墙
this.addWalls(level.getWallImgPath(),level.getWallsLocations());
privatevoidaddEvent(){
super.addKeyListener(newKeyListener(){
@Override
publicvoidkeyTyped(KeyEvente){
}
publicvoidkeyReleased(KeyEvente){
publicvoidkeyPressed(KeyEvente){
intkeyCode=e.getKeyCode();
intx=0,y=0;
intworkerImgIndex=0;
//StringworkerImgPath=workerImgPaths[0];
if(keyCode==KeyEvent.VK_LEFT||keyCode==KeyEvent.VK_A){
x=-24;
}elseif(keyCode==KeyEvent.VK_UP||keyCode==KeyEvent.VK_W){
y=-24;
workerImgIndex=1;
//workerImgPath=workerImgPaths[1];
}elseif(keyCode==KeyEvent.VK_RIGHT||keyCode==KeyEvent.VK_D){
x=24;
workerImgIndex=2;
//workerImgPath=workerImgPaths[2];
}elseif(keyCode==KeyEvent.VK_DOWN||keyCode==KeyEvent.VK_S){
y=24;
workerImgIndex=3;
//workerImgPath=workerImgPaths[3];
}
ImageIconworkerImg=newImageIcon("
imgs/"
+workerImgPaths[workerImgIndex]);
worker.setIcon(workerImg);
worker.setBounds(worker.getBounds().x+x,worker.getBounds().y+y,48,48);
//判断工人是否穿墙
for(inti=0;
i<
walls.length;
i++){
//如果工人与某一块围墙有交集
if(worker.getBounds().intersects(walls[i].getBounds())){
//工人退后
worker.setBounds(worker.getBounds().x-x,worker.getBounds().y-y,48,48);
break;
}
//如果工人与箱子有交集
if(worker.getBounds().intersects(box.getBounds())){
//让工人推动箱子
box.setBounds(box.getBounds().x+x,box.getBounds().y+y,48,48);
//判断箱子是否穿墙
//如果箱子与某个围墙有交集
if(box.getBounds().intersects(walls[i].getBounds())){
box.setBounds(box.getBounds().x-x,box.getBounds().y-y,48,48);
if(worker.getBounds().intersects(goal.getBounds())){
worker.setBounds(worker.getBounds().x-x,worker.getBounds().y-y,48,48);
//判断输赢
if(box.getBounds().contains(goal.getBounds())){
JOptionPane.showMessageDialog(null,"
恭喜你,赢了!
"
);
System.exit(0);
});
/**
*向面板中添加一个组件并返回添加的组件
*@paramimgPath图片路径
*@paramlocation位置
*@return添加的组件
*/
privateJLabeladdComp(StringimgPath,int[]location){
intx=location[0];
inty=location[1];
ImageIconimg=newImageIcon("
+imgPath);
JLabelcomp=newJLabel(img);
comp.setBounds(x*48,y*48,48,48);
panel.add(comp);
returncomp;
*@paramxy位置
privateJLabeladdComp(StringimgPath,intx,inty){
*添加围墙
*@paramwallImgPath围墙使用的图片
*@paramwallsLocations中间障碍物的个数与位置
privatevoidaddWalls(StringwallImgPath,int[][]wallsLocations){
ImageIconwallImg=newImageIcon("
+wallImgPath);
this.walls=newJLabel[24*2+13*2+wallsLocations.length];
for(inti=0;
walls[i]=newJLabel(wallImg);
}
//记录使用到了围墙数组中的那个元素
intindex=0;
24;
walls[index].setBounds(i*48,0,48,48);
panel.add(walls[index]);
index++;
walls[index].setBounds(i*48,14*48,48,48);
for(inti=1;
=13;
walls[index].setBounds(0,i*48,48,48);
walls[index].setBounds(23*48,i*48,48,48);
//添加障碍物
wallsLocations.length;
int[]location=wallsLocations[i];
walls[index].setBounds(location[0]*48,location[1]*48,48,48);
//初始化面板
privatevoidinitPanel(){
panel=newJPanel();
//设置背静颜色
panel.setBackground(Color.GREEN);
//自定义布局
panel.setLayout(null);
//内容面板
super.setContentPane(panel);
}
设置关卡
publicclassLevel{
//箱子使用图片
privateStringboxImgPath;
//箱子初始位置{3,3}
privateint[]boxLocation;
//工人使用图片数组长度为4
//工人初始位置长度为2{19,12}
privateint[]workerLocation;
//目的地使用图片
privateStringgoalImgPath;
//目的地初始位置长度为2{10,10}
privateint[]goalLocation;
//围墙图片
privateStringwallImgPath;
//障碍物个数与位置
privateint[][]wallsLocations;
publicLevel(){
super();
//TODOAuto-generatedconstructorstub
publicStringgetBoxImgPath(){
returnboxImgPath;
publicvoidsetBoxImgPath(StringboxImgPath){
this.boxImgPath=boxImgPath;
publicint[]getBoxLocation(){
returnboxLocation;
publicvoidsetBoxLocation(int[]boxLocation){
this.boxLocation=boxLocation;
publicString[]getWorkerImgPaths(){
returnworkerImgPaths;
publicvoidsetWorkerImgPaths(String[]workerImgPaths){
this.workerImgPaths=workerImgPaths;
publicint[]getWorkerLocation(){
returnworkerLocation;
publicvoidsetWorkerLocation(int[]workerLocation){
this.workerLocation=workerLocation;
publicStringgetGoalImgPath(){
returngoalImgPath;
publicvoidsetGoalImgPath(StringgoalImgPath){
this.goalImgPath=goalImgPath;
publicint[]getGoalLocation(){
returngoalLocation;
publicvoidsetGoalLocation(int[]goalLocation){
this.goalLocation=goalLocation;
publicStringgetWallImgPath(){
returnwallImgPath;
publicvoidsetWallImgPath(StringwallImgPath){
this.wallImgPath=wallImgPath;
publicint[][]getWallsLocations(){
returnwallsLocations;
publicvoidsetWallsLocations(int[][]wallsLocations){
this.wallsLocations=wallsLocations;
关卡管理
publicclassLevelManager{
*根据关卡编号得到本关卡的详细信息
*@paramindex
*@return
publicstaticLevelgetNowLevel(intindex){
Levellevel=newLevel();
if(index==1){
level.setBoxImgPath("
box2.png"
level.setBoxLocation(newint[]{3,3});
level.setGoalImgPath("
goal2.png"
level.setGoalLocation(newint[]{10,10});
String[]workerImgPaths={
"
workerLeft2.png"
workerUp2.png"
workerRight2.png"
workerDown2.png"
};
level.setWorkerImgPaths(workerImgPaths);
level.setWorkerLocation(newint[]{19,12});
level.setWallImgPath("
wall2.png"
int[][]wallsLocations={
{7,2},
{8,2},
{9,2},
{10,2},
{11,2},
{12,2},
{13,2},
{10,3},
{10,4}
level.setWallsLocations(wallsLocations);
}elseif(index==2){
box.png"
goal.png"
workerLeft.png"
workerUp.png"
workerRight.png"
workerDown.png"
wall.png"
}else{
returnnull;
returnlevel;
运行游戏
publicclassStart{
publicstaticvoidmain(String[]args){
//1创建游戏窗体
GameFramegameFrame=newGameFrame("
推箱子3.0"
//2得到关卡数据
Levellevel=LevelManager.getNowLevel
(1);
//3让游戏窗体加载关卡数据
gameFrame.loadLevel(level);
//4窗体可见
gameFrame.setVisible(true);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 箱子 分解