From f8305d713a6949c8184842538c59e14231a7b942 Mon Sep 17 00:00:00 2001 From: p6xlcrq3f <2020134472@qq.com> Date: Sun, 6 Apr 2025 21:20:33 +0800 Subject: [PATCH] ADD file via upload --- src/GetLevelDialog.java | 141 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 src/GetLevelDialog.java diff --git a/src/GetLevelDialog.java b/src/GetLevelDialog.java new file mode 100644 index 0000000..95edc66 --- /dev/null +++ b/src/GetLevelDialog.java @@ -0,0 +1,141 @@ +package cn.edu.caztc.sokobangame; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JDialog; +import javax.swing.JList; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; + +public class GetLevelDialog extends JDialog { + private DefaultListModel model; + int levelmax, diylevelmax; + JList list; + boolean xuanzhong; + int level = 0; + boolean isDualMode; + private final JPanel contentPanel = new JPanel(); + + public GetLevelDialog(boolean isDualMode) { + this.isDualMode = isDualMode; + setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + setModal(true); + setTitle(isDualMode ? "双人模式选关" : "单人模式选关"); + setBounds(100, 100, 512, 340); + getContentPane().setLayout(new BorderLayout()); + contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); + getContentPane().add(contentPanel, BorderLayout.CENTER); + contentPanel.setLayout(null); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setBounds(328, 52, 103, 173); + contentPanel.add(scrollPane); + + model = new DefaultListModel<>(); + diylevelmax = 1; + levelmax = 1; + String prefix = isDualMode ? MapConfig.DUAL_PREFIX : ""; + String diyPrefix = isDualMode ? MapConfig.DUAL_PREFIX + "diy" : "diy"; + + while (true) { + if (new File(MapConfig.PATH + "\\" + diyPrefix + diylevelmax + ".map").exists()) { + diylevelmax++; + } else if (new File(MapConfig.PATH + "\\" + prefix + levelmax + ".map").exists()) { + levelmax++; + } else { + break; + } + } + + list = new JList<>(model); + // 默认显示官方地图 + UpdataModel(levelmax); + xuanzhong = false; // 默认不勾选自定义 + scrollPane.setViewportView(list); + + JCheckBox checkBox = new JCheckBox("自定义"); + checkBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + if (checkBox.isSelected()) { + // 勾选时显示DIY地图 + UpdataModel(diylevelmax); + xuanzhong = true; + } else { + // 取消勾选时显示官方地图 + UpdataModel(levelmax); + xuanzhong = false; + } + } + }); + // 默认不勾选 + checkBox.setSelected(false); + checkBox.setBounds(328, 23, 103, 23); + contentPanel.add(checkBox); + + JTextPane txtpndtxtdiytxt = new JTextPane(); + txtpndtxtdiytxt.setText(isDualMode ? + "双人模式选关界面,选择地图进行双人游戏" : + "选关界面,你可以选择开发者做出来的地图,也可以自己在游戏界面------自定义------地图编辑器里自己做地图。"); + txtpndtxtdiytxt.setFont(new Font("楷体", Font.PLAIN, 15)); + txtpndtxtdiytxt.setBounds(45, 52, 224, 173); + contentPanel.add(txtpndtxtdiytxt); + + { + JPanel buttonPane = new JPanel(); + buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); + getContentPane().add(buttonPane, BorderLayout.SOUTH); + { + JButton okButton = new JButton("确定"); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + level = list.getSelectedIndex() + 1; + dispose(); + } + }); + okButton.setActionCommand("Cancel"); + buttonPane.add(okButton); + getRootPane().setDefaultButton(okButton); + } + { + JButton cancelButton = new JButton("取消"); + cancelButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + cancelButton.setActionCommand("Cancel"); + buttonPane.add(cancelButton); + } + } + setLocationRelativeTo(null); + setVisible(true); + } + + void UpdataModel(int level) { + model.removeAllElements(); + for (int i = 1; i < level; i++) { + model.addElement((isDualMode ? "双人模式" : "") + "第" + i + "关"); + } + } + + int getValue() { + return level; + } + + boolean isdiy() { + return xuanzhong; + } + + boolean isDualMode() { + return isDualMode; + } +} \ No newline at end of file