• 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 }

    效果图:

  • 相关阅读:
    博客转移到cnblogs
    mmsplayer for ios 支持iphone ,ipad,ipod touch 版本已经完成。
    mmsplayer for ios v1.0
    无ldf文件情况下恢复数据库数据纪实
    我的Blog页面设计
    使用C#生成静态页面
    C++开发工具
    使用JNDI来读取Notes通讯录中的数据
    关于Char与string
    JavaScript站点荟萃
  • 原文地址:https://www.cnblogs.com/gongxijun/p/3854290.html
Copyright © 2020-2023  润新知