用TDD开发猜数字游戏的Java教程

需积分: 9 0 下载量 136 浏览量 更新于2024-12-24 收藏 9KB ZIP 举报
资源摘要信息:"猜数字游戏Java实现的TDD工作坊介绍" 在本节工作坊中,参与者将通过测试驱动开发(TDD)方法学习如何开发一个简单的猜数字游戏。以下是游戏的基本规则与流程的详细说明: 1. 游戏规则概述: - 游戏开始时,系统会随机生成一个包含四个不重复数字的序列。 - 玩家需要猜测这个数字序列,并输入他们认为正确的四个数字。 - 系统将根据玩家的输入给出反馈。 - 反馈包括两种类型: - A:表示玩家猜测的数字既正确又在正确的位置。 - B:表示玩家猜测的数字正确,但位置不正确。 - 反馈的结果以“数字A数字B”的格式返回,例如“2A1B”。 2. 游戏示例: - 系统生成数字序列:"1234" - 玩家输入:"1234",系统返回:"4A0B"(因为玩家猜对了所有数字及其位置) - 玩家输入:"4321",系统返回:"0A4B"(因为玩家猜对了所有数字,但位置都不对) - 玩家输入:"1324",系统返回:"1A1B"(因为玩家猜对了两个数字及其位置,并且猜对了另外两个数字但位置不对) 3. 工作坊流程: - 每位参与者将首先编写代码。 - 然后展示自己的代码,并与团队成员一起进行集体讨论。 - 讨论后,参与者将开始下一轮的工作。 4. 准备工作: - 参与者需要自备笔记本电脑。 - 确保安装了IntelliJ CE(社区版)开发环境。 - 克隆本工作坊项目,确保使用Maven执行测试能成功通过。 5. 项目结构: - 项目名称为“GuessNumber”,其中包含了一个名为“Guess Number Game”的模块。 - 通过TDD方法来指导整个开发流程,强调测试的优先级。 6. TDD方法论: - TDD是软件开发中一种迭代方法,要求开发者首先编写针对功能的测试用例,然后再编写满足这些测试的代码。 - TDD通常遵循“红-绿-重构”的循环模式,即先写一个失败的测试(红),编写代码使测试通过(绿),然后重构代码以提高质量(重构)。 7. 项目文件: - 项目文件名包括“guess-number-java-master”,表明这是一个主版本的项目文件夹。 通过本工作坊,参与者将深入了解并实践以下知识点: - 测试驱动开发(TDD)的理论与实践。 - Java编程语言的基本语法和结构。 - 编写单元测试和测试用例,使用JUnit或其他测试框架进行自动化测试。 - 处理字符串和数组。 - Java中随机数的生成和使用。 - 字符串的比较和处理。 - 软件开发流程和版本控制系统的使用,例如Git和Maven。 整个工作坊强调的是编写可测试的、简洁的代码,同时提供持续的反馈,以确保最终的代码质量。参与者在实践中将学习如何将TDD原则应用到实际开发中,并通过不断的测试和重构来提升代码的可读性、可维护性和性能。

以下代码只用awt不用swing表示出来package chap03; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class GuessNumber extends JFrame implements ActionListener { private JLabel promptLabel, resultLabel; private JTextField inputField; private JButton guessButton; private int targetNumber, guessCount, maxTryTime; public GuessNumber () { targetNumber = (int)(Math.random()*10)+1; guessCount = 0; maxTryTime = 5; promptLabel = new JLabel("请输入一个0~10之间的数字:"); inputField = new JTextField(10); guessButton = new JButton("猜!"); guessButton.addActionListener(this); resultLabel = new JLabel(""); JPanel panel = new JPanel(); panel.add(promptLabel); panel.add(inputField); panel.add(guessButton); panel.add(resultLabel); this.add(panel); this.setTitle("猜数字游戏界面"); this.setSize(300, 150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent e) { String inputText = inputField.getText(); try { int guessNumber = Integer.parseInt(inputText); guessCount++; if (guessCount < maxTryTime) { int c = maxTryTime - guessCount; if (guessNumber > targetNumber) { resultLabel.setText("输入的过大,您还有" + c + "次机会"); } else if (guessNumber < targetNumber) { resultLabel.setText("输入的过小,您还有" + c + "次机会"); } else { resultLabel.setText("恭喜你,猜对了!你一共猜了" + guessCount + "次"); guessButton.setEnabled(false); } } else { resultLabel.setText("抱歉游戏失败"); guessButton.setEnabled(false); } } catch (NumberFormatException ex) { resultLabel.setText("输入异常,请重新输入!!!"); } } public static void main(String[] args) { new GuessNumber(); } }

2023-05-30 上传

只用AWT改写package chap03; import javax.swing.; import java.awt.; import java.awt.event.*; public class GuessNumber extends JFrame implements ActionListener { private JLabel promptLabel, resultLabel; private JTextField inputField; private JButton guessButton; private int targetNumber, guessCount, maxTryTime; public GuessNumber () { targetNumber = (int)(Math.random()*10)+1; guessCount = 0; maxTryTime = 5; promptLabel = new JLabel("请输入一个0~10之间的数字:"); inputField = new JTextField(10); guessButton = new JButton("猜!"); guessButton.addActionListener(this); resultLabel = new JLabel(""); JPanel panel = new JPanel(); panel.add(promptLabel); panel.add(inputField); panel.add(guessButton); panel.add(resultLabel); this.add(panel); this.setTitle("猜数字游戏"); this.setSize(300, 150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent e) { String inputText = inputField.getText(); try { int guessNumber = Integer.parseInt(inputText); guessCount++; if (guessCount < maxTryTime) { int c = maxTryTime - guessCount; if (guessNumber > targetNumber) { resultLabel.setText("输入的过大,您还有" + c + "次机会"); } else if (guessNumber < targetNumber) { resultLabel.setText("输入的过小,您还有" + c + "次机会"); } else { resultLabel.setText("恭喜你,猜对了!你一共猜了" + guessCount + "次"); guessButton.setEnabled(false); } } else { resultLabel.setText("抱歉游戏失败"); guessButton.setEnabled(false); } } catch (NumberFormatException ex) { resultLabel.setText("输入异常,请重新输入!!!"); } } public static void main(String[] args) { new GuessNumber(); } }并添加退出按钮 输出代码

2023-05-30 上传