Example #1
1
 public void actionPerformed(ActionEvent ae) {
   // 响应用户点击
   if (ae.getActionCommand().equals("new_game")) {
     // 如果选择 “开始新游戏” 则跳转到游戏开始
     ae_panel = new GamePanel(false);
     Thread ae_thread = new Thread(ae_panel);
     ae_thread.start();
     // 先删除旧面板 -- 开始界面
     this.remove(start_panel);
     this.add(ae_panel);
     this.addKeyListener(ae_panel);
     this.setVisible(true); // 如果没有这句点击后不会出现新的游戏面板
   } else if (ae.getActionCommand().equals("qs_game")) {
     // 退出时保存游戏进度
     Recorder.set_enemies(ae_panel.enemies);
     Recorder.save_game_data();
     // 0 表示正常退出
     System.exit(0);
   } else if (ae.getActionCommand().equals("restart_old_game")) {
     // 恢复游戏数据 -- 如果曾经保存
     Recorder.recovery_position();
     ae_panel = new GamePanel(true);
     Thread ae_thread = new Thread(ae_panel);
     ae_thread.start();
     // 先删除旧面板 -- 开始界面
     this.remove(start_panel);
     this.add(ae_panel);
     this.addKeyListener(ae_panel);
     this.setVisible(true);
   } else if (ae.getActionCommand().equals("save_now")) {
     Recorder.set_enemies(ae_panel.enemies);
     Recorder.recovery_position();
   }
 }
Example #2
1
 public void run(String local, String remote, InputStream pin, OutputStream pout) {
   try {
     microphone = SoundMixerEnumerator.getInputLine(pcmformat, DefaultPhonePCMBlockSize);
   } catch (LineUnavailableException lue) {
     System.out.println(
         "\3b"
             + getClass().getName()
             + ".<init>:\n\tCould not create microphone input stream.\n\t"
             + lue);
   }
   try {
     speaker = SoundMixerEnumerator.getOutputLine(pcmformat, DefaultPhonePCMBlockSize);
   } catch (LineUnavailableException lue) {
     microphone.close();
     System.out.println(
         "\3b"
             + getClass().getName()
             + ".<init>:\n\tCould not create speaker output stream.\n\t"
             + lue);
   }
   if ((speaker == null) || (microphone == null)) {
     super.run(local, remote, pin, pout);
     return;
   }
   try {
     recorder = new Recorder(pout);
     recorder.start();
     gui = openMonitorGUI("Remote " + remote + " Local " + local);
     pin.skip(pin.available()); // waste whatever we couldn't process in time
     super.run(local, remote, new PhoneCallMonitorInputStream(pin), pout);
     recorder.interrupt();
     gui.dispose();
   } catch (Exception e) {
     System.out.println("3\b" + getClass().getName() + ".run:\n\t" + e);
     e.printStackTrace();
   } finally {
     deactivate();
     microphone.close();
     speaker.close();
     if (gui != null) {
       gui.dispose();
     }
   }
 }
Example #3
0
  @Override
  public void actionPerformed(ActionEvent e) {
    // 对用户不同的选择做出不同的处理
    if (e.getActionCommand().equals("new game")) {
      // 创建游戏界面面板
      mp = new MyPanel("newGame");
      // 启动MyPanel线程
      Thread t = new Thread(mp);
      t.start();
      // 先删除旧Panel
      this.remove(msp);
      this.add(mp);
      // 注册监听
      this.addKeyListener(mp);
      // 显示(刷新JFrame)
      this.setVisible(true);

    } else if (e.getActionCommand().equals("exit")) {
      // 用户点击了退出系统菜单
      // 保存击毁敌人数量.
      Recorder.SaveRecord();

      System.exit(0);
    } // 对存盘退出做处理
    else if (e.getActionCommand().equals("saveExit")) {
      Recorder rd = new Recorder();
      rd.setEts(mp.enemyTanks);
      // 保存击毁敌人的数量和敌人的坐标
      rd.SaveRecAndEnemy();

      // 退出(0代表正常退出,1代表异常退出)
      System.exit(0);
    } else if (e.getActionCommand().equals("continue")) {
      //
      // 创建游戏界面面板
      mp = new MyPanel("con");
      //            mp.flag="con";

      // 启动MyPanel线程
      Thread t = new Thread(mp);
      t.start();
      // 先删除旧Panel
      this.remove(msp);
      this.add(mp);
      // 注册监听
      this.addKeyListener(mp);
      // 显示(刷新JFrame)
      this.setVisible(true);
    }
  }
Example #4
0
  // 画出提示信息的函数
  public void showInfo(Graphics g) {
    // 画出提示信息坦克(该坦克只是提示)
    this.drawTank(80, 330, g, 0, 1);
    g.setColor(Color.blue);
    g.drawString(Recorder.getEnNum() + "", 110, 350);
    this.drawTank(130, 330, g, 0, 0);
    g.setColor(Color.blue);
    g.drawString(Recorder.getMyLife() + "", 165, 350);

    // 画出玩家的总成绩
    g.setColor(Color.BLACK);
    Font f = new Font("娃娃體-繁", Font.BOLD, 20);
    g.setFont(f);
    g.drawString("您的總成績", 420, 30);

    this.drawTank(420, 60, g, 0, 1);

    g.setColor(Color.BLACK);
    g.drawString(Recorder.getAllEnNum() + "", 460, 80);
  }
Example #5
0
  // 判断我的子弹是否击中敌人坦克
  public void hitEnemyTank() {
    // 判断是否击中敌人坦克(遍历)
    for (int i = 0; i < myTank.bb.size(); i++) {
      // 取出子弹
      Bullet mb = myTank.bb.get(i);
      // 判断子弹是否有效,存活
      if (mb.alive) {
        // 取出每个敌人坦克,与子弹判断
        for (int j = 0; j < enemyTanks.size(); j++) {
          // 取出坦克
          EnemyTank et = enemyTanks.get(j);

          if (et.alive) {
            if (this.hitTank(mb, et)) {
              // 减少敌人数量
              Recorder.reduceEnNum();
              // 增加我方战绩
              Recorder.addEnNumRec();
            }
          }
        }
      }
    }
  }
Example #6
0
  // 构造函数
  public MyPanel(String flag) {
    apw.start();

    // 恢复记录
    Recorder.getRecord();
    //        bombs.add(new Bomb(0,0));
    // 括号里的是初始位置
    myTank = new MyTank(100, 100);

    if (flag.equals("newGame")) {
      // 初始化敌方坦克
      for (int i = 0; i < enemySize; i++) {
        // 创建一辆敌人的坦克
        EnemyTank et = new EnemyTank((i + 1) * 50, 0);
        et.setColor(1);
        et.setDirect(2);
        // 將MyPanel的敵人坦克向量交給該敵人坦克
        et.setEts(enemyTanks);

        // 启动敌人的坦克
        Thread t = new Thread(et);
        t.start();
        // 给敌人坦克添加一颗子弹
        Bullet b = new Bullet(et.x + 10, et.y + 30, 2);
        // 加入敌人坦克
        et.bb.add(b);
        Thread t2 = new Thread(b);
        t2.start();
        // 加入
        enemyTanks.add(et);
      }
    } else {

      nodes = new Recorder().getNodesAndEnNums();
      // 初始化敌方坦克
      for (int i = 0; i < nodes.size(); i++) {
        Node node = nodes.get(i);
        // 创建一辆敌人的坦克
        EnemyTank et = new EnemyTank(node.x, node.y);
        et.setColor(1);
        et.setDirect(node.direct);
        // 將MyPanel的敵人坦克向量交給該敵人坦克
        et.setEts(enemyTanks);

        // 启动敌人的坦克
        Thread t = new Thread(et);
        t.start();
        // 给敌人坦克添加一颗子弹
        Bullet b = new Bullet(et.x + 10, et.y + 30, 2);
        // 加入敌人坦克
        et.bb.add(b);
        Thread t2 = new Thread(b);
        t2.start();
        // 加入
        enemyTanks.add(et);
      }
    }
    // 初始化爆炸图片

    //        try {
    //            image1= ImageIO.read(new File("/3.png"));
    //            image2= ImageIO.read(new File("/2.png"));
    //            image3= ImageIO.read(new File("/1.png"));
    //        } catch (IOException e) {
    //            e.printStackTrace();
    //        }
    image1 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/3.png"));
    image2 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/2.png"));
    image3 = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.png"));
    bombs.add(new Bomb(0, 0));
  }