不会解华容道这类的算法 如果可以 还请有一些注释 谢大神
4条回答
- lx624909677 2016-03-21 05:38关注
import java.awt.*; import java.awt.event.*; public class MoveExample { public static void main(String args[]) { new Hua_Rong_Road(); } } class Person extends Button implements FocusListener { int number; Color c=new Color(255,245,170); public Person(final int number,final String s) { super(s); setBackground(c); this.number=number; c=getBackground(); addFocusListener(this); } public void focusGained(final FocusEvent e) { setBackground(Color.red); } public void focusLost(final FocusEvent e) { setBackground(c); } } class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener { Person person[]=new Person[10]; Button left,right,above,below; Button restart=new Button("重新开始"); public Hua_Rong_Road() { init(); setBounds(100,100,320,360); setVisible(true); validate(); addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) { System.out.println(0); }}); } public void init() { setLayout(null); add(restart); restart.setBounds(100,320,120,25); 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); 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 Button();right=new Button(); above=new Button();below=new Button(); add(left);add(right);add(above);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,Button 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(); } public void keyPressed(KeyEvent arg0) { } public void keyReleased(KeyEvent arg0) { } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥20 删除和修改功能无法调用
- ¥15 kafka topic 所有分副本数修改
- ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
- ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
- ¥40 串口调试助手打开串口后,keil5的代码就停止了
- ¥15 电脑最近经常蓝屏,求大家看看哪的问题
- ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
- ¥50 C++五子棋AI程序编写
- ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
- ¥15 SQL Server analysis services 服务安装失败