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
相关产品推荐
相关产品推荐

