Exemple #1
0
        /// <summary>
        /// フォトの初期化
        /// </summary>
        /// <param name="target">対象ブロック</param>
        private void InitializeFont(BlockBase target)
        {
            //文字の作成
            _textObj.Font = Engine.Graphics.CreateDynamicFont("", target.BlockSize / 2, new Color(255, 0, 0, 255), 1, new Color(255, 255, 255, 255));
            _textObj.Text = "▲";

            //文字位置の調整
            var xCorrect = _textObj.Font.CalcTextureSize("S", WritingDirection.Horizontal).X / 2;

            _textObj.Position = new Vector2DF(target.XPosition + xCorrect, target.YPosition);

            //レイヤーへ追加
            target.Layer.AddObject(_textObj);
        }
Exemple #2
0
 /// <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);
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// オープンされたものは色を濃く
        /// </summary>
        /// <param name="target">対象のブロック</param>
        public void OnMouseOver(BlockBase target)
        {
            var rect = MakeRectShape(target);

            target.Shape = rect;
            //地雷を空けたら少し赤くして、他は緑色
            if (target.HasMine)
            {
                target.Color = new Color(255, 50, 50);
            }
            else
            {
                target.Color = new Color(100, 150, 100);
            }
        }
Exemple #4
0
 /// <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
         }
     }
 }
Exemple #5
0
        /// <summary>
        /// 周りの地雷数によって色を変える
        /// </summary>
        /// <param name="target">対象ブロック</param>
        private Color GetProperColor(BlockBase target)
        {
            //地雷持ちは赤色にする
            if (target.HasMine)
            {
                return(new Color(255, 0, 0));
            }

            //周囲の地雷数によって色を変える
            switch (target.AroundMinesNum)
            {
            case 1:
                return(new Color(0, 0, 255));

            case 2:
                return(new Color(0, 100, 0));

            case 3:
                return(new Color(255, 0, 0));

            case 4:
                return(new Color(0, 0, 150));

            case 5:
                return(new Color(150, 0, 0));

            case 6:
                return(new Color(0, 0, 150));

            case 7:
                return(new Color(0, 0, 0));

            case 8:
                return(new Color(150, 150, 150));

            default:
                return(new Color(255, 255, 255));
            }
        }
Exemple #6
0
 /// <summary>
 /// クリックされてもやることはない
 /// </summary>
 /// <param name="target">対象のブロック</param>
 public void OnClicked(BlockBase target)
 {
     //特にすることはない
 }
Exemple #7
0
        ////=============================================================================
        //// コンストラクタ
        ////
        ////=============================================================================

        public OpenedState(BlockBase target)
        {
            InitializeFont(target);
        }
Exemple #8
0
 /// <summary>
 /// すでにオープンなので何もしない
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void ForceOpen(BlockBase target)
 {
     //特に処理はない
 }
Exemple #9
0
 /// <summary>
 /// すでにオープンになっている
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void TryOpen(BlockBase target)
 {
     //特にすることはない
 }
Exemple #10
0
 /// <summary>
 /// 強制的に周囲のブロックごとオープンする
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void ForceOpen(BlockBase target)
 {
     target.ChangeState(new OpenedState(target));
 }
Exemple #11
0
 /// <summary>
 /// 旗を立てる処理
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void OnRightClicked(BlockBase target)
 {
     target.ChangeState(new FlagedState(target));
 }
Exemple #12
0
 /// <summary>
 /// 旗マークを解除する
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void OnRightClicked(BlockBase target)
 {
     _textObj.Dispose();
     target.ChangeState(new ClosedState());
 }
Exemple #13
0
 /// <summary>
 /// 旗を立ててガードしているので何もしない
 /// </summary>
 /// <param name="target">対象ブロック</param>
 public void OnClicked(BlockBase target)
 {
     //特に何もしない
 }
Exemple #14
0
        ////=============================================================================
        //// コンストラクタ
        ////
        ////=============================================================================

        public FlagedState(BlockBase target)
        {
            InitializeFont(target);
        }