案例展示 - CSSE1001 Assignment 1 Battleships
编辑
20
2024-09-16
案例展示 - CSSE1001 Assignment 1 Battleships
任务概述:
本次作业要求学生实现经典的战舰(Battleships)游戏的文本版。战舰是一款双人游戏,玩家首先在自己的棋盘上秘密放置舰船,然后轮流猜测对方棋盘上的位置以攻击对方的舰船。当一方玩家击中了所有对方的舰船位置后获胜。本作业涵盖了游戏的完整实现,包括棋盘的设置、攻击逻辑以及胜利条件判定。学生将根据已学过的Python编程知识,逐步完成所需功能模块。
游戏玩法:
- 设置阶段:
- 游戏开始时,系统会提示用户输入棋盘的大小(假设用户输入的是2到9之间的数字)。
- 然后,用户将输入一个以逗号分隔的数字字符串,表示双方玩家将使用的舰船大小。
- 接下来,双方玩家轮流在各自的棋盘上放置舰船。如果玩家输入的舰船无效(例如超出棋盘或与其他舰船重叠),系统会提示重新输入。
- 轮流攻击阶段:
- 玩家轮流攻击对方的棋盘。玩家1先开始。
- 在每轮攻击中,显示当前游戏状态(不显示舰船的位置)。
- 玩家选择攻击位置,系统检测攻击是否命中舰船,并更新棋盘状态。
- 当一方玩家击中对方所有舰船时,游戏结束并宣布获胜者。
代码实现:
1. 基础功能函数:
create_empty_board(board_size: int) -> list[str]
: 创建一个指定大小的空棋盘,棋盘用~
表示水面。get_square(board: list[str], position: tuple[int, int]) -> str
: 获取指定位置的棋盘字符。change_square(board: list[str], position: tuple[int, int], new_square: str) -> None
: 改变指定位置的棋盘字符。coordinate_to_position(coordinate: str) -> tuple[int, int]
: 将用户输入的坐标转换为棋盘上的位置。
2. 舰船操作函数:
can_place_ship(board: list[str], ship: list[tuple[int, int]]) -> bool
: 判断舰船能否放置在指定位置。place_ship(board: list[str], ship: list[tuple[int, int]]) -> None
: 将舰船放置到棋盘上。attack(board: list[str], position: tuple[int, int]) -> None
: 执行对棋盘上指定位置的攻击,如果命中舰船,则更新为沉船状态。
3. 辅助功能函数:
display_board(board: list[str], show_ships: bool) -> None
: 以人类可读的格式显示棋盘。如果show_ships
为False
,则隐藏舰船位置。get_player_hp(board: list[str]) -> int
: 计算玩家剩余的舰船部分,显示其生命值(HP)。
4. 高级功能函数:
is_valid_coordinate(coordinate: str, board_size: int) -> tuple[bool, str]
: 检查输入的坐标是否合法,并返回错误信息。setup_board(board_size: int, ship_sizes: list[int]) -> list[str]
: 设置玩家的棋盘并放置舰船,提供交互提示以确保舰船正确放置。
5. 游戏控制函数:
play_game() -> None
: 实现完整的游戏流程,包括设置棋盘、轮流攻击以及最终的胜利判断。确保所有提示和输出都与要求一致。
案例展示:
1. 棋盘生成与展示:
board = create_empty_board(4)
display_board(board, True)
输出:
/ABCD
1|~~~~
2|~~~~
3|~~~~
4|~~~~
2. 舰船放置与攻击:
board = ['~~~~', 'OO~~', '~~~~', '~~~~']
place_ship(board, [(0, 0), (0, 1)])
attack(board, (0, 0))
display_board(board, False)
输出:
/ABCD
1|X~~~
2|~~~~
3|~~~~
4|~~~~
3. 游戏流程展示:
在实际游戏中,玩家会被提示输入棋盘大小、舰船大小和坐标进行攻击。游戏将根据攻击结果更新棋盘状态并最终决定胜利者。
作业要求与评分标准:
功能性(6分):代码将通过一系列自动测试来检查功能是否正确。作业的最终得分取决于通过的测试数量。学生需确保输出格式与预期一致,否则测试将失败。
代码风格(4分):手动评估代码的可读性、变量命名、逻辑结构以及注释情况。代码应保持简洁、清晰,并且遵循良好的编程实践。
联系我们
WeChat:pythonyt001
Email: [email protected]
- 0
-
分享