JAVA推箱子代码1.0(3)

package com.yes;

import java.awt.Color;
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 TXZ {
    public static void main(String[] args) {
        JFrame gameFrame = new JFrame("推箱子—1.0");//声明创建窗体
        gameFrame.setTitle("推箱子—1.0");//窗体设置标题
        gameFrame.setSize(22 * 48 + 16, 12 * 48 + 39);
        //gameFrame.setLocation((1920 - 800) / 2,  (1080 - 600) / 2);
        gameFrame.setLocationRelativeTo(null);//窗体居中
        gameFrame.setResizable(false);//窗体大小不可变
        
        JPanel panel = new JPanel();
        panel.setBackground(new Color(0, 245, 255));//给面板设置颜色
        panel.setLayout(null);
        gameFrame.setContentPane(panel);//面板与窗体关联
        
        ImageIcon boxImg = new ImageIcon("imgs/box2.png");//创建图片对象,构造方法传参设置图片路径
        JLabel box = new JLabel(boxImg);//创建标签对象,并且利用 构造方法把图片放入标签
        panel.add(box);//面板增加
        box.setBounds(5 * 48, 3 * 48, 48, 48);
        
        ImageIcon goalImg = new ImageIcon("imgs/goal2.png");
        JLabel goal = new JLabel(goalImg);
        panel.add(goal);
        goal.setBounds(7 * 48, 6 * 48, 48, 48);
        
        
        ImageIcon workerImg = new ImageIcon("imgs/workerDown.png");
        JLabel worker = new JLabel(workerImg);
        panel.add(worker);
        worker.setBounds(8 * 48, 8 * 48, 48,48);
        
        ImageIcon wallImg = new ImageIcon("imgs/wall.png");
        //new的是数组,数组中的每个元素依旧为空
        JLabel[] walls = new JLabel[22 * 2 + (12 - 2) * 2 + 6 + 7 + 5];
        for (int i = 0; i < walls.length; i++)//new 的数组中的每个元素
            walls[i] = new JLabel(wallImg);
        int index = 0;
        for (int i = 0; i < 22; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds(i * 48, 0, 48, 48);
        }
        for (int i = 0; i < 22; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds(i* 48, 11 * 48, 48, 48);
        }
        
        for (int i = 1; i < 11; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds(0, i * 48, 48, 48);
        }
        for (int i = 1; i <11; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds(21 * 48, i * 48, 48, 48);
            
        }
        //横着放
        for (int i = 0; i < 6; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds((i + 3) * 48, 5 * 48, 48, 48);
            
        }
        //竖直加
        for (int i = 0; i <7; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds(( 10 * 48), (i + 2) * 48, 48, 48);
        }
        //斜着加
        for (int i = 0; i < 5; i++) {
            panel.add(walls[index]);
            walls[index++].setBounds((i + 12) * 48, (i + 3) * 48, 48, 48);
            
        }
        
        gameFrame.addKeyListener(new KeyListener() {
            
            @Override
            public void keyTyped(KeyEvent e) {}
            @Override
            public void keyReleased(KeyEvent e) {}
            @Override
            public void keyPressed(KeyEvent e) {
                //System.out.println("键盘每按一次,此方法调用一次");
            int keyCode = e.getKeyCode();
            int x = 0, y = 0;
            String workerImgPath ="workerLeft.png";
            if (keyCode == KeyEvent.VK_LEFT ||keyCode ==KeyEvent.VK_A) {
                //System.out.println("左");
                x = -48;
            }else if(keyCode == KeyEvent.VK_UP|| keyCode == KeyEvent.VK_W){
                //System.out.println("上");
                workerImgPath = "workerUp.png";
                y = -48;
            }else if(keyCode == KeyEvent.VK_RIGHT|| keyCode == KeyEvent.VK_D){
                //System.out.println("右");
                workerImgPath = "workerRight.png";
                x = 48;
            }else if(keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S){
                //System.out.println("下");
                workerImgPath = "workerDown.png";
                y = 48;
            }
            ImageIcon img =new ImageIcon("imgs/" +workerImgPath);
            worker.setIcon(img);
            worker.setBounds(worker.getBounds().x + x, worker.getBounds().y + y, 48,48);
            //解决穿墙问题
            for (int i = 0; i < walls.length; i++) {
                if(walls[i].getBounds().contains(worker.getBounds())) {
                    worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48);
                    break;
                }
            }
            //让工人推动箱子
            if(worker.getBounds().contains(box.getBounds())) {
                box.setBounds(box.getBounds().x + x, box.getBounds().y + y, 48, 48);
            }
            //解决箱子的穿墙
            for (int i = 0; i < walls.length; i++) {
                if(walls[i].getBounds().contains(box.getBounds())) {
                    worker.setBounds(worker.getBounds().x - x, worker.getBounds().y - y, 48, 48);
                    box.setBounds(box.getBounds().x - x, box.getBounds().y - y, 48, 48);
                    break;
                }
            }
            if(box.getBounds().contains(goal.getBounds())) {
                JOptionPane.showMessageDialog(null, "恭喜你,过关!");
                System.exit(0);
            }
        }
    });
        
        
        
        
        gameFrame.setVisible(true);//对象名.方法    窗体显示
        
        
        
        
    }

}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值