用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);
}
}
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);
}
}
相关文章推荐
- java实现文件下载的工具类-----------什么都可以下载,只要传入response和文件路径 两个参数
- java web开发中,jsp使用了frameset框架,如何实现整个页面跳转,并且同一个表单中可以提交两个action
- 定义一个函数,在该函数中可以实现任意两个整数的加法。java实现
- Java数组实现可以动态增长的队列
- 算法(第四版)学习笔记之java实现可以动态调整数组大小的栈
- 【java】java实现动态时钟并可以设置闹钟
- Java根据概率、剩余奖品数量动态抽奖算法实现,概率总和可以不为100%
- Java动态代理的实现
- Java动态代理的两种实现方法
- java中的动态代理----自己手动实现
- 数据结构与算法分析(Java 语言描述)(35)—— 使用两个栈实现一个队列
- java动态代理-自己实现
- Web项目中使用java Struts2实现Zip、xml文件的动态创建和下载(Zip文件中动态存在多个xml文件)
- [转]JAVA的动态代理机制及Spring的实现方式
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题
- Java动态代理实现AOP
- (学习笔记)Java的JDK动态代理与CGLIB动态代理实现
- 2016腾讯笔试编程题java实现求一个数等于两个质数的和的组合数(2016-09-11 19:00)
- 找出两个字符串中最大的公共子串(java实现)
- 使用 JAVA 中的动态代理实现数据库连接池