推箱子

推箱子代码由此开始:

aa.jpgqq.pngrenwu.jpgss.png
背景图片可自行选择(标准为1024*683像素)
代码已上传,地址http://download.csdn.net/download/assene/9901512
(代码源自传智播客)



package com.wuxian;
import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
/**
 * @author JPQ1
 */
//KeyListener 用于接收键盘事件(击键)的侦听器接口
public class Mymain extends Frame implements KeyListener{
     //设置窗口属性,构造方法,
    /*
     * 1显示页面frame
     * 2添加图片new ImageIcon() 
     * new JLabel各种调,设置窗口位置,设置大小,
     * 
     * */
    public Mymain() {
        //推的对象
        xianzi1();
        xianzi2();
        xianzi3();
        //添加显示的东西
        renwu();
         //黑框
        kuan1();
        kuan2();
        kuan3();
        //加载的墙体
        treeiod();
        //制作背景 UIbug:所有的添加,都放在窗体设置上
        background();
        //设置窗体
        setmain();
        //使窗口监督用户点击事件
         this.addKeyListener(this);
    }
    public void setmain(){
    //设置自由布局
    this.setLayout(null);
    //设置窗口大小
    this.setSize(920,590);
    //设置窗口位置
    this.setLocation(150,100);
    //设置窗口标题
    this.setTitle("推箱子   v1.0");
    //窗口显示
    this.setVisible(true);
    }

     private void background(){
         //加载图片
         Icon i=new ImageIcon("bg.jpg");
         JLabel lag=new JLabel(i);
         //设置要添加的组件位置大小
         lag.setBounds(0, 0,920,590);
         //窗体添加一个东西
         this.add(lag);
       }
     private  void renwu(){
         //默认初始化的人物位置
         renx=1;
         reny=5;
         //加载人物图片
         Icon i1=new ImageIcon("renwu.jpg");
         lag1=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag1.setBounds(10+renx*50,30+reny*50 ,50,50);
         //窗体添加一个东西
         this.add(lag1);
       }
     //3个推的箱子
     private  void xianzi1(){
         //加载图片
         Icon i1=new ImageIcon("aa.jpg");
         JLabel lag1=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag1.setBounds(110,330, 50, 50);
         //窗体添加一个东西
         this.add(lag1);
         date[6][2]=2;
         sleep[6][2]=lag1;
       }
     private  void xianzi2(){
         //加载图片
         Icon i1=new ImageIcon("aa.jpg");
         JLabel lag2=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag2.setBounds(110,380, 50, 50);
         //窗体添加一个东西
         this.add(lag2);
         date[7][2]=2;
         sleep[7][2]=lag2;
       }
     private  void xianzi3(){
         //加载图片
         Icon i1=new ImageIcon("aa.jpg");
         JLabel lag3=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag3.setBounds(260,430, 50, 50);
         //窗体添加一个东西
         this.add(lag3);
         date[8][5]=2;
         sleep[8][5]=lag3;
       }
     private void kuan1(){
         //决定游戏结束的黑图位置☞
         Icon i1=new ImageIcon("ss.png");
         JLabel lag5=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag5.setBounds(810,380, 50, 50);
         //窗体添加一个东西
         this.add(lag5); 
         date[7][16]=0;
         sleep[7][16]=lag5;
     }
     private void kuan2(){
         //决定游戏结束的黑图位置☞
         Icon i1=new ImageIcon("ss.png");
         JLabel lag5=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小;
         lag5.setBounds(810,330, 50, 50);
         //窗体添加一个东西
         this.add(lag5); 
         date[6][16]=0;
         sleep[6][16]=lag5;
     }
     private void kuan3(){
         //决定游戏结束的黑图位置☞
         Icon i1=new ImageIcon("ss.png");
         JLabel lag5=new JLabel(i1);
         //设置要添加的组件位置大小(x,y,大小);
         lag5.setBounds(810,280, 50, 50);
         //窗体添加一个东西
         this.add(lag5);
         date[5][16]=0;
         sleep[5][16]=lag5;
     }
     //增大作用域
     JLabel lag1;
     //程序执行
     public static void main(String[] args) {
        new Mymain();
    }
    @Override
    public void keyPressed(KeyEvent e) {
        //System.out.println("点击了向上键(w)");
        //a:65,w:87,d:68,s:83
        //使用lag1.getLocation()可以得到人物的位置*/
        int x=(int) lag1.getLocation().getX();
        int y=(int) lag1.getLocation().getY();
        int qw=e.getKeyCode();
        // 通过键码值的方法
        if(qw==65){
            //碰撞检测
            if(date[reny][renx-1]==1){
                //System.out.println(reny+"========"+renx);
                return;
            }
            //移动箱子
            if(date[reny][renx-1]==2){
                //判断推到的位置!=1且!=2
                if(date[reny][renx-2]!=1&& date[reny][renx-2]!=2){
                //当前箱子变成0
                date[reny][renx-1]=0;
                //移动后的箱子位置为2
                date[reny][renx-2]=2;
                //获取箱子对象,计算坐标
                sleep[reny][renx-1].setLocation(10+renx*50-100,30+reny*50);
                //组件位置调整
                sleep[reny][renx-2]=sleep[reny][renx-1];
                //原始位置数据清除
                sleep[reny][renx-1]=null;
                }
            }
            //处理箱子位置上的空地
            if(date[reny][renx-1]==0){
            renx=renx-1;
            lag1.setLocation(x-50,y);
            }
        }
        if(qw==87){
            if(date[reny-1][renx]==1){
                return; 
            }
            if(date[reny-1][renx]==2){
            if(date[reny-2][renx]!=1&& date[reny-2][renx]!=2){
                //当前箱子变成0
                date[reny-1][renx]=0;
                //移动后的箱子位置为2
                date[reny-2][renx]=2;
                //获取箱子对象,计算坐标
                sleep[reny-1][renx].setLocation(10+renx*50,30+reny*50-100);
                //组件位置调整
                sleep[reny-2][renx]=sleep[reny-1][renx];
                //原始位置数据清除
                sleep[reny-1][renx]=null;
                }
            }
            if(date[reny-1][renx]==0){
            reny=reny-1;
        lag1.setLocation(x,y-50);
            }
        }
        if(qw==68){
            if(date[reny][renx+1]==1){
                return;
            }
            if(date[reny][renx+1]==2){
                //判断推到的位置!=1且!=2
                if(date[reny][renx+2]!=1&& date[reny][renx+2]!=2){
                //当前箱子变成0
                date[reny][renx+1]=0;
                //移动后的箱子位置为2
                date[reny][renx+2]=2;
                //获取箱子对象,计算坐标
                sleep[reny][renx+1].setLocation(10+renx*50+100,30+reny*50);
                //组件位置调整
                sleep[reny][renx+2]=sleep[reny][renx+1];
                //原始位置数据清除
                sleep[reny][renx+1]=null;
                }
            }
            if(date[reny][renx+1]==0){
            renx=renx+1;
            lag1.setLocation(x+50,y);
        }
        }
        if(qw==83){
            if(date[reny+1][renx]==1){
                return;
            }
            if(date[reny+1][renx]==2){
            if(date[reny+2][renx]!=1&& date[reny+2][renx]!=2){
                //当前箱子变成0
                date[reny+1][renx]=0;
                //移动后的箱子位置为2
                date[reny+2][renx]=2;
                //获取箱子对象,计算坐标
                sleep[reny+1][renx].setLocation(10+renx*50,30+reny*50+100);
                //组件位置调整
                sleep[reny+2][renx]=sleep[reny+1][renx];
                //原始位置数据清除
                sleep[reny+1][renx]=null;
            }
            }
            if(date[reny+1][renx]==0){
            reny=reny+1;
            lag1.setLocation(x,y+50);
            }
        }
        //判断游戏结束
        if(date[7][16]==2&&date[5][16]==2&&date[6][16]==2){
            System.out.println("游戏结束");
        }
    }
    //以下结束页面显示框
    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
    }
    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }


    JLabel[][] sleep=new JLabel[11][18];
    //墙体场景数据的模拟,10*17
    int [] [] date={
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1},
            {1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1},
            {1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
            {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
    };
    //代表人物在数组中位置
    int renx;
    int reny;
    //障碍的初始化
    private void treeiod(){
         //加载图片
         Icon i2=new ImageIcon("qq.png");
        for (int i = 0; i < date.length; i++) {
            for (int j = 0; j < date[i].length; j++) {
                if(date[i][j]==1){
                JLabel lag1=new JLabel(i2);
                 //设置要添加的组件位置大小(x,y,大小);
                 lag1.setBounds(10+50*j,30+50*i, 50,50);
                 //窗体添加一个东西
                 this.add(lag1);
                }
            }
        }
    }

}

对此代码有不明白的地方,欢迎投递邮件至[email protected]

你可能感兴趣的:(游戏)