该代码是一个 Tank 游戏的主窗口类,继承自 JFrame 类,其中包含了一个 MyPanel 类的实例化对象 myPanel。在构造方法中,首先通过调用 modelChoose() 方法选择游戏的模式,如果返回值为 -1,则直接退出程序。然后创建一个新的线程并启动 myPanel 对象,设置窗口的大小和添加 myPanel 对象到窗口中,并将 myPanel 对象设置为键盘监听器。最后,通过 addWindowListener() 方法添加了一个监听窗口关闭事件的 WindowAdapter 对象,当窗口关闭时,将所有敌方坦克的子弹清空,并将游戏记录对象 Recorder 写入文件中。

public MyFrame() throws Exception {
    int i = modelChoose();
    if (i == -1) {
        System.exit(0); // 程序退出
    }
    myPanel = new MyPanel(i);
    new Thread(myPanel).start();
    this.setSize(1300, 820);
    this.add(myPanel);
    this.addKeyListener(myPanel);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    // 监听关闭窗口事件
    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            try {
                Vector<EnemyTank> tanks = myPanel.getEnemyTanks();
                for (int i = 0; i < tanks.size(); i++) {
                    tanks.get(i).getShots().clear();
                }
                // 对象输出流
                oos = new ObjectOutputStream(new FileOutputStream(new File(MyFrame.class.getResource("../recorder1.txt").toURI())));
                // 将记录对象 Recorder 写到文件
                oos.writeObject(myPanel.getRecorder());
            } catch (Exception e1) {
                e1.printStackTrace();
            } finally {
                if (oos != null) {
                    try {
                        oos.close();
                    } catch (IOException ioException) {
                        ioException.printStackTrace();
                    }
                }
            }
        }
    });
}

代码解析:

  1. 选择游戏模式: modelChoose() 方法用于选择游戏模式,返回值为 -1 表示程序退出。
  2. 创建游戏面板: myPanel = new MyPanel(i); 创建了一个 MyPanel 对象,并传入选择的模式参数。
  3. 启动游戏线程: new Thread(myPanel).start(); 创建一个新的线程并启动 myPanel 对象,使其能够独立运行游戏逻辑。
  4. 设置窗口大小: this.setSize(1300, 820); 设置窗口的大小为 1300x820 像素。
  5. 添加游戏面板: this.add(myPanel); 将 myPanel 对象添加到窗口中,使其在窗口中显示。
  6. 设置键盘监听器: this.addKeyListener(myPanel); 将 myPanel 对象设置为窗口的键盘监听器,以便接收用户按键操作。
  7. 设置默认关闭操作: this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 设置窗口默认关闭操作为退出程序。
  8. 显示窗口: this.setVisible(true); 设置窗口可见。
  9. 监听窗口关闭事件: addWindowListener() 方法添加了一个 WindowAdapter 对象,用于监听窗口关闭事件。当窗口关闭时,该事件会触发 windowClosing() 方法,执行以下操作:
    • 清空所有敌方坦克的子弹:tanks.get(i).getShots().clear();
    • 将游戏记录对象 Recorder 写入文件:oos.writeObject(myPanel.getRecorder());

注意:

  • 该代码中使用了 ObjectOutputStream 将游戏记录对象 Recorder 写入文件,需要确保文件路径正确。
  • 该代码中使用了 Vector 来存储敌方坦克对象,可以使用其他集合类代替。
  • 该代码仅仅是 Tank 游戏主窗口类的基本框架,需要根据具体的游戏逻辑进行扩展。
Java Tank 游戏主窗口代码解析:MyFrame 类

原文地址: https://www.cveoy.top/t/topic/oZQn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录