您的位置:首页 > 编程语言 > Java开发

用java实现单位的跟踪 , 稍加升级就可以实现两个单位的动态跟随

2007-10-24 21:34 465 查看
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**主要实现一个单位的追随移动 目标单位不动,主要单位跟踪*/
public class Move_1 extends Frame implements KeyListener,Runnable{
        /**主要移动点*/
        UniteNode uMain;
        /**目标点*/
        UniteNode uGoal;
        /**移动点的线程<li>这里只有这一个线程</li>*/
        Thread tdMainUnite;
        /**设置移动单位的长度和地图单位的长度<li>这两个单位的长度是相等的,现在默认每个单位都是正方形</li>*/
        int itUniteWidthandHeight;
        public static void main(String args[]){
                Move_1 m1 = new Move_1();
        }
        Move_1(){
                setSize(500,500);
                setVisible(true);
                setLayout(null);
                addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e){
                                System.exit(0);
                        }
                });
        itUniteWidthandHeight = 20;
               
        uMain = new UniteNode(0);
        add(uMain);
        uMain.setLocation(itUniteWidthandHeight*12,itUniteWidthandHeight*12);
       
        uGoal = new UniteNode(9);
        add(uGoal);
        uGoal.setLocation(itUniteWidthandHeight*2,itUniteWidthandHeight*12);
               
        tdMainUnite = new Thread(this);
        tdMainUnite.start();
               
        }
        public void keyTyped(KeyEvent e){}
        public void keyReleased(KeyEvent e){}
        public void keyPressed(KeyEvent e){}
        public void run(){
                while(true){
//                        Out.s("线程已经启动");
                        int itXMoveDirectio = (uMain.getBounds().x - uGoal.getBounds().x);
                        Out.s("移动单位的X坐标 减去 目标单位的X坐标的值是 "+itXMoveDirectio);
                        int itYMoveDirectio = (uMain.getBounds().y - uGoal.getBounds().y);
                        Out.s("移动单位的Y坐标 减去 目标单位的Y坐标的值是 "+itYMoveDirectio);
                        if(itXMoveDirectio>0){
                                uMain.setLocation(uMain.getBounds().x-20, uMain.getBounds().y);
                        }
                        if(itXMoveDirectio<0){
                                uMain.setLocation(uMain.getBounds().x+20, uMain.getBounds().y);
                        }
                        if(itYMoveDirectio<0){
                                uMain.setLocation(uMain.getBounds().x, uMain.getBounds().y+20);
                        }
                        if(itYMoveDirectio>0){
                                uMain.setLocation(uMain.getBounds().x, uMain.getBounds().y-20);
                        }
                        try {
                                tdMainUnite.sleep(500);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }
        }
}
/**基本单位,移动单位和围墙阻碍 就是画一个正方形*/
class UniteNode extends Canvas{
        /** 长方形的 高 <li>默认的值是 10</li> */
        public int sqHeight = 10;
        /**长方形的 宽<li>默认的值是 10</li>*/
        public int sqWidth = 10;
        public Color c = Color.RED;
        public int iStr = 2;
        UniteNode(int i){
                setBackground(Color.CYAN);
                iStr = i;
                setSize(this.sqWidth*2,this.sqHeight*2);
        }
        public void InitSize(){
                setSize(this.sqWidth*2,this.sqHeight*2);
        }
        public void paint(Graphics g){
                g.drawString(String.valueOf(iStr), 10, 10);
                g.drawRect(0,0,sqWidth,sqHeight);
        }
        UniteNode(int w,int h){
                this.sqHeight = h;
                this.sqWidth = w;
                setSize(this.sqWidth*2,this.sqHeight*2);
        }
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息