品牌型网站建设理论,三门峡网站网站建设,腾讯企业邮箱登录入口手机版,可以做cps合作的棋牌网站1、演示视频 基于Java Swing的猜数字小游戏2、项目截图 三、设计说明
3.1 整体架构设计
项目采用单一类封装所有功能#xff08;GuessNumberGame#xff09;#xff0c;继承自Swing的JFrame类#xff0c;遵循“界面与逻辑结合”的设计模式#xff08;适合小型桌面应用GuessNumberGame继承自Swing的JFrame类遵循“界面与逻辑结合”的设计模式适合小型桌面应用主要分为以下模块组件初始化模块通过initComponents()方法初始化所有GUI组件窗口、面板、输入框、按钮、文本域等设置组件属性和布局。游戏数据初始化模块通过initGame()方法初始化游戏核心数据谜底、猜测次数、猜测历史集合、数字范围最大值。事件监听模块通过bindEvents()方法为按钮、输入框、下拉框绑定事件监听器处理用户的交互操作。业务逻辑处理模块包含handleSubmit()处理提交猜测、handleReset()处理游戏重置、setMaxNumberByDifficulty()根据难度设置数字范围、updateGuessRecord()更新猜测历史显示等方法处理核心业务逻辑。3.2 界面布局设计界面采用Swing的边界布局BorderLayout和流式布局FlowLayout、网格布局GridLayout组合使用分为三个主要区域顶部区域包含难度选择下拉框和游戏提示标签使用流式布局居中显示。中间区域包含输入框和提交按钮使用流式布局居中显示。底部区域分为上下两部分上部分包含提示标签和猜测历史滚动文本域边界布局下部分包含重置按钮流式布局整体使用网格布局。3.3 数据结构设计int targetNumber存储随机生成的谜底数字。int guessCount记录用户的猜测次数。ListInteger guessNumbers存储用户本次游戏的所有猜测数字使用ArrayList实现支持动态添加和遍历。int maxNumber存储当前难度对应的数字范围最大值。3.4 组件设计组件类型组件名称功能描述JComboBoxdifficultyComboBox难度等级选择下拉框提供三个难度选项JTextFieldinputField用户输入猜测数字的文本框JButtonsubmitButton提交用户猜测的按钮JButtonresetButton重置游戏的按钮JLabelhintLabel显示游戏提示信息的标签JTextArea JScrollPaneguessRecordTextArea显示猜测历史的文本域包裹在滚动面板中四、算法说明4.1 随机数生成算法使用Java内置的Random类生成指定范围的随机整数核心代码逻辑步骤1根据难度等级确定数字范围的最大值maxNumber如简单难度为50。步骤2调用Random.nextInt(maxNumber)生成0到maxNumber-1的随机整数。步骤3将生成的随机数加1得到1到maxNumber的随机整数即谜底。该算法保证了随机数在指定范围内均匀分布满足游戏的随机性要求。4.2 猜测结果判断算法核心逻辑为比较用户输入的数字与谜底的大小关系步骤如下获取用户输入的文本内容进行非空、格式、范围验证。将验证通过的文本转换为整数userInput。比较userInput与targetNumber若userInput targetNumber提示“猜大了”并记录猜测次数。若userInput targetNumber提示“猜小了”并记录猜测次数。若userInput targetNumber提示猜对了显示猜测次数并禁用相关组件。4.3 猜测历史拼接算法将guessNumbers集合中的数字拼接为字符串显示在文本域中核心逻辑判断集合是否为空若为空则显示“你猜过的数字无”。若集合非空使用StringBuilder拼接字符串开头为“你猜过的数字”后续依次添加集合中的数字数字之间用中文逗号分隔。遍历集合时判断是否为最后一个元素若不是则添加分隔符避免末尾出现多余符号。使用StringBuilder而非字符串拼接提升了字符串拼接的效率尤其在猜测次数较多时效果明显。五、测试说明5.1 测试环境操作系统Windows 10/11、macOS、Linux兼容Java的操作系统均可。JDK版本JDK 8、JDK 11、JDK 17测试验证兼容各版本。开发工具IntelliJ IDEA 2023.1、Eclipse 2022-12。5.2 测试用例测试用例ID测试场景测试步骤预期结果测试结果TC001空输入提交1. 打开游戏2. 直接点击提交按钮提示“请输入数字后再提交”输入框保持为空通过TC002非数字输入1. 打开游戏2. 输入“abc”并提交提示“请输入有效的整数”输入框清空通过TC003超出范围输入简单难度1. 选择简单难度1-502. 输入“51”并提交提示“请输入1到50之间的数字”输入框清空通过TC004猜大了提示1. 中等难度谜底为502. 输入“60”并提交提示“猜大了你已经猜了1次”输入框清空历史记录添加60通过TC005猜小了提示1. 中等难度谜底为502. 输入“40”并提交提示“猜小了你已经猜了1次”输入框清空历史记录添加40通过TC006猜对数字1. 中等难度谜底为502. 输入“50”并提交提示“恭喜你猜对了谜底是50你一共猜了N次”输入框和提交按钮禁用通过TC007难度切换1. 打开游戏选择简单难度2. 切换为困难难度游戏重置数字范围变为1-200输入框和历史记录清空通过TC008重置游戏1. 猜对数字后2. 点击重置游戏按钮游戏重置所有组件恢复可用输入框和历史记录清空通过TC009大量猜测记录1. 连续输入20个不同数字并提交历史记录文本域显示所有数字出现滚动条可滚动查看通过TC010回车键提交1. 输入数字2. 按回车键与点击提交按钮效果一致正常处理猜测逻辑通过5.3 测试结论所有测试用例均通过验证程序能够正确处理各种输入场景和用户操作功能完整交互体验良好无明显bug和异常情况。六、关键代码6.1 组件初始化核心代码/** * 初始化所有GUI组件 */ private void initComponents() { // 设置窗口属性 setTitle(猜数字小游戏); setSize(550, 320); // 适配滚动面板的窗口大小 setLocationRelativeTo(null); // 窗口居中 setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); // 禁止调整窗口大小 // 创建主面板使用边界布局 mainPanel new JPanel(new BorderLayout(10, 10)); mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); // 顶部面板难度选择 标题提示 JPanel topPanel new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 0)); JLabel difficultyLabel new JLabel(难度选择); // 初始化难度下拉框默认选中中等 difficultyComboBox new JComboBox(new String[]{简单(1-50), 中等(1-100), 困难(1-200)}); difficultyComboBox.setSelectedIndex(1); JLabel titleLabel new JLabel(猜一个对应范围的整数); topPanel.add(difficultyLabel); topPanel.add(difficultyComboBox); topPanel.add(titleLabel); mainPanel.add(topPanel, BorderLayout.NORTH); // 中间面板输入框和提交按钮 JPanel centerPanel new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 0)); inputField new JTextField(10); submitButton new JButton(提交); centerPanel.add(inputField); centerPanel.add(submitButton); mainPanel.add(centerPanel, BorderLayout.CENTER); // 底部面板提示历史记录 重置按钮 JPanel bottomPanel new JPanel(new GridLayout(2, 1, 10, 10)); JPanel hintRecordPanel new JPanel(new BorderLayout(10, 0)); hintLabel new JLabel(请开始猜数字吧, SwingConstants.CENTER); // 初始化猜测历史文本域支持滚动和换行 guessRecordTextArea new JTextArea(3, 30); guessRecordTextArea.setEditable(false); guessRecordTextArea.setLineWrap(true); guessRecordTextArea.setWrapStyleWord(true); guessRecordTextArea.setText(你猜过的数字无); JScrollPane scrollPane new JScrollPane(guessRecordTextArea); scrollPane.setBorder(BorderFactory.createTitledBorder(猜测历史)); hintRecordPanel.add(hintLabel, BorderLayout.NORTH); hintRecordPanel.add(scrollPane, BorderLayout.CENTER); JPanel resetPanel new JPanel(new FlowLayout(FlowLayout.CENTER)); resetButton new JButton(重置游戏); resetPanel.add(resetButton); bottomPanel.add(hintRecordPanel); bottomPanel.add(resetPanel); mainPanel.add(bottomPanel, BorderLayout.SOUTH); }6.2 提交猜测核心逻辑代码/** * 处理提交猜数字的逻辑 */ private void handleSubmit() { // 获取输入内容并去除首尾空格 String inputText inputField.getText().trim(); // 验证输入是否为空 if (inputText.isEmpty()) { hintLabel.setText(请输入数字后再提交); return; } int userInput; try { // 转换为整数处理非数字输入异常 userInput Integer.parseInt(inputText); } catch (NumberFormatException ex) { hintLabel.setText(请输入有效的整数); inputField.setText(); return; } // 验证数字是否在指定范围内 if (userInput 1 || userInput maxNumber) { hintLabel.setText(请输入1到 maxNumber 之间的数字); inputField.setText(); return; } // 猜测次数加1 guessCount; // 添加到猜测历史集合 guessNumbers.add(userInput); // 更新历史记录显示 updateGuessRecord(); // 判断猜测结果 if (userInput targetNumber) { hintLabel.setText(猜大了你已经猜了 guessCount 次); inputField.setText(); } else if (userInput targetNumber) { hintLabel.setText(猜小了你已经猜了 guessCount 次); inputField.setText(); } else { // 猜对数字显示结果并禁用相关组件 hintLabel.setText(恭喜你猜对了谜底是 targetNumber 你一共猜了 guessCount 次); inputField.setEnabled(false); submitButton.setEnabled(false); difficultyComboBox.setEnabled(false); } // 输入框获得焦点方便继续输入 inputField.requestFocus(); }6.3 猜测历史更新代码/** * 更新猜测记录的界面显示优化拼接逻辑避免多余符号 */ private void updateGuessRecord() { if (guessNumbers.isEmpty()) { guessRecordTextArea.setText(你猜过的数字无); } else { // 使用StringBuilder高效拼接字符串 StringBuilder sb new StringBuilder(你猜过的数字); for (int i 0; i guessNumbers.size(); i) { sb.append(guessNumbers.get(i)); // 最后一个数字后不添加逗号 if (i ! guessNumbers.size() - 1) { sb.append(); } } guessRecordTextArea.setText(sb.toString()); } }6.4 难度等级处理代码/** * 根据难度选择设置数字范围的最大值 */ private void setMaxNumberByDifficulty() { int selectedIndex difficultyComboBox.getSelectedIndex(); switch (selectedIndex) { case 0: // 简单难度1-50 maxNumber 50; break; case 1: // 中等难度1-100 maxNumber 100; break; case 2: // 困难难度1-200 maxNumber 200; break; default: // 默认中等难度 maxNumber 100; } }6.5 游戏重置代码/** * 处理重置游戏的逻辑 */ private void handleReset() { // 重新初始化游戏数据 initGame(); // 清空输入框 inputField.setText(); // 恢复组件功能 inputField.setEnabled(true); submitButton.setEnabled(true); difficultyComboBox.setEnabled(true); // 重置提示文字 hintLabel.setText(请开始猜数字吧); // 重置历史记录显示 guessRecordTextArea.setText(你猜过的数字无); // 输入框获得焦点 inputField.requestFocus(); }