From 492c1ea9f9b524cc2d0809cac7beb5dd0e77bb5b Mon Sep 17 00:00:00 2001 From: Konstantin Dyachenko Date: Sun, 7 Jun 2026 01:17:25 +0700 Subject: [PATCH] [Fix] Flag bug --- Assets/Scenes/SampleScene.unity | 54 +++-------------------------- Assets/Scripts/Core/BoardService.cs | 16 +++++++-- 2 files changed, 18 insertions(+), 52 deletions(-) diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index fc76a75..2656f6a 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -311,30 +311,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1c906a10872edd04480e534703fc4fea, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::Minesweeper.Presentation.Views.GameView - gameRoot: {fileID: 289057768} - pauseRoot: {fileID: 0} - resultRoot: {fileID: 0} - boardPanel: {fileID: 0} - gridLayoutGroup: {fileID: 0} - pauseButton: {fileID: 0} - restartButton: {fileID: 0} - resumeButton: {fileID: 0} - mainMenuButton: {fileID: 0} - resultRestartButton: {fileID: 0} - resultMainMenuButton: {fileID: 0} - resultText: {fileID: 0} - timerText: {fileID: 751542998} - mineText: {fileID: 805410199} - uiConfig: {fileID: 0} - boardInputEnabled: 1 - currentRevealUnflaggedMines: 0 - resizeRefreshPending: 0 - currentBoardWidth: 0 - currentBoardHeight: 0 - currentContentPadding: 1 - currentPixelsPerUnitMultiplier: 1 - resizeStableAt: 0 - lastObservedLayoutSize: {x: 0, y: 0} --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -556,28 +532,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &751542998 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2799103337096245725, guid: 212298b6cdb61bb41bcf765ca9467ef2, type: 3} - m_PrefabInstance: {fileID: 1980798338579462618} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI ---- !u!114 &805410199 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 823287330887192061, guid: 212298b6cdb61bb41bcf765ca9467ef2, type: 3} - m_PrefabInstance: {fileID: 1980798338579462618} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI --- !u!224 &1101876292 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 3873756121358901088, guid: 212298b6cdb61bb41bcf765ca9467ef2, type: 3} @@ -631,10 +585,10 @@ MonoBehaviour: uiConfig: {fileID: 11400000, guid: c8b7785713c7c8b49b853f7e5028a4fa, type: 2} contentRoot: {fileID: 1373940536} topPanelView: {fileID: 1101876296} - mainMenuViewPrefab: {fileID: 0} - boardViewPrefab: {fileID: 0} - pauseViewPrefab: {fileID: 0} - resultViewPrefab: {fileID: 0} + mainMenuViewPrefab: {fileID: 5456992800552396061, guid: 66407cd7142d6a945b37ca8dc5e7c6b7, type: 3} + boardViewPrefab: {fileID: -4096144217532421454, guid: 91c5885a4fbe47540abf4bfd814a32d0, type: 3} + pauseViewPrefab: {fileID: 7010459690024596299, guid: ec358f6fec19e3b469f516bd1ade70cd, type: 3} + resultViewPrefab: {fileID: -2277025653673582644, guid: 73d5a09dc8885e64a8c20a68ea82c5dc, type: 3} --- !u!4 &1287266282 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Core/BoardService.cs b/Assets/Scripts/Core/BoardService.cs index d4a94a5..ac0db36 100644 --- a/Assets/Scripts/Core/BoardService.cs +++ b/Assets/Scripts/Core/BoardService.cs @@ -251,12 +251,13 @@ namespace Minesweeper.Core while (queue.Count > 0) { var cell = queue.Dequeue(); - if (visited[cell.X, cell.Y] || cell.IsMine || cell.IsFlagged) + if (visited[cell.X, cell.Y] || cell.IsMine) { continue; } visited[cell.X, cell.Y] = true; + ClearFlag(cell); OpenSafeCell(cell); if (cell.NeighborMines != 0) @@ -274,7 +275,7 @@ namespace Minesweeper.Core } var neighbor = cells[x, y]; - if (!visited[x, y] && !neighbor.IsMine && !neighbor.IsFlagged && !neighbor.IsOpened) + if (!visited[x, y] && !neighbor.IsMine && !neighbor.IsOpened) { queue.Enqueue(neighbor); } @@ -295,6 +296,17 @@ namespace Minesweeper.Core AddChangedCell(cell); } + private void ClearFlag(CellData cell) + { + if (!cell.IsFlagged) + { + return; + } + + cell.IsFlagged = false; + FlaggedCellsCount--; + } + private void AddChangedCell(CellData cell) { changedCells.Add(ToData(cell));