package cn.itcast.txz.ui; import java.awt.Container; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; public class MainFrame extends JFrame implements KeyListener{ private Container panel; private JLabel player; //人物所处行 private int playerX; //人物所处列 private int playerY; //任务完成计数器 int count = 0; //任务完成总数 int total = 3; public MainFrame(){ //主窗体UI初始化 this.mainFrameBaseUI(); //UI数据初始化 this.dateInit(); //UI初始化 this.dateUI(); //背景地板UI初始化 this.backgroundUI(); //窗体添加键盘监听 this.addKeyListener(this); this.setVisible(true); } private JLabel[][] uis = new JLabel[12][16]; private void dateUI() { //墙初始化 for (int i = 0; i < dates.length; i++) { for (int j = 0; j < dates[i].length; j++) { if(dates[i][j] == 1){ JLabel temp = new JLabel(new ImageIcon("1.png")); temp.setBounds(10+j*50,10+i*50, 50, 50); this.panel.add(temp); } } } //人物初始位置第3行,第3列(存在第0行第0列) this.playerX = 3; this.playerY = 3; player = new JLabel(new ImageIcon("-10.png")); player.setBounds(10+playerX*50,10+playerY*50, 50, 50); this.panel.add(player); //目标初始化 //与total有关 JLabel tar1 = new JLabel(new ImageIcon("8.png")); tar1.setBounds(10+14*50,10+5*50, 50, 50); this.panel.add(tar1); dates[5][14] = LogicHelper.TARGET; uis[5][14] = tar1; JLabel tar2 = new JLabel(new ImageIcon("8.png")); tar2.setBounds(10+14*50,10+6*50, 50, 50); this.panel.add(tar2); dates[6][14] = LogicHelper.TARGET; uis[6][14] = tar2; JLabel tar3 = new JLabel(new ImageIcon("8.png")); tar3.setBounds(10+14*50,10+7*50, 50, 50); this.panel.add(tar3); dates[7][14] = LogicHelper.TARGET; uis[7][14] = tar3; //箱子初始化 //与total有关 JLabel box1 = new JLabel(new ImageIcon("4.png")); box1.setBounds(10+7*50,10+3*50, 50, 50); this.panel.add(box1); dates[3][7] = LogicHelper.BOX; uis[3][7] = box1; JLabel box2 = new JLabel(new ImageIcon("4.png")); box2.setBounds(10+7*50,10+5*50, 50, 50); this.panel.add(box2); dates[5][7] = LogicHelper.BOX; uis[5][7] = box2; JLabel box3 = new JLabel(new ImageIcon("4.png")); box3.setBounds(10+7*50,10+7*50, 50, 50); this.panel.add(box3); dates[7][7] = LogicHelper.BOX; uis[7][7] = box3; } private int[][] dates = new int[12][16]; private void dateInit() { dates = new int[][]{ {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,0,1,0,1,1,1,0,1,1,1,1,1,0,0,1}, {1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1}, {1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1}, {1,0,1,0,1,0,0,0,0,1,1,1,1,0,0,1}, {1,0,1,0,1,1,1,0,0,0,0,0,1,0,0,1}, {1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1}, {1,0,1,0,0,0,0,0,1,1,1,1,1,0,0,1}, {1,0,1,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,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, }; } private void backgroundUI() { //背景图片信息设置 JLabel floor = new JLabel(new ImageIcon("floor.png")); floor.setBounds(10, 10, 800, 600); this.panel.add(floor); } private void mainFrameBaseUI() { this.panel = this.getContentPane(); this.setSize(826, 650); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.panel.setLayout(null); this.setTitle("推箱子v1.0 "); this.setResizable(false); this.getContentPane().setLayout(null); } //移动控制,基于原始位置进行移动,第2参数表示垂直方向移动,即行移动,第3参数表示水平方向移动,即列移动 private static void move(JLabel c,int vMoveType,int hMoveType){ c.setLocation(c.getX()-hMoveType*50, c.getY()-vMoveType*50); } public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); int x = keyCode%2 == 0?39-keyCode:0; int y = keyCode%2 == 1?38-keyCode:0; //碰墙 if(keyCode >= 37 && keyCode <= 40){ //人物图片切换 //上10 //下-10 //左01 //右0-1 player.setIcon(new ImageIcon(x+""+y+".png")); //碰地板检测,碰目标检测 if(dates[playerX-x][playerY-y] == LogicHelper.FLOOR || dates[playerX-x][playerY-y] == LogicHelper.TARGET){ move(player,x,y); playerX = playerX-x; playerY = playerY-y; return; } //碰箱子检测 if(dates[playerX-x][playerY-y] == LogicHelper.BOX || dates[playerX-x][playerY-y] == LogicHelper.BOX_AND_TARGET){ //同方向是否为空地板或目标位置 //获取前方移动障碍物码 int code1 = dates[playerX-x][playerY-y]; int code2 = dates[playerX-x*2][playerY-y*2]; if(code2 == LogicHelper.FLOOR || code2 == LogicHelper.TARGET){ //箱子移动 JLabel box = uis[playerX-x][playerY-y]; move(box,x,y); //uis模型更新 uis[playerX-x*2][playerY-y*2] = uis[playerX-x][playerY-y]; uis[playerX-x][playerY-y] = null; //dates模型更新 //从箱子到空地 if(code1 == LogicHelper.BOX && code2 == LogicHelper.FLOOR ){ dates[playerX-x*2][playerY-y*2] = LogicHelper.BOX; dates[playerX-x][playerY-y] = LogicHelper.FLOOR; } //从箱子到目标 if(code1 == LogicHelper.BOX && code2 == LogicHelper.TARGET){ dates[playerX-x*2][playerY-y*2] = LogicHelper.BOX_AND_TARGET; dates[playerX-x][playerY-y] = LogicHelper.FLOOR; //改变箱子模型 box.setIcon(new ImageIcon("40.png")); count++; } //从箱子目标到空地 if(code1 == LogicHelper.BOX_AND_TARGET && code2 == LogicHelper.FLOOR ){ dates[playerX-x*2][playerY-y*2] = LogicHelper.BOX; dates[playerX-x][playerY-y] = LogicHelper.TARGET; //改变箱子模型 box.setIcon(new ImageIcon("4.png")); count--; } //从箱子目标到目标 if(code1 == LogicHelper.BOX_AND_TARGET && code2 == LogicHelper.TARGET){ dates[playerX-x*2][playerY-y*2] = LogicHelper.BOX_AND_TARGET; dates[playerX-x][playerY-y] = LogicHelper.TARGET; //改变箱子模型 box.setIcon(new ImageIcon("40.png")); } //人物模型移动 move(player,x,y); //人物坐标更新 playerX = playerX-x; playerY = playerY-y; victory(); } return; } } } //胜利判定 private void victory() { if(count == total){ //移除窗体键盘事件,避免用户多余操作 this.removeKeyListener(this); JDialog victory = new JDialog(this,"恭喜你取得了胜利!",true); victory.setSize(400, 300); victory.setLocationRelativeTo(null); victory.setLayout(null); JLabel info = new JLabel(new ImageIcon("gg.jpg")); info.setBounds(2, 2, 380, 180); victory.add(info); JLabel click = new JLabel(new ImageIcon("gg2.png")); click.setBounds(2, 182, 380, 88); click.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e) { try { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler https://www.baidu.com"); } catch (IOException e1) { e1.printStackTrace(); } } }); victory.add(click); victory.setVisible(true); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } }
最近下载更多
张德志 LV6
2023年12月27日
求学的熊猫 LV6
2023年12月25日
lili010126 LV8
2023年6月16日
huangzy LV12
2023年4月6日
一头土猪 LV7
2021年12月22日
chen_jw LV10
2021年12月13日
HUHUHUHU呼晗 LV2
2021年10月6日
你们的代码都是我的了 LV16
2021年9月18日
123aa21a LV5
2021年6月23日
zero1234 LV1
2020年6月13日
最近浏览更多
kuknkk LV1
2023年12月27日
张德志 LV6
2023年12月27日
求学的熊猫 LV6
2023年12月25日
bangyiyang LV2
2023年12月21日
微信网友_6699076084797440 LV7
2023年10月30日
lili010126 LV8
2023年6月16日
sdhfkh LV4
2023年6月13日
2313321 LV1
2023年6月5日
陈小灏 LV14
2023年4月19日
huangzy LV12
2023年4月6日