Java初学之华容道游戏

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 }

效果图:

Java初学之华容道游戏

你可能感兴趣的:(java)