编写程序:超强力方法 —— 从战舰游戏到循环控制
在《Head First Java》的第五章节中,作者通过一个简单的战舰游戏示例,深入讲解了如何编写Java程序,并重点介绍了方法和循环控制的使用。这一章节的核心思想是:通过模块化的方法和高效的循环控制,我们可以编写出结构清晰、功能强大的程序。
今天,我们将通过书中的内容,结合代码示例,来深入理解如何编写一个简单的战舰游戏,并掌握 for
循环和增强 for
循环的使用。
简单版战舰游戏设计
我们的目标是编写一个简单的战舰游戏,游戏的规则如下:
- 游戏板是一个 7x7 的网格,战舰占据连续的 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程序时使用过哪些循环结构?欢迎在评论区分享你的经验和心得!