首页 > 代码库 > Java初学之华容道游戏

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     @Override110     public void mouseClicked(MouseEvent e) {111         // TODO Auto-generated method stub112         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 }

效果图: