You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Battleship中玩家选择格子并修改显示的功能?

战舰(Battleship)功能实现方案

需求

  • 玩家可识别并选择地图上的特定点位
  • 将选中格子的#替换为X后重新打印地图

现有代码问题分析

你当前的代码能完成初始界面展示、接收玩家坐标输入,但核心功能(更新地图并重新打印)还未实现,同时存在一些体验问题:

  1. 每次进入游戏界面都会重新生成新地图,无法保留之前的选择记录
  2. 验证坐标合法后没有执行替换#为X的操作,也不会重新渲染地图
  3. 输入错误时直接跳回开始界面,打断游戏流程
  4. 未使用turns变量实现回合次数限制

修改后的完整代码

turns = 10
# 只存大写字母,后续统一转大写处理,减少判断逻辑
alphabet = ["A","B","C","D","E","F","G","H","I","J"]

def StartScreen():
    print("Welcome to Battleship!")
    print('''
        1. Start
        2. Exit
    ''')
    try:
        choice = int(input("Enter your number: "))
        if choice == 1:
            GameScreen()
        elif choice == 2:
            exit()
        else:
            print("Please choose a valid number.")
            StartScreen()
    except ValueError:
        print("Please enter a number.")
        StartScreen()

def GameScreen():
    # 初始化10x10的地图,用二维列表保存状态
    grid = [[" # " for _ in range(10)] for _ in range(10)]
    remaining_turns = turns
    
    while remaining_turns > 0:
        print(f"\nRemaining turns: {remaining_turns}")
        # 打印地图表头
        print("   " + "  ".join(alphabet))
        # 打印每一行
        for row_num in range(10):
            print(f"{row_num:2d} " + "".join(grid[row_num]))
        
        print("\n")
        rowx = input("Choose a letter(A-J): ").upper()
        try:
            rowy = int(input("Enter a number(0-9): "))
        except ValueError:
            print("Please enter a valid number(0-9)\n")
            continue
        
        # 验证输入合法性
        if rowx in alphabet and rowy in range(0,10):
            # 转换字母为列索引
            col_idx = alphabet.index(rowx)
            # 修改对应格子为X
            grid[rowy][col_idx] = " X "
            print(f'You chose {rowx}{rowy}\n')
            remaining_turns -= 1
        else:
            print("Please choose a valid point(A-J/0-9)\n")
    
    print("\nGame Over! All turns used.")
    StartScreen()

# 启动游戏
StartScreen()

关键改动说明

  • 改用**二维列表grid**存储地图状态,确保每次修改后能保留更新结果
  • 统一将玩家输入的字母转为大写,简化合法性判断逻辑
  • 新增字母到列索引的转换:通过alphabet.index(rowx)把A-J对应到0-9的列位置
  • 加入回合循环,每次有效选择后减少剩余回合数,用完后结束游戏
  • 优化输入错误处理:数字输入非法时捕获ValueError,仅提示后重新输入,不中断游戏流程
  • 调整地图打印格式,用join方法让排版更整齐,行号用{row_num:2d}对齐

内容的提问来源于stack exchange,提问作者oneskepticalcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:22:55