回 帖 发 新 帖 刷新版面

主题:[讨论]应用

本人有四个JAVA程序(见上传文件),希望做出一个界面,将Clock程序放在界面上,并设置三个按钮“计算”,“益智”,“游戏”,当鼠标点击按钮时,分别运行Caculator,blackvswhite,ufo_attack.
初学JAVA,希望各位大侠不令赐教!!!


http://upload.programfan.com/upfile/20071125142571.rar

回复列表 (共23个回复)

21 楼

ufo(8)
//定义Missile类,继承于Piece类
class Missile extends Piece {
    //导弹类的构造函数
    public Missile (UFO_Attack a) {
      //导弹属性值的初始化
      this.a = a ; 
      px = opx = 0 ;
      py = opy = 0 ;
      vx = 0 ;
      vy = 7 ;
      w  = 12 ;
      h  = 22 ;
      active = false ;

      img = a.missile ;
    }
    //对象的移动函数
    public void move() {
      opx = px ;
      opy = py ;

      px = a.L.px ;

      // 使移动的速度更加实际化
      int dx = px - opx ;
      int nvy = vy*vy - dx*dx ;
      if (nvy > 0) nvy = (int) Math.sqrt(nvy) ; // Should exceptions
      if (nvy < 1) nvy = 1 ;

      py += nvy ;

      if (py > a.window_size.height + 2*h) active = false ;
    }

    int seq  = 0 ;
    //导弹对象的绘制
    public void draw() {
      //设置绘制区域
      set_draw_rectangles(a.paint_area, a.new_area) ;

      //先将变化绘制到缓冲中
      Graphics bg = a.buffer.getGraphics() ;
      bg.clipRect(a.paint_area.x, a.paint_area.y, w, h);
      bg.drawImage(a.backdrop,0,0,a) ;
      bg.dispose() ;
    
      //由于导弹所用的图片是一个序列图,所以要从中剪切,然后再使用
      //根据seq的值来显示此序列图的一部分
      seq = ++seq % 1 ;
      int dx = px - opx ;
      seq = 0 ;
      if (dx > 0) 
        seq = 1 ;
      else if (dx < 0)
        seq = 2 ;
      //将变化绘制到缓冲上
      bg = a.buffer.getGraphics() ;
      bg.clipRect(a.new_area.x, a.new_area.y, w, h);
      bg.drawImage(img,a.new_area.x-w*seq,a.new_area.y,a) ;

      bg.dispose() ;
      //使用新的区域
      a.paint_area.add(a.new_area) ;
      //将缓冲绘制到屏幕上
      Graphics g = a.getGraphics() ;
      g.clipRect(a.paint_area.x ,a.paint_area.y, a.paint_area.width, a.paint_area.height);
      g.drawImage(a.buffer, 0, 0, a);
      g.dispose() ;
    }
}

//定义UFO类,继承于Piece类
class UFO extends Piece {
    //UFO类的构造函数
    public UFO (UFO_Attack a) {
      //UFO属性值的初始化
      this.a = a ; 
      vx = (Math.random() > 0.5 ? 1 : -1) ;
      vy = -2 ;
      w  = 20 ;
      h  = 8 ;
      int aw = a.window_size.width ;
      px = opx =  (int) (w/2+1 + (aw-w-2)* Math.random()) ;
      py = opy = a.window_size.height + h/2 + 1  ;
      active = true ;

      img = a.ufostrip ;
    }
    //UFO对象的移动函数
    public void move() {
      opx = px ;
      opy = py ;

      px += vx ;
      py += vy ;

      if (py < -h/2) active = false ;

      if ((px <= w/2) || 
          (px >= (a.window_size.width - w/2)) ||
          (Math.random() > 0.96)) {
        vx = -vx ;
      }
    }

    int seq  = 0 ;
    int seq2 = 0 ;
    //UFO对象的绘制函数
    public void draw() {
      //设置对象的绘制区域
      set_draw_rectangles(a.paint_area, a.new_area) ;

      // 清除旧的图像
      Graphics bg = a.buffer.getGraphics() ;
      bg.clipRect(a.paint_area.x, a.paint_area.y, w, h);
      bg.drawImage(a.backdrop,0,0,a) ;
      bg.dispose() ;
   
      // 由于UFO用的图片是一个序列图,要进行剪切再使用
      //根据seq2的值选择相应的部分
      if ((++seq2 % 4) == 0) seq = ++seq % 4 ;

      // 绘制新的区域到缓冲中
      bg = a.buffer.getGraphics() ;
      bg.clipRect(a.new_area.x, a.new_area.y, w, h);
      bg.drawImage(img,a.new_area.x-w*seq,a.new_area.y,a) ;
      bg.dispose() ;

      // 使用新的区域
      a.paint_area.add(a.new_area) ;

      // 将缓冲绘制到屏幕上
      Graphics g = a.getGraphics() ;
      g.clipRect(a.paint_area.x ,a.paint_area.y, a.paint_area.width, a.paint_area.height);
      g.drawImage(a.buffer, 0, 0, a);
      g.dispose() ;
    }
  }

22 楼

ufo(9)
//定义爆炸类,继承于Piece类
class Explosion extends Piece {
    //Explosion类的构造函数
    public Explosion (UFO_Attack a, int x, int y) {
      //爆炸对象属性值的初始化
      this.a = a ; 
      w  = 30 ;
      h  = 30 ;
      px = opx = x ;
      py = opy = y ;
      active = true ;
      img = a.missile_explosion ;
    }

    int seq  = 0 ;
    int seq2 = 0 ;
    //爆炸对象的绘制函数
    public void draw() {
      //设置绘制的区域
      set_draw_rectangles(a.paint_area, a.new_area) ;

      // 清除旧的图像
      Graphics bkd_g = a.backdrop.getGraphics();
      bkd_g.clipRect(a.paint_area.x, a.paint_area.y, w, h);
      bkd_g.drawImage(a.bgimg,0,0,a.window_size.width,a.window_size.height,a) ;

      // 由于爆炸用的图片是一个序列图,要进行剪切再使用
      //根据seq2的值选择相应的部分
      if ((++seq2 % 4) == 0) seq = ++seq % 5 ;

      // 爆炸图最后的部分显示后,将active属性值设为false,并将其清除
      if (seq == 4) active = false ;

      // 将新的区域绘制到缓冲中
      bkd_g.clipRect(a.new_area.x, a.new_area.y, w, h);
      bkd_g.drawImage(img,a.new_area.x-w*seq,a.new_area.y,a) ;
      bkd_g.dispose() ;

      // 将变化绘制到缓冲中
      Graphics bg = a.buffer.getGraphics() ;
      bg.clipRect(a.new_area.x,a.new_area.y,w,h);
      bg.drawImage(a.backdrop,0,0,a) ;
      bg.dispose() ;

      // 将缓冲绘制到屏幕上
      Graphics g = a.getGraphics() ;
      g.clipRect(a.paint_area.x ,a.paint_area.y, a.paint_area.width, a.paint_area.height);
      g.drawImage(a.buffer, 0, 0, a);
      g.dispose() ;
    }
    //爆炸对象的清除
    public void erase() {
      //设置绘制的区域
      set_draw_rectangles(a.paint_area, a.new_area) ;

      // 清除旧的图像
      Graphics bkd_g = a.backdrop.getGraphics();
      bkd_g.clipRect(a.paint_area.x, a.paint_area.y, w, h);
      bkd_g.drawImage(a.bgimg,0,0,a.window_size.width,a.window_size.height,a) ;
      bkd_g.dispose() ;

      // 对缓冲和屏幕执行同样的操作
      super.erase() ;
    }
}

23 楼

郁闷了,怎么回帖的都是你自己啊!

我来回复

您尚未登录,请登录后再回复。点此登录或注册