前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java初学之华容道游戏

Java初学之华容道游戏

作者头像
Gxjun
发布2018-03-22 14:09:45
1.6K0
发布2018-03-22 14:09:45
举报
文章被收录于专栏:mlml
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 }

效果图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档