java推箱子讲解.docx

上传人:b****8 文档编号:28277019 上传时间:2023-07-10 格式:DOCX 页数:20 大小:18.42KB
下载 相关 举报
java推箱子讲解.docx_第1页
第1页 / 共20页
java推箱子讲解.docx_第2页
第2页 / 共20页
java推箱子讲解.docx_第3页
第3页 / 共20页
java推箱子讲解.docx_第4页
第4页 / 共20页
java推箱子讲解.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

java推箱子讲解.docx

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

java推箱子讲解.docx

java推箱子讲解

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

不用导入图片也能玩!

(求大神)

下面是整个游戏的代码:

1:

packagecom.sj.xzq;

classBackUpInfo{

   privateint[][]map;

   privateintmanX;

   privateintmanY;

   publicBackUpInfo(int[][]map,intmanX,intmanY){

      this.map=map;

      this.manX=manX;

      this.manY=manY;

   }

   publicint[][]getMap(){

      returnmap;

   }

   publicintgetManX(){

      returnmanX;

   }

   publicintgetManY(){

      returnmanY;

   }

}

2:

packagecom.sj.xzq;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.awt.Image;

importjava.awt.Toolkit;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importjava.util.Stack;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

publicclassGameextendsJPanel{

   privateLoadMaplm;

   privateintlevel;

   privateintmanX,manY;

   privateintlastImg=2;

   privateint[][]map;//地图所对应的二维数组

   privateint[][]backMap;//地图所对应的二维数组,这个数组用于保存上一步的地图信息

   privatestaticfinalintLEN=30;//图片的长

   privatestaticfinalintWIDTH=30;//图片的宽

   privatestaticfinalintSPEED=30;//移动速度,每次移动一格

   privatestaticToolkittk=Toolkit.getDefaultToolkit();

   privatestaticImage[]imgs=null;

   privateStackmyStack=newStack();

   privateBackUpInfobp;

   static{

      imgs=newImage[]{

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/0.gif")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/1.gif")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/2.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/3.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/4.gif")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/5.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/6.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/7.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/8.GIF")),

            tk.getImage(GameFrame.class.getClassLoader().getResource(

                  "imgs/9.GIF"))};

   }

   publicGame(intlevel){

      this.setBounds(0,0,600,600);

      this.setVisible(true);

      lm=newLoadMap(level);

      map=lm.getMap();

      this.manX=lm.getManX();

      this.manY=lm.getManY();

      this.level=level;

   }

   publicvoidpaint(Graphicsg){

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

         for(intj=0;j<20;j++){

            g.drawImage(imgs[map[i][j]],i*LEN,j*WIDTH,this);

         }

      }

      g.setColor(Color.BLUE);

      g.setFont(newFont("仿宋",Font.BOLD,18));

      g.drawString("关卡:

"+level,50,50);

   }

   //响应键盘事件,松开键盘才响应

   //上下左右四个键,实现人物的移动。

   publicvoidkeyReleased(KeyEvente){

      intkeycode=e.getKeyCode();

      if(!

isPass()){

         switch(keycode){

         caseKeyEvent.VK_UP:

            moveUp();

            if(isPass()){

               myStack.clear();

               lm=newLoadMap(++level);

               map=lm.getMap();

               this.manX=lm.getManX();

               this.manY=lm.getManY();

            }

            break;

         caseKeyEvent.VK_DOWN:

            moveDown();

            if(isPass()){

               myStack.clear();

               lm=newLoadMap(++level);

               map=lm.getMap();

               this.manX=lm.getManX();

               this.manY=lm.getManY();

            }

            break;

         caseKeyEvent.VK_LEFT:

            moveLeft();

            if(isPass()){

               myStack.clear();

               lm=newLoadMap(++level);

               map=lm.getMap();

               this.manX=lm.getManX();

               this.manY=lm.getManY();

            }

            break;

         caseKeyEvent.VK_RIGHT:

            moveRight();

            if(isPass()){

               myStack.clear();

               lm=newLoadMap(++level);

               map=lm.getMap();

               this.manX=lm.getManX();

               this.manY=lm.getManY();

            }

            break;

         caseKeyEvent.VK_SPACE:

            back();

            break;

         default:

            break;

         }

      }

   }

   //实现人物的向上移动

   privatevoidmoveUp(){

      //如果下一步是目标或者是草地,则移动到下一步

      if(map[manX][manY-1]==2||map[manX][manY-1]==4){

         backMap=newint[20][20];

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

            }

         }

         bp=newBackUpInfo(backMap,manX,manY);

         myStack.push(bp);

         map[manX][manY]=lastImg;//先还原人物处的背景

         lastImg=map[manX][manY-1];//保存人物下一步位置的背景

         map[manX][manY-1]=8;//移动人物到下一步

         manY--;

         repaint();

      }elseif(map[manX][manY-1]==3||map[manX][manY-1]==9){

         backMap=newint[20][20];

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

            }

         }

         bp=newBackUpInfo(backMap,manX,manY);

         myStack.push(bp);

         //如果下一步是箱子

         if(map[manX][manY-2]==2){

            //箱子前面是草地

            map[manX][manY-2]=3;

            map[manX][manY]=lastImg;

            if(map[manX][manY-1]==3){

               lastImg=2;

            }else{

               lastImg=4;

            }

            map[manX][manY-1]=8;

            manY--;

            repaint();

         }elseif(map[manX][manY-2]==4){

            //箱子前面是目标

            map[manX][manY-2]=9;//把箱子移动到目标,换成另一种颜色的箱子

            map[manX][manY]=lastImg;

            if(map[manX][manY-1]==3){

               lastImg=2;

            }else{

               lastImg=4;

            }

            map[manX][manY-1]=8;

            manY--;

            repaint();

         }

      }

   }

   //实现人物的向下移动

   privatevoidmoveDown(){

      //如果下一步是目标或者是草地,则移动到下一步

      backMap=newint[20][20];

      if(map[manX][manY+1]==2||map[manX][manY+1]==4){

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

            }

         }

         bp=newBackUpInfo(backMap,manX,manY);

         myStack.push(bp);

         map[manX][manY]=lastImg;//先还原人物处的背景

         lastImg=map[manX][manY+1];//保存人物下一步位置的背景

         map[manX][manY+1]=5;//移动人物到下一步

         manY++;

         repaint();

      }elseif(map[manX][manY+1]==3||map[manX][manY+1]==9){

         backMap=newint[20][20];

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

            }

         }

         bp=newBackUpInfo(backMap,manX,manY);

         myStack.push(bp);

         //如果下一步是箱子

         if(map[manX][manY+2]==2){

            //箱子前面是草地

            map[manX][manY+2]=3;

            map[manX][manY]=lastImg;

            if(map[manX][manY+1]==3){

               lastImg=2;

            }else{

               lastImg=4;

            }

            map[manX][manY+1]=5;

            manY++;

            repaint();

         }elseif(map[manX][manY+2]==4){

            //箱子前面是目标

            map[manX][manY+2]=9;//把箱子移动到目标,换成另一种颜色的箱子

            map[manX][manY]=lastImg;

            if(map[manX][manY+1]==3){

               lastImg=2;

            }else{

               lastImg=4;

            }

            map[manX][manY+1]=5;

            manY++;

            repaint();

         }

      }

   }

   //实现人物的左移

   privatevoidmoveLeft(){

      //如果下一步是目标或者是草地,则移动到下一步

      if(map[manX-1][manY]==2||map[manX-1][manY]==4){

         backMap=newint[20][20];

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

            }

         }

         bp=newBackUpInfo(backMap,manX,manY);

         myStack.push(bp);

         map[manX][manY]=lastImg;//先还原人物处的背景

         lastImg=map[manX-1][manY];//保存人物下一步位置的背景

         map[manX-1][manY]=6;//移动人物到下一步

         manX--;

         repaint();

      }elseif(map[manX-1][manY]==3||map[manX-1][manY]==9){

         backMap=newint[20][20];

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

            for(intj=0;j<20;j++){

               backMap[i][j]=map[i][j];//保存上一步的地图信息

     

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

当前位置:首页 > 农林牧渔 > 林学

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

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