package 华容道;import java.awt.*;
import java.awt.event.*;
//主函数
public class Main {
    public static void main(String[] args) {
        new Hua_Rong_Road();
    }
}
//人物按钮颜色
class Person extends Button implements FocusListener{
    int number;
    Color c=new Color(255,245,170);
    Person(int number,String s)
    {
        super(s);
        setBackground(c);//人物的颜色背景是黄色
        this.number=number;
        c=getBackground();
        addFocusListener(this);//好像是焦点监听器
    }
        public void focusGained(FocusEvent e)
        {
            setBackground(Color.red);//只要单击该按钮则按钮变颜色
        }
        public void focusLost(FocusEvent e) {
        setBackground(c);//上一个按钮回复原先的颜色
        }
   }
//华容道总类
class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener{
    Person person[] = new Person[10];
    Button left,right,above,below;
    Button restart = new Button("Start");//重新开始按钮
    public Hua_Rong_Road()
    {
        init();
        setBounds(100,100,320,360);
        setVisible(true);//设置Frame为可见,默认为不可见
        validate();
        addWindowListener(
                new WindowAdapter()
                {
                     public void windowClosing(WindowEvent e)
                    {
                        System.exit(0);
                    }
                }
        );
    }
    public void init()
    {
        setLayout(null);
        add(restart);
        restart.setBounds(100, 320, 120, 25);
        restart.addActionListener(this);
        String name[]={"我","陆逊","姜维","陈宫","许攸","邓艾","周瑜","庞统","诸葛亮","贾诩"};
        for(int k=0;k<name.length;k++)
        {
            person[k]=new Person(k,name[k]);
            person[k].addMouseListener(this);
            person[k].addKeyListener(this);
            add(person[k]);
        }//为所有的按钮注册所需的东西
        person[0].setBounds(104, 54, 100, 100);
        person[1].setBounds(104,154, 100, 50);
        person[2].setBounds(54, 154, 50, 100);
        person[3].setBounds(204, 154, 50, 100);
        person[4].setBounds(54, 54, 50, 100);
        person[5].setBounds(204, 54, 50, 100);
        person[6].setBounds(54, 254,50, 50);
        person[7].setBounds(204, 254, 50, 50);
        person[8].setBounds(104, 204, 50, 50);
        person[9].setBounds(154, 204, 50, 50);
        //初始化按钮的位子
        person[0].requestFocus();
        left=new Button();
        right=new Button();
        above=new Button();
        below=new Button();
        left.setBounds(49,49,5,260);
        right.setBounds(254,49,5,260);
        above.setBounds(49,49,210,5);
        below.setBounds(49,304,210,5);
        validate();
    }
        public void keyTyped(KeyEvent e){}
        public void keyReleased(KeyEvent e){}
        public void keyPressed(KeyEvent e)
        {
            Person man=(Person)e.getSource();
            if(e.getKeyCode()==KeyEvent.VK_DOWN)
            {
                go(man,below);
            }
            if(e.getKeyCode()==KeyEvent.VK_UP)
            {
                go(man,above);
            }
            if(e.getKeyCode()==KeyEvent.VK_LEFT)
            {
                go(man,left);
            }
            if(e.getKeyCode()==KeyEvent.VK_RIGHT)
            {
                go(man,right);
            }
        }
        public void mousePressed(MouseEvent e)
        {
            Person man =(Person)e.getSource();
            int x=-1,y=-1;
            x=e.getX();
            y=e.getY();
            int w=man.getBounds().width;
            int h=man.getBounds().height;
            if(y>h/2)
            {
                go(man,below);
            }
            if(y<h/2)
            {
                go(man,above);
            }
            if(x<w/2)
            {
                go(man,left);
            }
            if(x>w/2)
            {
                go(man,right);
            }
        }        public void mouseReleased(MouseEvent e){}
        public void mouseEntered(MouseEvent e){}
        public void mouseExited(MouseEvent e){}
        public void mouseClicked(MouseEvent e){}
        public void go(Person man,Button direction)
        {
            boolean move=true;
            Rectangle manRect=man.getBounds();
            int x=man.getBounds().x;
            int y=man.getBounds().y;
            if(direction==below)
                y=y+50;
            else if(direction==above)
                y=y-50;
            else if(direction==left)
                x=x-50;
            else if(direction==right)
                x=x+50;
            manRect.setLocation(x,y);
            Rectangle directionRect=direction.getBounds();
            for(int k=0;k<10;k++)
            {
                Rectangle personRect=person[k].getBounds();
                if((manRect.intersects(personRect))&&(man.number!=k))
                {
                    move=false;
                }
            }
            if(manRect.intersects(directionRect))
            {
                move=false;
            }
            if(move==true)
            {
                man.setLocation(x,y);
            }
        }
        public void actionPerformed(ActionEvent e)
        {
            dispose();
            new Hua_Rong_Road();
        }
    }

解决方案 »

  1.   

    你看看这个:
    import java.awt.*;
    import java.awt.event.*;
    public class MoveExample
    {  public static void main(String args[])
       {  new Hua_Rong_Road();
       }
    }
    class Person extends Button 
    implements FocusListener  
    {  int number;
       Color c=new Color(255,245,170);
       Person(int number,String s)
       {  super(s);
          setBackground(c);
          this.number=number;
          c=getBackground();
          addFocusListener(this);
       }
       public void focusGained(FocusEvent e)
       {  setBackground(Color.red);
       }
       public void focusLost(FocusEvent e)
       {  setBackground(c);
       }
    }
    class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener
    {  Person person[]=new Person[10];
       Button left,right,above,below;  
       Button restart=new Button("重新开始");
       public Hua_Rong_Road()
       { init();
         setBounds(100,100,320,360);
         setVisible(true);
         validate();
         addWindowListener( new WindowAdapter()
                             {  public void windowClosing(WindowEvent e)
                                 {  System.exit(0);
                                 }
                             }
                           );
       }
       public void init()
       {  setLayout(null); 
          add(restart);
          restart.setBounds(100,320,120,25);
          restart.addActionListener(this);
          String name[]={"曹操","关羽","张飞","刘备","周瑜","黄忠","兵","兵","兵","兵"};
          for(int k=0;k<name.length;k++)
          {  person[k]=new Person(k,name[k]);
             person[k].addMouseListener(this);
             person[k].addKeyListener(this);
             add(person[k]);
          }
          person[0].setBounds(104,54,100,100); 
          person[1].setBounds(104,154,100,50); 
          person[2].setBounds(54, 154,50,100); 
          person[3].setBounds(204,154,50,100); 
          person[4].setBounds(54, 54, 50,100); 
          person[5].setBounds(204, 54, 50,100);  
          person[6].setBounds(54,254,50,50);  
          person[7].setBounds(204,254,50,50); 
          person[8].setBounds(104,204,50,50); 
          person[9].setBounds(154,204,50,50); 
          person[9].requestFocus();
          left=new Button();  right=new Button();
          above=new Button(); below=new Button();
          add(left);  add(right);
          add(above); add(below);
          left.setBounds(49,49,5,260);
          right.setBounds(254,49,5,260);
          above.setBounds(49,49,210,5);
          below.setBounds(49,304,210,5);
          validate();
       } 
       public void keyTyped(KeyEvent e){}
       public void keyReleased(KeyEvent e){}
       public void keyPressed(KeyEvent e)
       {  Person man=(Person)e.getSource();
         if(e.getKeyCode()==KeyEvent.VK_DOWN)
         {  go(man,below);
         }
         if(e.getKeyCode()==KeyEvent.VK_UP)
         {  go(man,above);
         }
         if(e.getKeyCode()==KeyEvent.VK_LEFT)
         {  go(man,left);
         }
         if(e.getKeyCode()==KeyEvent.VK_RIGHT)
         {  go(man,right);
         }
       }
       public void mousePressed(MouseEvent e)
       { Person man=(Person)e.getSource();
         int x=-1,y=-1;
         x=e.getX();
         y=e.getY();
         int w=man.getBounds().width;
         int h=man.getBounds().height;
         if(y>h/2)
         { go(man,below); 
         } 
         if(y<h/2)
         { go(man,above);
         }   
         if(x<w/2)
         { go(man,left);
         }
         if(x>w/2)
         { go(man,right);
         }
       }
       public void mouseReleased(MouseEvent e) {}
       public void mouseEntered(MouseEvent e)  {}
       public void mouseExited(MouseEvent e)   {}
       public void mouseClicked(MouseEvent e)  {}
       public void go(Person man,Button direction)
       {  boolean move=true;
          Rectangle manRect=man.getBounds();
          int x=man.getBounds().x;
          int y=man.getBounds().y;
          if(direction==below)
             y=y+50;
          else if(direction==above)
             y=y-50;
          else if(direction==left)
             x=x-50;
          else if(direction==right)
             x=x+50;
          manRect.setLocation(x,y);
          Rectangle directionRect=direction.getBounds();
          for(int k=0;k<10;k++)
          {  Rectangle personRect=person[k].getBounds();
             if((manRect.intersects(personRect))&&(man.number!=k))
               {  move=false;
               }
          }
          if(manRect.intersects(directionRect))
          {    move=false;
          } 
          if(move==true)
          {    man.setLocation(x,y);
          }
       }
      public void actionPerformed(ActionEvent e)
       {  dispose(); 
          new Hua_Rong_Road();
       }
    }