java推箱子游戏源代码(含推箱子的判断)

合集下载

推箱子代码

推箱子代码
arr[sr][sc]=2;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%d",arr[i][j]);
printf("\n");
}
if(sr==0&&sc==N-1) {
printf("恭喜你成功了!\n");
break;
{ for(j=0;j<N;j++)
printf("%d",arr[i][j]);
printf("\n");
}
//人移动
int fx;
for(;;)
{ arr[pr][pc]=0;
arr[sr][sc]=0;
for(;;){ //输入移动的方向 定义 1左移,2右移,3上移,4下移
if(pr!=sr&&pc!=sc){ //不在同行且同列
if(fx==1){
if(pc>0) pc--;
else ;
}
if(fx==2){
if(pc<N-1) pc++;
else ;
}
sr=rand()%8+1;//箱子的随机位置
sc=rand()%8+1;
if(pr!=sr||pc!=sc) break;
}
arr[pr][pc]=1;//标示人的位置
arr[sr][sc]=2;//标示箱子的位置
intN;i++) //打印初始位置图

Java实现经典游戏推箱子的示例代码

Java实现经典游戏推箱子的示例代码

Java实现经典游戏推箱⼦的⽰例代码⽬录前⾔主要设计功能截图代码实现核⼼类声⾳播放类总结前⾔《推箱⼦》推箱⼦是⼀个古⽼的游戏,⽬的是在训练你的逻辑思考能⼒。

在⼀个狭⼩的仓库中,要求把⽊箱放到指定的位置,稍不⼩⼼就会出现箱⼦⽆法移动或者通道被堵住的情况,所以需要巧妙的利⽤有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

游戏是⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。

主要需求控制搬运⼯上下左右移动,来将箱⼦推到指定地点主要设计1、游戏⾯板⽣成显⽰2、地图⽣成算法3、⼈物移动算法4、播放背景⾳乐5、箱⼦移动算法6、全部箱⼦移动到指定位置,才算游戏过关功能截图游戏开始移动效果游戏过关代码实现核⼼类public class GameFrame extends JFrame implementsActionListener, MouseListener, KeyListener {// 实现动作事件监听器、⿏标事件监听器、键盘事件监听器// 当前的关卡数,默认为第⼀关,从1开始计数private int grade = 1;// row,column记载⼈的位置,分别表⽰⼆维数组中的⾏号和列号,即map[row][column]确定⼈的位置private int row = 7, column = 7;// leftX,leftY记载左上⾓图⽚的位置,避免图⽚从(0,0)坐标开始,因为是图⽚填充,从(0,0)开始不⾏private int leftX = 50, leftY = 50;// 记载地图的总共有多少⾏、多少列private int mapRow = 0, mapColumn = 0;// 记载屏幕窗⼝的宽度和⾼度private int width = 0, height = 0;private boolean acceptKey = true;// 程序所需要⽤到的图⽚private Image pics[] = null;// 图⽚数据private byte[][] map = null;// 地图数据private ArrayList list = new ArrayList();private SoundPlayerUtil soundPlayer;// 播放声⾳⼯具类/* 常量,即游戏中的资源 */private final static int WALL = 1;// 墙private final static int BOX = 2;// 箱⼦private final static int BOX_ON_END = 3;// 放到⽬的地的箱⼦private final static int END = 4;// ⽬的地private final static int MAN_DOWN = 5;// 向下的⼈private final static int MAN_LEFT = 6;// 向左的⼈private final static int MAN_RIGHT = 7;// 向右的⼈private final static int MAN_UP = 8;// 向上的⼈private final static int GRASS = 9;// 通道private final static int MAN_DOWN_ON_END = 10;// 站在⽬的地向下的⼈private final static int MAN_LEFT_ON_END = 11;// 站在⽬的地向左的⼈private final static int MAN_RIGHT_ON_END = 12;// 站在⽬的地向右的⼈private final static int MAN_UP_ON_END = 13;// 站在⽬的地向上的⼈private final static int MOVE_PIXEL = 30;// 表⽰每次移动30像素/*** 在构造⽅法GameFrame0中,调⽤initMap()法来初始化本关grade游戏地图,清空悔棋信* 息列表list,同时播放MIDI背景⾳乐。

用java实现推箱子(sokoban)游戏

用java实现推箱子(sokoban)游戏

推箱子游戏一、功能描述:➢可以通过面板上的按钮或是键盘上的pageup,pagedown键选择上下关➢可以通过面板上按钮或是键盘上的Backspace键后退,一直后退自己想要的位置,知道游戏开始时的位置。

➢可以通过面板上的按钮或是键盘上的字母r重新开始当前关卡游戏。

➢可以在复选框选择想要玩的关卡。

二、界面及运行截图三、源代码(三部分)1、地图类package box;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;//读取字符文件类FileReader import java.io.IOException;public class map {int[][] map=new int[20][20];int manX,manY;public map(int level){String filepath="mapc/"+level+".txt";File file = new File(filepath);FileReader fr = null;//利用FileReader流来读取一个文件中的数据BufferedReader br = null;//字符读到缓存里try {fr = new FileReader(file);br = new BufferedReader(fr);for (int i = 0; i < 15; i++){String line = br.readLine();//以行为单位,一次读一行利用BufferedReader 的readLine,读取分行文本byte[] point = line.getBytes();//将字符串转换为字节数组for (int j = 0; j < 15; j++) {map[i][j] = point[j] - 48;// 根据ASCall码表要减掉30H(十进制的48)if (map[i][j] == 5 || map[i][j] == 6 || map[i][j] == 7|| map[i][j] == 8){manX = i;manY = j;}}}}catch (FileNotFoundException e){e.printStackTrace();//深层次的输出异常调用的流程}catch (IOException e){e.printStackTrace();//深层次的输出异常调用的流程}catch(NullPointerException e){e.printStackTrace();//深层次的输出异常调用的流程}finally {if (br == null){try{br.close();}catch (IOException e){e.printStackTrace();}br = null;}if (fr == null){try {fr.close();} catch (IOException e){e.printStackTrace();}fr = null;}}}public int[][] getMap() {return map;}public int getManX() {return manX;}public int getManY() {return manY;}}2、游戏运行类package box;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.*;import javax.swing.*;public class pushbox extends JFrame implements KeyListener,ActionListener{ map map_level=new map(1); //首次获取地图int[][] map=new int[15][15]; //地图上每个位置所对应的图片int[][] map_restart=new int[15][15]; //备用图片static int manX,manY; //人所处的位置static int level=1; //所处关卡static int step=0;Image[] picture; //地图上的所有图片ImageIcon[] image=new ImageIcon[10];Stack<Integer> back_stack = new Stack<Integer>(); //存储所前行的路径JButton next,previous,back,restart,exit; //按钮:下一关,上一关,重新开始,退出String current_level="第"+level+"关"; //当前所处关卡(右上角显示文本)String[] level_button=new String[13]; //复选框的容JComboBox selectBox; //选关复选框final int Up = 0;final int Down = 1;final int Left = 2;final int Right = 3;int[] dir_x = {-1, 1, 0, 0};int[] dir_y = {0, 0, -1, 1};public pushbox(){super("推箱子");getmap(map);previous=new JButton("上一关");next=new JButton("下一关");restart=new JButton("重新开始");back=new JButton("后退");exit=new JButton("退出游戏");for(int i=0;i<13;i++)level_button[i]="第"+Integer.toString(i+1)+"关";selectBox=new JComboBox(level_button);FlowLayout layout=new FlowLayout(); //布局模式Container c=getContentPane();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER); //控件在布局中的位置c.setBackground(Color.CYAN); //背景色c.add(previous);c.add(next);c.add(back);c.add(restart);c.add(selectBox);c.add(exit);previous.addActionListener((ActionListener) this);previous.addKeyListener(this);next.addActionListener((ActionListener) this);next.addKeyListener(this);back.addActionListener(this);back.addKeyListener(this);restart.addActionListener((ActionListener) this);restart.addKeyListener(this);exit.addActionListener((ActionListener) this);exit.addKeyListener(this);selectBox.addItemListener( //监听复选框点击事件new ItemListener(){public void itemStateChanged(ItemEvent e){if(e.getStateChange()==e.SELECTED){step=0;back_stack.clear(); //每次重新选关后都要清空路径栈level=selectBox.getSelectedIndex()+1; //获取所选的关卡map_level=new map(level); //重新获取对应关卡的地图getmap(map);current_level="第"+level+"关"; //右上角提示所处关卡文本的更新repaint(); //重画地图requestFocus(); //重新获取焦点(因为按钮事件后键盘事件不起作用)}}});for(int k=0;k<10;k++){image[k]=new ImageIcon("picture/"+k+".png"); //获取图片}picture=new Image[]{image[0].getImage(),image[1].getImage(),image[2].getImage(),image[3].getImage(),image[4].getImage(),image[5].getImage(),image[6].getImage(),image[7].getImage(),image[8].getImage(),image[9].getImage()};this.setFocusable(true);this.addKeyListener((KeyListener)this);setSize(640,640);setVisible(true);}//判断是否通关(方法是,检查地图中是否还有箱子编号4)public Boolean pass(){int p=0;for(int i=0;i<15;i++)for(int j=0;j<15;j++){if(map[i][j]==4) p++;}if(p==0) return true;else return false;}//获取地图上每个位置所对应的图片编号public void getmap(int[][] map){for(int i=0;i<15;i++)for(int j=0;j<15;j++)map[i][j]=map_level.map[i][j];manX=map_level.manX;manY=map_level.manY;}public void paint(Graphics g){super.paint(g);//提示信息back_stack.push(Down + 5); //这里是一个细节,先将“DOWN”存入栈g.drawString(current_level,500,90);g.drawString("第"+step+"步",400,90);g.drawString("用键盘上的R重新开始,Q退出游戏",200,565);g.drawString("用键盘pageup,pagedown切换关卡",200,580);g.drawString("用键盘上的上下左右键控制人的移动",200,600);g.drawString("用键盘上的Backspace键后退",200,620);//在面板上画地图for (int i = 0; i < 15; i++)for (int j = 0; j < 15; j++)g.drawImage(picture[map[i][j]],100+30*j,100+30*i, this);}public void Step(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step++;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void move(int dir, Graphics g){int man = dir + 5;int dx = dir_x[dir];int dy = dir_y[dir];int x = manX;int y = manY;manX += dx;manY += dy;int origin_picture = map[manX][manY];int next_picture = map[manX + dx][manY + dy];if((map[manX][manY]==4||map[manX][manY]==3)&&(map[manX+dx][manY+dy]==2||map[ manX+dx][manY+dy]==4||map[manX+dx][manY+dy]==3)) //上面是箱子,箱子上面是墙或箱子{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==2) //上面是墙{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==1||map[manX][manY]==9){ //人上面是草地或是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==1){//上面是箱子,箱子上面是草地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[4],100+30*(manY+dy),(manX+dx)*30+100,this); //草地位置变箱子map[manX+dx][manY+dy]=4;Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==9){ //上面是箱子,箱子上面是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;else map[manX][manY]=0;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else { //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[3],100+30*(manY+dy),(manX+dx)*30+100,this); //目的地位置变箱子map[manX+dx][manY+dy]=3;Step(g);}back_stack.push(next_picture);back_stack.push(origin_picture);back_stack.push(manY);back_stack.push(manX);back_stack.push(man);if(pass())JOptionPane.showMessageDialog(null, "恭喜你过关了!"); }//键盘事件public void keyPressed(KeyEvent e) {Graphics g=getGraphics();int dir ;switch(e.getKeyCode()){case KeyEvent.VK_UP:dir = Up;move(dir, g);break;case KeyEvent.VK_DOWN :dir = Down;move(dir, g);break;case KeyEvent.VK_LEFT:dir = Left;move(dir, g);break;case KeyEvent.VK_RIGHT:dir = Right;move(dir, g);break;case KeyEvent.VK_BACK_SPACE:back.doClick();break;case KeyEvent.VK_PAGE_DOWN :next.doClick();break;case KeyEvent.VK_PAGE_UP:previous.doClick();break;case KeyEvent.VK_R:restart.doClick();break;case KeyEvent.VK_Q :exit.doClick();break;}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}//悔步后退public void step_back(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step--;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void Back(){if(back_stack.size()==2)return;int dir=back_stack.pop() - 5; //获取上一步的方向int s = back_stack.pop();int t = back_stack.pop();int origin_picture = back_stack.pop();int netx_picture = back_stack.pop();int pre_dir = back_stElement();Graphics g=getGraphics();int dx = dir_x[dir];int dy = dir_y[dir];g.drawImage(picture[origin_picture],100+30*t,100+30*s,this);g.drawImage(picture[netx_picture],100+30*(t+dy),100+30*(s+dx),this);g.drawImage(picture[pre_dir],100+30*(t-dy),100+30*(s-dx),this);manX = s - dx;manY = t - dy;map[s][t] = origin_picture;map[s+dx][t+dy] = netx_picture;map[s-dx][t-dy] = pre_dir;step_back(g);}//按钮事件监听public void actionPerformed(ActionEvent e) {if(e.getSource()==restart){ //重新开始back_stack.clear(); //清空路径栈step=0;getmap(map);repaint();}else if(e.getSource()==exit) //退出游戏this.setVisible(false);else if(e.getSource()==next){ //下一关back_stack.clear();step=0;level++;if(level!=14){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==previous){ //上一关back_stack.clear();step=0;level--;if(level!=0){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==back)Back();requestFocus();}}3、开始界面package box;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Game extends JFrame implements ActionListener{ Image image[];ImageIcon icon;JButton start,tip,exit;Container c;public Game(){super("推箱子");c=getContentPane();FlowLayout layout=new FlowLayout();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER);icon=new ImageIcon("picture/game.png");image=new Image[]{icon.getImage()};start=new JButton("开始游戏");exit=new JButton("退出游戏");tip=new JButton("游戏说明");c.add(start);c.add(tip);c.add(exit);start.addActionListener(this);tip.addActionListener(this);exit.addActionListener(this);setSize(640,480);setVisible(true);}public void paint(Graphics g){super.paint(g);g.drawImage(image[0],10,65,this);}public static void main(String args[]){Game g=new Game();g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==exit)this.setVisible(false);if(e.getSource()==start){this.setVisible(false);pushbox c=new pushbox();}if(e.getSource()==tip){String t="本游戏分为13关,难度逐关递增,可以自己选关";JOptionPane.showMessageDialog(null, t);}}}。

推箱子代码

推箱子代码

推箱子代码#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;iomanip&gt;using namespace std;/*r 目的地O 箱子I 人X 墙路(空格)W 上A 左D 右S 下*/void menu();int level1();int level2();void swap();int opera();void dituprint();void menu(){cout&lt;&lt;&quot; 推箱子&quot;&lt;&lt;endl;cout&lt;&lt;&quot; 1.新游戏 2.选关&quot;&lt;&lt;endl;cout&lt;&lt;&quot; 0.退出&quot;&lt;&lt;endl;}void xuanguan(){int choice_level;while(1){cout&lt;&lt;&quot;请选择关卡:&quot;&lt;&lt;endl;cin&gt;&gt;choice_level;switch(choice_level){case 1:level1();break;case 2:level2();break;default:cout&lt;&lt;&quot;输入有误请重新选择关卡!&quot;;}}}void swap(char *a,char *b){system(&quot;cls&quot;);char ch;ch=*a;*a=*b;*b=ch;}void dituprint(char *p){//system(&quot;cls&quot;);for(int i=0;i&lt;9;i++){for(int j=0;j&lt;9;j++)cout&lt;&lt;setw(2)&lt;&lt;p[i*9+j];cout&lt;&lt;endl;}}int opera(char *p,int *ren,int xzs) //xzs 箱子数ren 存有人与箱子目标的位置{dituprint(p);while(1){while(1){for(int i=1,panduan=0;i&lt;=xzs;i++){if(p[ren[i]]==&#39;O&#39;){panduan+=1;cout&lt;&lt;&quot;panduan=&quot;&lt;&lt;panduan&lt;&lt;endl;} //判断当前有几个已经推到目的地了if(panduan==xzs){cout&lt;&lt;&quot;恭喜你过关啦!&quot;;getchar();return 0;}}char ch;cout&lt;&lt;&quot;你的按键为:&quot;;cin&gt;&gt;ch;switch(ch){case &#39;w&#39;:{if(p[ren[0]]==&#39;r&#39;) //当前人所在的位置为箱子最终要到的目的地的话{if(p[ren[0]-9]==&#39;r&#39;) //要移到的位置是箱子最终目的地{ren[0]-=9;p[ren[0]]=&#39;I&#39;;p[ren[0]+9]=&#39;r&#39;;break;}if(p[ren[0]-9]==&#39;X&#39;) //碰到墙了{cout&lt;&lt;&quot;人碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]-9]==&#39; &#39;) //可以通过{ren[0]-=9;p[ren[0]]=&#39;I&#39;;p[ren[0]-9]=&#39;r&#39;;break;}if(p[ren[0]-9]==&#39;O&#39;) //碰到箱子{if(p[ren[0]-18]==&#39;X&#39;||&#39;O&#39;)cout&lt;&lt;&quot;箱子碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break;if(p[ren[0]-18]==&#39;r&#39;)p[ren[0]-18]=&#39;O&#39;;p[ren[0]-9]=&#39;I&#39;;p[ren[0]]=&#39;r&#39;;ren[0]-=9;break;}if(p[ren[0]-18]==&#39;O&#39;)cout&lt;&lt;&quot;推不动哎换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break; if(p[ren[0]-18]==&#39; &#39;){swap(p[ren[0]-9],p[ren[0]-18]);swap(p[ren[0]],p[ren[0]-9]);p[ren[0]]=&#39;r&#39;;ren[0]-=9;break;}}}else{if(p[ren[0]-9]==&#39;X&#39;){cout&lt;&lt;&quot;人碰到墙了换其他按键哇2&gt;&gt;&gt;&gt;&gt;&quot;;break;}if(p[ren[0]-9]==&#39; &#39;){swap(p[ren[0]],p[ren[0]-9]);ren[0]-=9;break;}if(p[ren[0]-9]==&#39;O&#39;){//遇到箱子代码if(p[ren[0]-18]==&#39;O&#39;||p[ren[0]-18]==&#39;X&#39;){cout&lt;&lt;&quot;走不动了换按其他键哇.......&quot;&lt;&lt;endl;break;if(p[ren[0]-18]==&#39;r&#39;){p[ren[0]-18]=&#39;O&#39;;p[ren[0]-9]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]-=9;break;}if(p[ren[0]-18]==&#39; &#39;){p[ren[0]-18]=&#39;O&#39;;p[ren[0]-9]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]-=9;break;}}}}break;case &#39;a&#39;:{if(p[ren[0]]==&#39;r&#39;) //当前人所在的位置为箱子最终要到的目的地的话{if(p[ren[0]-1]==&#39;r&#39;) //要移到的位置是箱子最终目的地{ren[0]-=1;p[ren[0]]=&#39;I&#39;;p[ren[0]+1]=&#39;r&#39;;break;}if(p[ren[0]-1]==&#39;X&#39;) //碰到墙了{cout&lt;&lt;&quot;人碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]-1]==&#39; &#39;) //可以通过{p[ren[0]]=&#39;I&#39;;p[ren[0]+9]=&#39;r&#39;;break;}if(p[ren[0]-1]==&#39;O&#39;) //碰到箱子{if(p[ren[0]-2]==&#39;X&#39;||&#39;O&#39;)cout&lt;&lt;&quot;箱子碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break;if(p[ren[0]-2]==&#39;r&#39;){p[ren[0]-2]=&#39;O&#39;;p[ren[0]-1]=&#39;I&#39;;p[ren[0]]=&#39;r&#39;;ren[0]-=1;break;}if(p[ren[0]-2]==&#39;O&#39;)cout&lt;&lt;&quot;推不动哎换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break; if(p[ren[0]-2]==&#39; &#39;){swap(p[ren[0]-1],p[ren[0]-2]);swap(p[ren[0]],p[ren[0]-1]);p[ren[0]]=&#39;r&#39;;ren[0]-=1;break;}}}else{if(p[ren[0]-1]==&#39;X&#39;){cout&lt;&lt;&quot;人碰到墙了换其他按键哇2&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]-1]==&#39; &#39;){swap(p[ren[0]],p[ren[0]-1]);break;}if(p[ren[0]-1]==&#39;O&#39;){//遇到箱子代码if(p[ren[0]-2]==&#39;O&#39;||p[ren[0]-2]==&#39;X&#39;){cout&lt;&lt;&quot;走不动了换按其他键哇.......&quot;&lt;&lt;endl;break;}if(p[ren[0]-2]==&#39;r&#39;){p[ren[0]-2]=&#39;O&#39;;p[ren[0]-1]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]-=1;break;}if(p[ren[0]-2]==&#39; &#39;){p[ren[0]-2]=&#39;O&#39;;p[ren[0]-1]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]-=1;break;}}}}break;case &#39;s&#39;:{if(p[ren[0]]==&#39;r&#39;) //当前人所在的位置为箱子最终要到的目的地的话{if(p[ren[0]+9]==&#39;r&#39;) //要移到的位置是箱子最终目的地{ren[0]+=9;p[ren[0]]=&#39;I&#39;;p[ren[0]-9]=&#39;r&#39;;break;}if(p[ren[0]+9]==&#39;X&#39;) //碰到墙了{cout&lt;&lt;&quot;人碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]+9]==&#39; &#39;) //可以通过{ren[0]+=9;p[ren[0]]=&#39;I&#39;;p[ren[0]+9]=&#39;r&#39;;break;}if(p[ren[0]+9]==&#39;O&#39;) //碰到箱子{if(p[ren[0]+18]==&#39;X&#39;||&#39;O&#39;)cout&lt;&lt;&quot;箱子碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break;if(p[ren[0]+18]==&#39;r&#39;){p[ren[0]+18]=&#39;O&#39;;p[ren[0]+9]=&#39;I&#39;;p[ren[0]]=&#39;r&#39;;ren[0]+=9;break;}if(p[ren[0]+18]==&#39;O&#39;)cout&lt;&lt;&quot;推不动哎换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break; if(p[ren[0]+18]==&#39; &#39;){swap(p[ren[0]+9],p[ren[0]+18]);swap(p[ren[0]],p[ren[0]-9]);p[ren[0]]=&#39;r&#39;;ren[0]+=9;break;}}else{if(p[ren[0]+9]==&#39;X&#39;){cout&lt;&lt;&quot;人碰到墙了换其他按键哇2&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]+9]==&#39; &#39;){swap(p[ren[0]],p[ren[0]+9]);ren[0]+=9;break;}if(p[ren[0]+9]==&#39;O&#39;){//遇到箱子代码if(p[ren[0]+18]==&#39;O&#39;||p[ren[0]+18]==&#39;X&#39;){cout&lt;&lt;&quot;走不动了换按其他键哇.......&quot;&lt;&lt;endl; break;}if(p[ren[0]+18]==&#39;r&#39;){p[ren[0]+18]=&#39;O&#39;;p[ren[0]+9]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]+=9;break;}if(p[ren[0]+18]==&#39; &#39;){p[ren[0]+18]=&#39;O&#39;;p[ren[0]+9]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]+=9;break;}}}}break;case &#39;d&#39;:{if(p[ren[0]]==&#39;r&#39;) //当前人所在的位置为箱子最终要到的目的地的话{if(p[ren[0]+1]==&#39;r&#39;) //要移到的位置是箱子最终目的地{ren[0]+=1;p[ren[0]]=&#39;I&#39;;p[ren[0]-1]=&#39;r&#39;;break;}if(p[ren[0]+1]==&#39;X&#39;) //碰到墙了{cout&lt;&lt;&quot;人碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]+1]==&#39; &#39;) //可以通过{ren[0]+=1;p[ren[0]]=&#39;I&#39;;p[ren[0]+1]=&#39;r&#39;;break;}if(p[ren[0]+1]==&#39;O&#39;) //碰到箱子{if(p[ren[0]+2]==&#39;X&#39;||&#39;O&#39;)cout&lt;&lt;&quot;箱子碰到墙了换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break;if(p[ren[0]+2]==&#39;r&#39;){p[ren[0]+2]=&#39;O&#39;;p[ren[0]+1]=&#39;I&#39;;p[ren[0]]=&#39;r&#39;;ren[0]+=1;break;}if(p[ren[0]+2]==&#39;O&#39;)cout&lt;&lt;&quot;推不动哎换其他按键1哇&gt;&gt;&gt;&gt;&gt;&quot;;break; if(p[ren[0]+2]==&#39; &#39;){swap(p[ren[0]+1],p[ren[0]+2]);swap(p[ren[0]],p[ren[0]-1]);p[ren[0]]=&#39;r&#39;;ren[0]+=1;break;}}}else{if(p[ren[0]+1]==&#39;X&#39;){cout&lt;&lt;&quot;人碰到墙了换其他按键哇2&gt;&gt;&gt;&gt;&gt;&quot;; break;}if(p[ren[0]+1]==&#39; &#39;){swap(p[ren[0]],p[ren[0]+1]);ren[0]+=1;break;}if(p[ren[0]+1]==&#39;O&#39;){//遇到箱子代码if(p[ren[0]+2]==&#39;O&#39;||p[ren[0]+2]==&#39;X&#39;){cout&lt;&lt;&quot;走不动了换按其他键哇.......&quot;&lt;&lt;endl; break;}if(p[ren[0]+2]==&#39;r&#39;){p[ren[0]+2]=&#39;O&#39;;p[ren[0]+1]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]+=1;break;}if(p[ren[0]+2]==&#39; &#39;){p[ren[0]+2]=&#39;O&#39;;p[ren[0]+1]=&#39;I&#39;;p[ren[0]]=&#39; &#39;;ren[0]+=1;break;}}}}break;default:cout&lt;&lt;&quot;操作错误!请确认后再重新操作.......&quot;&lt;&lt;endl; }dituprint(p);}/*int panduan=0;for(int i=1;i&lt;xzs;i++){if(p[ren[i]]==&#39;O&#39;)panduan++;}if(panduan=(xzs-1)){getchar();break;}*/}return 0;}int level1(){cout&lt;&lt;&quot;第一关&quot;&lt;&lt;endl;char ditu1[9*9]={&#39;0&#39;,&#39;1&#39;,&#39;2&#39;,&#39;3&#39;,&#39;4&#39;,&#39;5&#39;, &#39;6&#39;,&#39;7&#39;,&#39;8&#39;,&#39;1&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;2&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;r&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;3&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;4&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;O&#39;,&#39;&#39;,&#39;O&#39;,&#39;r&#39;,&#39;X&#39;,&#39;5&#39;,&#39;X&#39;,&#39;r&#39;,&#39;&#39;,&#39;O&#39;,&#39;I&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;6&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;O&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39;7&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;r&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39;8&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;};int ren1[5]={50,22,47,43,68};opera(ditu1,ren1,4);level2();return 0;}int level2(){cout&lt;&lt;&quot; 欢迎来到第二关&quot;&lt;&lt;endl;char ditu1[9*9]={&#39;0&#39;,&#39;1&#39;,&#39;2&#39;,&#39;3&#39;,&#39;4&#39;,&#39;5&#39;, &#39;6&#39;,&#39;7&#39;,&#39;8&#39;,&#39;1&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;2&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;r&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;3&#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;4&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;O&#39;,&#39;&#39;,&#39;O&#39;,&#39;r&#39;,&#39;X&#39;,&#39;5&#39;,&#39;X&#39;,&#39;r&#39;,&#39;&#39;,&#39;O&#39;,&#39;I&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;6&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39;O&#39;, &#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39;7&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;r&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;,&#39;8&#39;,&#39; &#39;,&#39; &#39;,&#39; &#39;,&#39;X&#39;,&#39;X&#39;,&#39;X&#39;,&#39; &#39;,&#39; &#39;};int ren1[5]={50,22,47,43,68};opera(ditu1,ren1,4);level1();return 0;}int main(){int choice;menu();while(1){cin&gt;&gt;choice;switch(choice){case 0:exit(0);case 1:{level1();break;}case 2:{xuanguan();break;}default:{cout&lt;&lt;&quot;操作错误!请确认正确后操作.......&quot;&lt;&lt;endl; }}}getchar();return 0;}。

java_推箱子讲解

java_推箱子讲解

总共四个包,因为不能上传图片所以在第2个包中,导入图片(图片可以去网上下载一些)或者高手帮我解决一下。

不用导入图片也能玩!(求大神)下面是整个游戏的代码:1:package com.sj.xzq;class BackUpInfo {private int[][] map;private int manX;private int manY;public BackUpInfo(int[][] map, int manX, int manY) {this.map = map;this.manX = manX;this.manY = manY;}public int[][] getMap() {return map;}public int getManX() {return manX;}public int getManY() {return manY;}}2:package com.sj.xzq;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Stack;import javax.swing.JOptionPane;import javax.swing.JPanel;public class Game extends JPanel {private LoadMap lm;private int level;private int manX, manY;private int lastImg = 2;private int[][] map; // 地图所对应的二维数组private int[][] backMap; // 地图所对应的二维数组,这个数组用于保存上一步的地图信息private static final int LEN = 30; // 图片的长private static final int WIDTH = 30; // 图片的宽private static final int SPEED = 30; // 移动速度,每次移动一格private static Toolkit tk = Toolkit.getDefaultToolkit();private static Image[] imgs = null;private Stack<BackUpInfo> myStack = new Stack<BackUpInfo>();private BackUpInfo bp;static {imgs = new Image[] {tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/0.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/1.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/2.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/3.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/4.gif")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/5.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/6.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/7.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/8.GIF")),tk.getImage(GameFrame.class.getClassLoade r().getResource("imgs/9.GIF")) };}public Game(int level) {this.setBounds(0, 0, 600, 600);this.setVisible(true);lm = new LoadMap(level);map = lm.getMap();this.manX = lm.getManX();this.manY = lm.getManY();this.level = level;}public void paint(Graphics g) {for (int i = 0; i < 20; i++) {for (int j = 0; j < 20; j++) {g.drawImage(imgs[map[i][j]], i * LEN, j * WIDTH, this);}}g.setColor(Color.BLUE);g.setFont(new Font("仿宋", Font.BOLD, 18));g.drawString("关卡:" + level, 50, 50);}// 响应键盘事件,松开键盘才响应// 上下左右四个键,实现人物的移动。

推箱子代码

推箱子代码

import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.io.*;import javax.sound.midi.*;import java.util.Stack;public class Tuixiangzi{public static void main(String[] args){new mainFrame();}}class mainFrame extends JFrame implements ActionListener,ItemListener{JLabel lb;JLabel lb2;JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanel panel;Sound sound;JComboBox jc=new JComboBox();MenuItem renew=new MenuItem(" 重新开始");MenuItem back=new MenuItem(" 悔一步");MenuItem last=new MenuItem(" 上一关");MenuItem next=new MenuItem(" 下一关");MenuItem choose=new MenuItem(" 选关");MenuItem exit=new MenuItem(" 退出");MenuItem qin=new MenuItem(" 琴萧合奏");MenuItem po=new MenuItem(" 泡泡堂");MenuItem guang=new MenuItem(" 灌篮高手");MenuItem nor=new MenuItem(" 默认");MenuItem eye=new MenuItem(" eyes on me");MenuItem about=new MenuItem(" 关于推箱子...");mainFrame(){super("推箱子v2.0");setSize(720,720);setVisible(true);setResizable(false);setLocation(300,20);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.black);Menu choice=new Menu(" 选项");choice.add(renew);choice.add(last);choice.add(next);choice.add(choose);choice.add(back);choice.addSeparator();choice.add(exit);renew.addActionListener(this);last.addActionListener(this);next.addActionListener(this);choose.addActionListener(this);exit.addActionListener(this);back.addActionListener(this);Menu setmuc=new Menu(" 设置音乐");setmuc.add(nor);setmuc.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add(eye);nor.addActionListener(this);qin.addActionListener(this);po.addActionListener(this);guang.addActionListener(this);eye.addActionListener(this);Menu help=new Menu(" 帮助");help.add(about);about.addActionListener(this);MenuBar bar=new MenuBar();bar.add(choice);bar.add(setmuc);bar.add(help);setMenuBar(bar);nor.setEnabled(false);lb=new JLabel("JA V A推箱子v2.0版!!!提供友情下载。

基于java的推箱子游戏(含源文件)

基于java的推箱子游戏(含源文件)

基于JAVA的推箱子游戏前言在这个充满竞争的社会里,随着生活节奏的不断加快,人们的生活水平越来越繁忙,因此,越来越多人感到无比的烦躁与巨大的压力,这些压力也带给人们诸多烦恼。

所以如何解除现代人的生活压力,释放心中苦闷已经成为现代人的共同心愿。

而本次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于EditPlus编译器,为大家开发了一款适合的、休闲娱乐的游戏,在娱乐的同时也给忙碌的上班族们开拓了另一个思考问题的空间。

基于JAVA的推箱子小游戏主要分为初始化模块,画图模块,移动小人模块,移动箱子模块以及功能控制模块。

玩家是通过控制小人的移动来推动箱子,需要避过障碍物与死角才能将其推放到指定位置从而达到过关的目的。

每关的难易程度各异,不仅适合人们休闲娱乐,还有助于开发智力,提高人们思考问题能力与想象能力,改善思考方式,拓展思维。

关键词:JAVA;解压;推箱子;休闲娱乐AbstractIn this competitive society, along with the accelerating pace of life, people's living standard more and busier, therefore, more and more people feel very upset and enormous pressure, the pressure also gives people a lot of trouble. So how to relieve the pressure of modern life, release the pain has become the common aspiration of the people. But this time based on the JAVA Push Box Game is the use of JAVA language and the combination of EditPlus compiler; we developed a suitable, recreational game, in the entertainment but also for busy office workers to develop another thinking space.Based on the JAVA Push Box Game consists of initialization module, drawing module, mobile SIM module, mobile box module and control module. Game player is controlled through a small mobile drive box, need to avoid obstacles and dead angle can be pushed into the specified location so as to achieve the purpose of clearance. Each level of difficulty degree is different, not only for recreation, also contribute to the development of intelligence, improve people's thinking ability and imagination ability, improve the way of thinking, the development of thinking.Key Words:JAVA; Relieve pressure; Push box; Recreation and entertainment目录前言............................................................................................................................................. I Abstract ..................................................................................................................................... II 1.可行性研究 (2)1.1设计目的 (2)1.2可行性研究前提 (2)1.3可行性分析 (2)1.4结论意见 (3)2.需求分析 (3)2.1引言 (3)2.2游戏需求 (3)2.3软硬件需求 (4)硬件环境需求: (4)软件环境: (4)2.4接口控制 (4)2.5方案论证 (4)2.5.1.C++语言的优点 (4)2.5.2.Java语言的优点 (5)2.5.3.方案选择 (6)3.概要设计 (7)3.1游戏设计分析 (7)3.3.1.地图文件的引用 (7)3.3.2.程序运逻辑 (7)3.3.3.绘图 (7)3.3.4.显示平台 (7)3.2 注意事项 (8)3.3 游戏流程图 (8)4.详细设计 (9)4.1游戏总体结构与代码 (9)结论 (20)参考文献 (21)致谢 (22)引言在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。

推箱子

推箱子

import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import javax.imageio.*;//Class GamePanel//The main class of the gameclass GamePanel extends JPanel implements KeyListener{private static final long serialVersionUID = 1L;private char[][] map; //Map stateprivate char[][] box;private int sX,sY; //Map sizeprivate Point player,p; //Point of playerprivate int Num=0; //Number of boxsprivate Point[] boxs; //Points of boxs;//private Point[] trg; //Points of target//private Point[] path;//private int steps;private Point[] dir;private int size;private Image imgfloor;private Image imgwall;private Image imgplayer;private Image imgbox1;private Image imgbox2;private Image imgtrg;//methodpublic GamePanel(char b[][],int w,int h,int size)throws Exception {sX = b.length;sY = b[0].length;Num = 0;map = new char[sX][sY];box = new char[sX][sY];player= new Point();p = new Point();boxs= new Point[sX*sY];dir = new Point[4];dir[0]= new Point(0,-1); //leftdir[1]= new Point(-1,0); //updir[2]= new Point(0, 1); //rightdir[3]= new Point(1, 0); //downFile parent = new File("E:/My Document/我的大学/JA V A/工作区/Program/src/images/");imgfloor = ImageIO.read(new File(parent,"Box_floor.gif"));imgwall = ImageIO.read(new File(parent,"Box_wall.gif"));imgplayer= ImageIO.read(new File(parent,"Box_player.gif"));imgtrg = ImageIO.read(new File(parent,"Box_trg.gif"));imgbox1 = ImageIO.read(new File(parent,"Box_box1.gif"));imgbox2 = ImageIO.read(new File(parent,"Box_box2.gif"));this.size=size;//set Mapfor(int i=0;i<sX;i++){for(int j=0;j<sY;j++){switch(b[i][j]){case 'P': //Playermap[i][j]='.';p.setLocation(i, j);break;case 'X': //Targetmap[i][j]='X';break;case 'B': //Boxmap[i][j]='.';boxs[Num++]=new Point(i, j);break;case '#': //Wallmap[i][j]='#';break;case '.': //floormap[i][j]='.';break;default :map[i][j]='.';}}}//end set Mapreset(); //reset Game}public void reset(){player.setLocation(p);for(int i=0;i<sX;i++)for(int j=0;j<sY;j++)box[i][j]=' ';for(int i=0;i<Num;i++)box[boxs[i].x][boxs[i].y]='B';//steps=0;repaint();}public void undo(){}public boolean judge(){for(int i=0;i<sX;i++)for(int j=0;j<sY;j++)if(box[i][j]=='B'&&map[i][j]!='X')return false;return true;}public void paint(Graphics g){//draw mapfor(int i=0;i<sX;i++){for(int j=0;j<sY;j++){switch(map[i][j]){case '.':g.drawImage(imgfloor, j*size, i*size, null);break;case '#':g.drawImage(imgwall, j*size, i*size, null);break;case 'X':g.drawImage(imgfloor, j*size, i*size, null);}if(box[i][j]=='B'&&map[i][j]=='X') g.drawImage(imgbox2, j*size, i*size, null);else if(box[i][j]=='B') g.drawImage(imgbox1, j*size, i*size, null);else if(map[i][j]=='X') g.drawImage(imgtrg, j*size, i*size, null);}}//draw playerg.drawImage(imgplayer, player.y*size, player.x*size, null);g.drawRect(0, 0, sY*size, sX*size);//get Focusthis.requestFocusInWindow(); /* ********* */}/* methods of KeyListener */public void keyPressed(KeyEvent e){int x=player.x;int y=player.y;int k,x0,y0;k=e.getKeyCode()-37;if(k<0||k>=4) return;x+=dir[k].x;y+=dir[k].y;if(x<0||x>=sX||y<0||y>=sY) return;if(map[x][y]=='#') return;if(box[x][y]!='B'&&(map[x][y]=='.'||map[x][y]=='X')){player.x=x;player.y=y;}if(box[x][y]=='B'){x0=x+dir[k].x;y0=y+dir[k].y;if(x0<0||y0<0||x0>=sX||y0>=sY) return;if(map[x0][y0]!='#'&&box[x0][y0]!='B'){box[x][y]=' ';box[x0][y0]='B';player.x=x;player.y=y;}}repaint();if(judge()){JOptionPane.showMessageDialog(null,"You win!");reset();}}public void keyReleased(KeyEvent e){}public void keyTyped(KeyEvent e){}}//Class PushBox//Creat JFrame to Play the gamepublic class PushBox extends JFrame{private static final long serialVersionUID = 1L;private JPanel top;private GamePanel center;private JPanel bottom;private JButton breset; //Button of resetprivate JButton bundo; //Button of undoprivate int width,height,size;private int sX,sY;//method of constitutionpublic PushBox(char[][] b)throws Exception{super("PushBox Game");//set Windowsize=35;sX=b.length;sY=b[0].length;width=size*sY+10;height=size*sX+100;top = new JPanel();center = new GamePanel(b,width,height-100,size); //Panel of Game bottom = new JPanel();breset = new JButton("Reset");bundo = new JButton("←Undo");//add Listenercenter.addKeyListener(center);breset.addActionListener(new ResetListener());bundo.addActionListener(new UndoListener());top.add(breset);//top.add(bundo);add(top,"North");add(center,"Center");add(bottom,"South");setSize(width,height);setVisible(true);}//classes of Listenerclass ResetListener implements ActionListener{public void actionPerformed(ActionEvent e){center.reset();}}class UndoListener implements ActionListener{public void actionPerformed(ActionEvent e){center.undo();}}//method mainpublic static void main(String[] args)throws Exception{char[][] b=new char[5][6];b[0]="##X##P".toCharArray();b[1]="##.##.".toCharArray();b[2]=".B.#..".toCharArray();b[3]="X..B..".toCharArray();b[4]="##....".toCharArray();PushBox p=new PushBox(b);p.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一个Java文件:package xiaoA;import java.awt.Color;import java.awt.HeadlessException;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;public class GameFrame extends JFrame {JPanel zhuobu = new JPanel();//工人JLabel worker = null;//箱子JLabel box = null;//目的地JLabel goal = null;JLabel[] walls = null;public static final int SPEED = 12;//设置图片大小int imgSize = 48;public void setImgSize(int imgSize){this.imgSize = imgSize;}public GameFrame(String title) throws HeadlessException { super(title);//构造方法中调用本类的其它方法this.initContentPane();this.addKeyListener(new KeyListener() {//键盘按下事件public void keyPressed(KeyEvent e) {//[2.5] 使工人可以移动int xSpeed = 0, ySpeed = 0;switch (e.getKeyCode()) {case KeyEvent.VK_LEFT :xSpeed = -SPEED;worker.setIcon(new ImageIcon("image/workerUp.gif"));break;case KeyEvent.VK_RIGHT :xSpeed = SPEED;worker.setIcon(new ImageIcon("image/workerUp.gif"));break;case KeyEvent.VK_UP :ySpeed = -SPEED;worker.setIcon(new ImageIcon("image/workerUp.gif"));break;case KeyEvent.VK_DOWN :ySpeed = SPEED;worker.setIcon(new ImageIcon("image/workerUp.gif"));break;default:return;}worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight());//[2.7] 判断工人是否撞到墙壁for (int i = 0; i < walls.length; i++) {if(worker.getBounds().intersects(walls[i].getBounds())) {worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());}}//[3.2] 使工人可以推动箱子if (worker.getBounds().intersects(box.getBounds())) {box.setBounds(box.getX() + xSpeed, box.getY() + ySpeed, box.getWidth(), box.getHeight());//[3.3] 判断箱子是否撞到墙壁for (int i = 0; i < walls.length; i++) {if (box.getBounds().intersects(walls[i].getBounds())) {worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());box.setBounds(box.getX() - xSpeed, box.getY() - ySpeed, box.getWidth(), box.getHeight());}}//[3.4] 判断是否胜利if (box.getX()==goal.getX() && box.getY()==goal.getY()) { JOptionPane.showMessageDialog(null, "您赢啦!");}}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}});}/***设置内容面板*/public void initContentPane() {zhuobu.setBackground(Color.red);zhuobu.setLayout(null);//调用父类的属性和方法super.setContentPane(zhuobu);}/***把某个图片以组件的方式加入窗体*@param imgPath图片路径*@param x x*@param y y*@param width宽度*@param height高度*@return添加完的组件*/public void addComponent(int tag, String imgPath, int x, int y) { ImageIcon img = new ImageIcon(imgPath);//创建JLabel并把ImageIcon通过构造方法传参传入//把食物放到盘子里JLabel componet = new JLabel(img);//设置盘子在桌布上的位置和大小componet.setBounds(x, y, imgSize, imgSize);//把盘子放到桌布上zhuobu.add(componet);switch (tag) {case 1:box = componet;break;case 2:goal = componet;break;case 3:worker = componet;break;}}public void addWall(String imgPath, int[][] loactions) { ImageIcon wallImg = new ImageIcon(imgPath);walls = new JLabel[66 + loactions.length];for (int i = 0; i < walls.length; i++) {//创建没每一个围墙,他们使用的是同一个图片walls[i] = new JLabel(wallImg);}for (int i = 0; i < walls.length; i++) {//创建没每一个围墙,他们使用的是同一个图片walls[i] = new JLabel(wallImg);}int index = 0;/*分别设置各个图片位置*/for (int i = 0; i < 14; i++) {//左边墙walls[index].setBounds(0, i * imgSize, imgSize, imgSize);zhuobu.add(walls[index]);index++;//右边墙walls[index].setBounds(20 * imgSize, i * imgSize, imgSize, imgSize);zhuobu.add(walls[index]);index++;}for (int i = 0; i < 19; i++) {//上边墙walls[index].setBounds((i + 1) * imgSize, 0, imgSize, imgSize);zhuobu.add(walls[index]);index++;//下边墙walls[index].setBounds((i + 1) * imgSize, 13 * imgSize, imgSize, imgSize);zhuobu.add(walls[index]);index++;}//添加中间障碍耦合解耦for (int i = 0; i < loactions.length; i++) {walls[index].setBounds(loactions[i][0]* imgSize, loactions[i][1]* imgSize, imgSize, imgSize);zhuobu.add(walls[index]);index++;}}}第二个Java文件:public class Run {public static void main(String[] args) {GameFrame gameFrame = new GameFrame("推箱子游戏…");//设置大小gameFrame.setBounds(100, 50, 21 * 48 + 5, 14 * 48 + 25);//窗体大小不可变gameFrame.setResizable(false);gameFrame.setImgSize(48);gameFrame.addComponent(3, "workerUp.png", 400, 100);gameFrame.addComponent(1, "box.png", 160, 60);gameFrame.addComponent(2, "goal.png", 80, 520);int[][] wallLocations ={{4, 5},{5, 5},{6, 5},{7, 5},{8, 5},{9, 5},{10, 5},{6, 8},{7, 8},{8, 8},{9, 8},{10, 8},{11, 5}};gameFrame.addWall("wall.png", wallLocations);gameFrame.setVisible(true);}}。

相关文档
最新文档