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

WPF C#战舰游戏:如何检查Grid所有子元素是否满足获胜条件?

战舰游戏获胜判定逻辑修正

你的问题出在当前代码只要找到一个被击中的舰船格子就立刻弹窗,而没有验证所有敌方舰船格子是否都已被击中。以下是修正方案:

核心思路

先筛选出所有代表敌方舰船的格子(Opacity为1.00001的按钮),再检查这些格子是否全部被击中(背景为红色),只有全部满足时才触发获胜提示。

修正后的代码

private void checkOurWin()
{
    // 筛选所有属于敌方舰船的按钮
    var enemyShipTiles = gridEnemy.Children.OfType<Button>()
                            .Where(btn => btn.Opacity == 1.00001);

    // 检查所有舰船格子是否都已被击中
    bool allShipsDestroyed = enemyShipTiles.All(btn => 
        ((SolidColorBrush)btn.Background).Color == Colors.Red);

    if (allShipsDestroyed)
    {
        MessageBox.Show("You have won congratulations!");
    }
}

额外说明

  • 使用OfType<Button>()避免强制类型转换出错,确保只处理Grid里的Button元素
  • 直接比较Background == Brushes.Red可能因为Brush引用问题失效,改用检查Color的方式更可靠
  • All()方法会遍历所有舰船格子,只有当每一个都满足被击中条件时,才返回true,此时才弹出获胜提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:05:31