/// <summary> /// 強制的に周囲のブロックごとオープンする /// </summary> /// <param name="target">対象ブロック</param> public void ForceOpen(BlockBase target) { //最初に文字を解放 _textObj.Dispose(); //その後で強制オープンの処理 target.ChangeState(new OpenedState(target)); }
/// <summary> /// 状態をオープンにする /// </summary> /// <param name="target">対象ブロック</param> public void OnClicked(BlockBase target) { if (target.HasMine) { target.OnGameFailed(new EventArgs()); return; } target.ChangeState(new OpenedState(target)); //周囲も開けようと試みる TryOpen(target); }
/// <summary> /// 旗マークが間違っていた場合、強制オープン /// </summary> /// <param name="target">対象ブロック</param> public void TryOpen(BlockBase target) { //最初に文字を解放 _textObj.Dispose(); //その後で強制オープンの処理 target.ChangeState(new OpenedState(target)); if (target.AroundMinesNum == 0) { foreach (var block in target.NeighborBlockList) { block.CurrentState.TryOpen(block); } } }
/// <summary> /// 周囲のブロックを強制オープンしようと試みる /// </summary> /// <param name="target">対象ブロック</param> public void TryOpen(BlockBase target) { /* * 1.最初にTryOpenが実行されたブロックをオープンにする * 2.TryOpenが実行されたブロックの周りが0ならば * 3.各ブロックを走査し * 4.再帰的にTryOpenを呼ぶ */ target.ChangeState(new OpenedState(target)); //1 if (target.AroundMinesNum == 0) //2 { foreach (var block in target.NeighborBlockList) //3 { block.CurrentState.TryOpen(block); //4 } } }
/// <summary> /// 強制的に周囲のブロックごとオープンする /// </summary> /// <param name="target">対象ブロック</param> public void ForceOpen(BlockBase target) { target.ChangeState(new OpenedState(target)); }
/// <summary> /// 旗を立てる処理 /// </summary> /// <param name="target">対象ブロック</param> public void OnRightClicked(BlockBase target) { target.ChangeState(new FlagedState(target)); }
/// <summary> /// 旗マークを解除する /// </summary> /// <param name="target">対象ブロック</param> public void OnRightClicked(BlockBase target) { _textObj.Dispose(); target.ChangeState(new ClosedState()); }