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(); } }
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(); } } }
@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); } }
// 画出提示信息的函数 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); }
// 判断我的子弹是否击中敌人坦克 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(); } } } } } }
// 构造函数 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)); }