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

C#战舰游戏坐标输入问题:无法处理“4 a”格式的攻击指令

C#战舰游戏问题排查与修复

一、输入格式错误的核心原因

输入“4 a”抛出Input string was not in a correct format,基本是以下几种情况导致:

  • 直接用int.Parse()或Convert.ToInt32()处理列字母(比如"a"),强行将非数字字符串转整数
  • 输入拆分时没处理空格、大小写差异,比如逻辑只支持大写字母,但用户输入了小写
  • 行号转数组索引时,没有正确适配“底部开始1-10”到“数组0-9”的转换逻辑

二、针对性修复方案

1. 输入解析逻辑修正

处理“行号 字母”格式的输入,按以下步骤实现:

  • 拆分输入:用带去空选项的分割方法,避免多余空格干扰
  • 列字母转索引:兼容大小写,将A-J转为0-9的数组索引
  • 行号转索引:根据“底部为1”的规则,转换为数组的0-9索引(假设数组索引0对应底部行)

2. 完整输入解析代码示例

public (int rowIndex, int colIndex) ParseAttackInput(string input)
{
    // 拆分输入,自动移除空项
    var inputParts = input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    if (inputParts.Length != 2)
    {
        throw new ArgumentException("输入格式错误,需为「行号 列字母」格式,例如:4 A");
    }

    // 解析行号:用TryParse避免格式错误直接崩溃
    if (!int.TryParse(inputParts[0], out int rowNum) || rowNum < 1 || rowNum > 10)
    {
        throw new ArgumentException("行号必须是1-10之间的有效整数");
    }
    // 底部行1对应数组索引0,行10对应索引9
    int rowIndex = 10 - rowNum;

    // 解析列字母:兼容大小写
    if (inputParts[1].Length != 1 || !char.IsLetter(inputParts[1][0]))
    {
        throw new ArgumentException("列标识必须是单个字母(A-J)");
    }
    char colChar = char.ToUpper(inputParts[1][0]);
    int colIndex = colChar - 'A';
    if (colIndex < 0 || colIndex > 9)
    {
        throw new ArgumentException("列标识必须是A-J之间的字母");
    }

    return (rowIndex, colIndex);
}

3. 战舰摧毁逻辑校验

确保摧毁判断逻辑准确:

  • 提前统计棋盘上所有代表战舰的单元格总数(比如14个)
  • 每次攻击击中战舰时,累计击中次数
  • 当攻击次数达到14次时,对比累计击中数是否等于战舰总单元格数:相等则返回"destroyed",否则返回"not destroyed"

三、常见避坑提醒

  • 必须用int.TryParse()替代int.Parse(),避免非数字输入直接抛出格式错误
  • 强制将列字母转为大写/小写,兼容用户的大小写输入习惯
  • 行号转换逻辑要和棋盘存储结构匹配:如果你的数组索引0对应顶部行,需把转换逻辑改成rowIndex = rowNum - 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:25:22