最近有小伙伴问我,想用Java写点好玩的小游戏练手,但又怕太难。我立刻想到了经典的数字猜谜游戏Moo,规则简单还带点烧脑,特别适合刚学完基础语法的同学。今天咱们就撸起袖子,从零开始实现它!

一、先搞懂游戏规则
Moo的玩法就像你和电脑玩捉迷藏:电脑随机生成4位不重复数字,你每次猜4个数字,它会用"Bulls"和"Cows"来提示:
- 🐂 Bulls:数字和位置都正确
- 🐄 Cows:数字正确但位置不对
举个栗子🌰
| 谜底 | 猜测 | 提示 |
|---|---|---|
| 1423 | 1234 | 1B2C(数字1位置正确,2、3、4位置错误) |
| 9876 | 6789 | 0B4C |
二、开发步骤分解
咱们把大象装冰箱分三步:
- 生成随机数字
- 处理玩家输入
- 比较并给出提示
1. 生成四位不重复数字
用java.util.Random搞个随机数生成器。注意这里有个坑:要确保四个数字绝对不重复。
Set digits = new HashSet<>;
Random rand = new Random;
while(digits.size< 4) {
digits.add(rand.nextInt(10));
String secret = digits.stream.map(String::valueOf).collect(Collectors.joining); 2. 处理玩家输入
用Scanner读取控制台输入,记得加个验证:
- 必须是4位数字
- 不能有重复数字
Scanner scanner = new Scanner(System.in);
String guess;
do {
System.out.print("输入你的猜测:");
guess = scanner.nextLine;
} while (!isValidGuess(guess));3. 比较数字逻辑
这里要玩点数学游戏了,先算Bulls再算Cows:
int bulls = 0, cows = 0;
for (int i = 0; i< 4; i++) {
if (secret.charAt(i) == guess.charAt(i)) {
bulls++;
} else if (secret.contains(String.valueOf(guess.charAt(i)))) {
cows++;三、完整代码组装
把各个模块像乐高积木一样拼起来:
// 包引用略
public class MooGame {
public static void main(String[] args) {
// 生成谜底
// 游戏循环
// 判断胜负
private static boolean isValidGuess(String input) {
return input.matches("^\\\\d{4}$")
&& input.chars.distinct.count == 4;四、不同实现方式对比
| 功能模块 | 方案A | 方案B |
|---|---|---|
| 随机数生成 | Random类+HashSet | Collections.shuffle取前四位 |
| 输入验证 | 正则表达式 | 逐个字符遍历检查 |
| 结果判断 | 双重循环遍历 | 使用indexOf方法 |
五、实际运行效果
按下运行键,咱们来玩一局试试:
谜底已生成,开始游戏吧!
输入你的猜测:1234
提示:0B2C
输入你的猜测:5678
提示:1B0C
输入你的猜测:0965
提示:2B1C
...窗外的知了还在吱吱叫,键盘敲下最后一个分号时,屏幕上的小奶牛正对着你眨眼睛。把代码发给死党显摆显摆,说不定他明天就带着奶茶来请教啦~





