Java华容道

MainClass.java

public class MainClass {
   public static void main(String args[]) {
      new Hua_Rong_Road();
   }
}
Person.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Person extends JButton implements FocusListener { 
   int number;
   Color c=new Color(255,245,170);
   Font font=new Font("宋体",Font.BOLD,12);
   Person(int number,String s) {
       super(s);
       setBackground(c);
       setFont(font);
       this.number=number;
       c=getBackground();
       addFocusListener(this);
   }
   public void focusGained(FocusEvent e) {//获得焦点是调用
      setBackground(Color.red);
   }
   public void focusLost(FocusEvent e) {//失去焦点是调用
      setBackground(c);
   }
}
Hua_Rong_Road.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener,ActionListener {
   Person person[]=new Person[10];
   JButton left,right,above,below;  
   JButton restart=new JButton("重新开始");
   public Hua_Rong_Road() {
      init();
      setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
      setBounds(100,100,320,500);
      setVisible(true);
      validate();
   }
   public void init() {
      getContentPane().setLayout(null);
      getContentPane().add(restart);//getContentPane()得到一个内容画板
      restart.setBounds(100,320,100,35);
      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);
         getContentPane().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 JButton();  
      right=new JButton();
      above=new JButton(); 
      below=new JButton();
      getContentPane().add(left); 
      getContentPane().add(right);
      getContentPane().add(above); 
      getContentPane().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,JButton 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();
  }
}



  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值