当前位置: 首页 > news >正文

【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制

编写程序:超强力方法 —— 从战舰游戏到循环控制

在《Head First Java》的第五章节中,作者通过一个简单的战舰游戏示例,深入讲解了如何编写Java程序,并重点介绍了方法循环控制的使用。这一章节的核心思想是:通过模块化的方法和高效的循环控制,我们可以编写出结构清晰、功能强大的程序

今天,我们将通过书中的内容,结合代码示例,来深入理解如何编写一个简单的战舰游戏,并掌握 for 循环和增强 for 循环的使用。

在这里插入图片描述


简单版战舰游戏设计

我们的目标是编写一个简单的战舰游戏,游戏的规则如下:

  1. 游戏板是一个 7x7 的网格,战舰占据连续的 3 个格子。
  2. 玩家通过输入坐标来猜测战舰的位置。
  3. 如果猜中战舰的所有格子,游戏结束,玩家获胜。

游戏设计伪代码

1. 初始化游戏板
2. 随机放置战舰
3. 开始游戏循环:
   a. 获取玩家输入
   b. 检查玩家输入是否命中战舰
   c. 更新游戏状态
   d. 检查游戏是否结束
4. 游戏结束,输出结果

代码实现

1. 初始化游戏板

我们用一个 7x7 的数组来表示游戏板,并用 false 表示未命中,true 表示命中。

public class BattleshipGame {
    private boolean[][] board = new boolean[7][7];  // 游戏板
    private int shipStartRow, shipStartCol;         // 战舰的起始位置
    private int hitsRemaining = 3;                  // 剩余未命中的战舰格子

    public static void main(String[] args) {
        BattleshipGame game = new BattleshipGame();
        game.setupGame();
        game.startGame();
    }

    // 初始化游戏
    void setupGame() {
        // 随机放置战舰
        shipStartRow = (int) (Math.random() * 5);  // 0-4 之间的随机数
        shipStartCol = (int) (Math.random() * 5);  // 0-4 之间的随机数
        for (int i = 0; i < 3; i++) {
            board[shipStartRow][shipStartCol + i] = true;  // 战舰占据连续的 3 个格子
        }
    }
}

2. 开始游戏循环

我们使用一个 while 循环来实现游戏的主逻辑,直到玩家猜中所有战舰格子为止。

void startGame() {
    Scanner scanner = new Scanner(System.in);
    while (hitsRemaining > 0) {
        System.out.print("Enter a row (0-6): ");
        int row = scanner.nextInt();
        System.out.print("Enter a column (0-6): ");
        int col = scanner.nextInt();

        if (checkHit(row, col)) {
            System.out.println("Hit!");
            hitsRemaining--;
        } else {
            System.out.println("Miss!");
        }
    }
    System.out.println("You sank my battleship!");
}

// 检查玩家输入是否命中战舰
boolean checkHit(int row, int col) {
    if (row >= 0 && row < 7 && col >= 0 && col < 7) {
        return board[row][col];
    }
    return false;
}

循环控制:for 循环与增强 for 循环

1. for 循环

for 循环是Java中最常用的循环结构,适用于已知循环次数的情况。

语法
for (初始化; 条件; 更新) {
    // 循环体
}
代码示例
for (int i = 0; i < 7; i++) {
    for (int j = 0; j < 7; j++) {
        System.out.print(board[i][j] ? "X " : "O ");
    }
    System.out.println();
}

2. 增强 for 循环

增强 for 循环(也称为 for-each 循环)适用于遍历数组或集合中的元素。

语法
for (元素类型 元素变量 : 数组或集合) {
    // 循环体
}
代码示例
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
    System.out.println(number);
}

完整代码

import java.util.Scanner;

public class BattleshipGame {
    private boolean[][] board = new boolean[7][7];  // 游戏板
    private int shipStartRow, shipStartCol;         // 战舰的起始位置
    private int hitsRemaining = 3;                  // 剩余未命中的战舰格子

    public static void main(String[] args) {
        BattleshipGame game = new BattleshipGame();
        game.setupGame();
        game.startGame();
    }

    // 初始化游戏
    void setupGame() {
        // 随机放置战舰
        shipStartRow = (int) (Math.random() * 5);  // 0-4 之间的随机数
        shipStartCol = (int) (Math.random() * 5);  // 0-4 之间的随机数
        for (int i = 0; i < 3; i++) {
            board[shipStartRow][shipStartCol + i] = true;  // 战舰占据连续的 3 个格子
        }
    }

    // 开始游戏
    void startGame() {
        Scanner scanner = new Scanner(System.in);
        while (hitsRemaining > 0) {
            System.out.print("Enter a row (0-6): ");
            int row = scanner.nextInt();
            System.out.print("Enter a column (0-6): ");
            int col = scanner.nextInt();

            if (checkHit(row, col)) {
                System.out.println("Hit!");
                hitsRemaining--;
            } else {
                System.out.println("Miss!");
            }
        }
        System.out.println("You sank my battleship!");
    }

    // 检查玩家输入是否命中战舰
    boolean checkHit(int row, int col) {
        if (row >= 0 && row < 7 && col >= 0 && col < 7) {
            return board[row][col];
        }
        return false;
    }
}

总结

通过《Head First Java》第五章节的内容,我们实现了一个简单的战舰游戏,并深入理解了 for 循环和增强 for 循环的使用。方法的使用使得代码更加模块化,而循环控制则帮助我们高效地处理重复任务。

希望这篇文章能帮助你更好地理解如何编写Java程序,并在实际开发中灵活运用这些知识!


互动话题:你在编写Java程序时使用过哪些循环结构?欢迎在评论区分享你的经验和心得!

相关文章:

  • 【C语言】指针(6)
  • 通俗理解什么是云原生?
  • Spring Boot 3 集成 RabbitMQ 实践指南
  • 《操作系统 - 清华大学》 8 -6:进程管理:进程状态变化模型
  • 3、优先级翻转问题
  • Ubuntu中部署deepseek
  • 【漫话机器学习系列】101.特征选择法之Lasso(Lasso For Feature Selection)
  • 离子阱量子计算机的原理与应用:开辟量子计算的新天地
  • 代码随想录|62.不同路径,63.不同路径Ⅱ,343.整数拆分
  • 论文笔记(七十二)Reward Centering(四)
  • Linux系统移植之对NXP的Uboot修改后移植
  • 给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
  • Comfyui Windows Desktop桌面版便携版安装教程
  • 深入了解 MySQL 中的 JSON_CONTAINS
  • com库原理使用
  • Python 环境管理介绍
  • 【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeek+RAGFlow构建个人知识库)
  • 基于 go-rwt 在 Windows 环境下对 Go Web 应用进行 HTTP 压力测试
  • 数仓搭建实操(传统数仓oracle):DWD数据明细层
  • Python绘画案例2——用Python写动态小人发射爱心~~,包含源码
  • 上海通报5起违反中央八项规定精神问题
  • 日本大米价格连续16周上涨,再创最高纪录
  • 贸促会答澎湃:5月22日将举办2025年贸易投资促进峰会
  • 《奇袭白虎团》原型人物之一赵顺合辞世,享年95岁
  • 十四届全国人大常委会第十五次会议在京举行,审议民营经济促进法草案等
  • 银川市市长信箱被指已读乱回,官方回应