JAVA推箱子分解.docx

上传人:b****5 文档编号:5171598 上传时间:2022-12-13 格式:DOCX 页数:12 大小:16.88KB
下载 相关 举报
JAVA推箱子分解.docx_第1页
第1页 / 共12页
JAVA推箱子分解.docx_第2页
第2页 / 共12页
JAVA推箱子分解.docx_第3页
第3页 / 共12页
JAVA推箱子分解.docx_第4页
第4页 / 共12页
JAVA推箱子分解.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

JAVA推箱子分解.docx

《JAVA推箱子分解.docx》由会员分享,可在线阅读,更多相关《JAVA推箱子分解.docx(12页珍藏版)》请在冰豆网上搜索。

JAVA推箱子分解.docx

JAVA推箱子分解

主窗体

importjava.awt.Color;

importjava.awt.HeadlessException;

importjava.awt.event.KeyEvent;

importjava.awt.event.KeyListener;

importjavax.swing.ImageIcon;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

publicclassGameFrameextendsJFrame{

//面板

privateJPanelpanel;

//箱子

privateJLabelbox;

//目的地

privateJLabelgoal;

//工人

privateJLabelworker;

//围墙

privateJLabel[]walls;

//工人图片

privateString[]workerImgPaths;

publicGameFrame(Stringtitle)throwsHeadlessException{

super(title);

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){

}

@Override

publicvoidkeyReleased(KeyEvente){

}

@Override

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

//如果工人与某一块围墙有交集

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);

}

//判断箱子是否穿墙

for(inti=0;i

//如果箱子与某个围墙有交集

if(box.getBounds().intersects(walls[i].getBounds())){

box.setBounds(box.getBounds().x-x,box.getBounds().y-y,48,48);

worker.setBounds(worker.getBounds().x-x,worker.getBounds().y-y,48,48);

break;

}

}

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("imgs/"+imgPath);

JLabelcomp=newJLabel(img);

comp.setBounds(x*48,y*48,48,48);

panel.add(comp);

returncomp;

}

/**

*向面板中添加一个组件并返回添加的组件

*@paramimgPath图片路径

*@paramxy位置

*@return添加的组件

*/

privateJLabeladdComp(StringimgPath,intx,inty){

ImageIconimg=newImageIcon("imgs/"+imgPath);

JLabelcomp=newJLabel(img);

comp.setBounds(x*48,y*48,48,48);

panel.add(comp);

returncomp;

}

/**

*添加围墙

*@paramwallImgPath围墙使用的图片

*@paramwallsLocations中间障碍物的个数与位置

*/

privatevoidaddWalls(StringwallImgPath,int[][]wallsLocations){

ImageIconwallImg=newImageIcon("imgs/"+wallImgPath);

this.walls=newJLabel[24*2+13*2+wallsLocations.length];

for(inti=0;i

walls[i]=newJLabel(wallImg);

}

//记录使用到了围墙数组中的那个元素

intindex=0;

for(inti=0;i<24;i++){

walls[index].setBounds(i*48,0,48,48);

panel.add(walls[index]);

index++;

walls[index].setBounds(i*48,14*48,48,48);

panel.add(walls[index]);

index++;

}

for(inti=1;i<=13;i++){

walls[index].setBounds(0,i*48,48,48);

panel.add(walls[index]);

index++;

walls[index].setBounds(23*48,i*48,48,48);

panel.add(walls[index]);

index++;

}

//添加障碍物

for(inti=0;i

int[]location=wallsLocations[i];

walls[index].setBounds(location[0]*48,location[1]*48,48,48);

panel.add(walls[index]);

index++;

}

}

//初始化面板

privatevoidinitPanel(){

panel=newJPanel();

//设置背静颜色

panel.setBackground(Color.GREEN);

//自定义布局

panel.setLayout(null);

//内容面板

super.setContentPane(panel);

}

}

 

设置关卡

publicclassLevel{

//箱子使用图片

privateStringboxImgPath;

//箱子初始位置{3,3}

privateint[]boxLocation;

//工人使用图片数组长度为4

privateString[]workerImgPaths;

//工人初始位置长度为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){

level.setBoxImgPath("box.png");

level.setBoxLocation(newint[]{3,3});

level.setGoalImgPath("goal.png");

level.setGoalLocation(newint[]{10,10});

String[]workerImgPaths={

"workerLeft.png",

"workerUp.png",

"workerRight.png",

"workerDown.png"

};

level.setWorkerImgPaths(workerImgPaths);

level.setWorkerLocation(newint[]{19,12});

level.setWallImgPath("wall.png");

int[][]wallsLocations={

{7,2},

{8,2},

{9,2},

{10,2},

{11,2},

{12,2},

{13,2},

{10,3},

{10,4}

};

level.setWallsLocations(wallsLocations);

}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);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1