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

news/2025/2/26 1:39:47

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

在《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程序时使用过哪些循环结构?欢迎在评论区分享你的经验和心得!


http://www.niftyadmin.cn/n/5867043.html

相关文章

MySQL 最左前缀原则:原理、应用与优化

目录 引言 什么是复合索引&#xff1f; 什么是最左前缀原则&#xff1f; 示例 最左前缀原则的原理 最左前缀原则的应用场景 1. 等值查询 2. 范围查询 3. 部分列查询 4. 排序和分组 最左前缀原则的优化技巧 1. 合理设计复合索引 2. 避免跳过索引列 3. 覆盖索引 4.…

API技术深度解析:构建高效、安全与可扩展的接口服务

在当今的数字化时代&#xff0c;应用程序接口&#xff08;API&#xff0c;Application Programming Interface&#xff09;已成为连接不同软件系统和服务的桥梁&#xff0c;是推动数字化转型的关键技术之一。无论是企业内部系统集成、第三方服务接入&#xff0c;还是面向开发者…

[java基础-JVM篇]2_垃圾收集器与内存分配策略

学习权重30%。 理解问题&#xff1a; 垃圾收集器的特点与 运作原理&#xff0c;JVM自动内存分配与回收的主要规则。 目录 判断对象存活 引用计数法Reference Counting 缺陷 可达性分析&#xff08;Reachability Analysis&#xff09;算法 可作为GC Roots的对象 引用的扩展 进行…

CI/CD的定义

CI/CD&#xff08;持续集成/持续部署&#xff09;是一种软件开发实践&#xff0c;旨在通过自动化构建、测试和部署过程&#xff0c;提高软件开发的效率和质量。以下是对CI/CD的详细介绍&#xff1a; CI/CD的定义 持续集成&#xff08;CI&#xff09;Continuous Integration (…

【javaEE】计算机是如何工作的(基础常识)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

1. Nacos 全面解析与使用指南

一、什么是 Nacos Nacos 是一个致力于帮助开发者更轻松构建云原生应用的动态服务发现、配置管理和服务管理平台。 1.1 Nacos 功能 1.1.1 配置中心 配置中心是集中化管理配置的关键服务&#xff0c;主要作用显著&#xff1a;集中管理配置信息、动态更新配置、配置信息共享、…

鸿蒙开发深入浅出04(首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影)

鸿蒙开发深入浅出04&#xff08;首页数据渲染、搜索、Stack样式堆叠、Grid布局、shadow阴影&#xff09; 1、效果展示2、ets/pages/Home.ets3、ets/views/Home/SearchBar.ets4、ets/views/Home/NavList.ets5、ets/views/Home/TileList.ets6、ets/views/Home/PlanList.ets7、后端…

Linux放行端口

8080这个端口测试看telnet是不通的&#xff0c;您服务器内是否有对应的业务监听了这个端口呢&#xff1f;您到服务器内执行下&#xff1a; netstat -nltp |grep 8080 同时服务器内执行下&#xff1a; systemctl status firewalld iptables -nL 截图反馈下&#xff0c;我看下防火…