1 package hhuarongdao;
2
3 public class example {
4 public static void main(String args[])
5 {
6 new Hua_Rong_Road();
7 }
8 }
1 package hhuarongdao;
2 import java.awt.*;
3 import javax.swing.*;
4
5 import java.awt.event.*;
6 public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener,ActionListener
7 {
8 Person [] person = new Person[10]; //person 为自定义的一个变量类型
9 JButton left,right,above,below ;
10 JButton restart = new JButton("重新开始");
11 public Hua_Rong_Road()
12 {
13 init();
14 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
15 setBounds(100,100,320,500); //设置窗口初始位置以及大小的一个函数
16 setVisible(true); //窗口是否可见
17 validate(); //使用 validate 方法会使容器再次布置其子组件。确保布局有效。
18 }
19 public void init()
20 {
21 setLayout(null);
22 add(restart);
23 restart.addActionListener(this);
24 String name [] = {"曹操","关","张","刘","周","黄","兵","兵","兵","兵"};
25 for(int i=0;i<name.length;i++)
26 {
27 person[i]= new Person(i,name[i]);
28 person[i].addMouseListener(this);
29 person[i].addKeyListener(this);
30 add(person[i]);
31 }
32 person[0].setBounds(104, 54, 100, 100);
33 person[1].setBounds(104,154,100,50);
34 person[2].setBounds(54,154,50,100);
35 person[3].setBounds(204,54,50,100);
36 person[4].setBounds(54,54,50,100);
37 person[5].setBounds(204, 54, 50, 100);
38 person[6].setBounds(54,254,50,50);
39 person[7].setBounds(204,254,50,50);
40 person[8].setBounds(104,204,50,50);
41 person[9].setBounds(154,204,50,50);
42 person[9].requestFocus(); //将焦点放在控件上面
43 left=new JButton();
44 right=new JButton();
45 above=new JButton();
46 below = new JButton();
47 add(left);
48 add(right);
49 add(above);
50 add(below);
51 left.setBounds(49, 49, 5, 260);
52 right.setBounds(254,49,5,260);
53 above.setBounds(49,49,210,5);
54 below.setBounds(49,304,210,5);
55 validate(); //确保布局有效...这条语句不要也不会对程序有太大的影响
56 }
57 public void keyTyped(KeyEvent e){}
58 public void keyReleased(KeyEvent e){}
59 public void keyPressed(KeyEvent e)
60 {
61 Person man= (Person)e.getSource();
62 if(e.getKeyCode()==KeyEvent.VK_DOWN)
63 go(man,below);
64 if(e.getKeyCode()==KeyEvent.VK_UP)
65 go(man,above);
66 if(e.getKeyCode()==KeyEvent.VK_LEFT)
67 go(man,left);
68 if(e.getKeyCode()==KeyEvent.VK_RIGHT)
69 go(man,right);
70 }
71 public void mousePressed(MouseEvent e)
72 {
73 Person man=(Person)e.getSource();
74 int x=-1,y=-1;
75 x=e.getX();
76 y=e.getY();
77 int w=man.getBounds().width;
78 int h=man.getBounds().height;
79 if(y>h/2) go(man,below);
80 if(y<h/2) go(man,above);
81 if(x<w/2) go(man,left);
82 if(x>w/2) go(man,right);
83 }
84 public void mouseReleased(MouseEvent e){}
85 public void mouseEntered(MouseEvent e){}
86 public void mouseExited(MouseEvent e){}
87 public void go(Person man, JButton direction) {
88 // TODO Auto-generated method stub
89 boolean move=true;
90 Rectangle manRect=man.getBounds();
91 int x=man.getBounds().x;
92 int y=man.getBounds().y;
93 if(direction==below) y+=50;
94 else if(direction==above)y-=50;
95 else if(direction==left)x-=50;
96 else if(direction==right)x+=50;
97 manRect.setLocation(x, y);
98 Rectangle directionRect=direction.getBounds();
99 for(int k=0;k<10;k++)
100 {
101 Rectangle personRect=person[k].getBounds();
102 if(manRect.intersects(personRect)&&man.number!=k)
103 move=false;
104 }
105 if(manRect.intersects(directionRect))
106 move=false;
107 if(move==true) man.setLocation(x,y);
108 }
109 @Override
110 public void mouseClicked(MouseEvent e) {
111 // TODO Auto-generated method stub
112
113 }
114 public void actionPerformed(ActionEvent e)
115 {
116 dispose(); //注销
117 new Hua_Rong_Road();
118 }
119
120 }
1 package hhuarongdao;
2 import javax.swing.*;
3 import java.awt.*;
4 import java.awt.event.*;
5 public class Person extends JButton implements FocusListener
6 {
7
8 int number ;
9 Color c= new Color(255,245,170);
10 Font font=new Font("宋体",Font.BOLD,12);
11 Person(int number,String s)
12 {
13 super(s);
14 setBackground(c);
15 setFont(font);
16 this.number=number;
17 c=getBackground();
18 addFocusListener(this);
19 }
20 public void focusGained(FocusEvent e)
21 {
22 setBackground(Color.red);
23 }
24 public void focusLost(FocusEvent e)
25 {
26 setBackground(c);
27 }
28 }
效果图:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/109772.html原文链接:https://javaforall.cn