コード例 #1
0
        private List<MineButton> GetNearbyButtons(MineButton button)
        {
            if(!AreValidCoordinates(button.XPosition, button.YPosition))
            {
                return new List<MineButton>();
            }

            return MineGrid.Children
                .OfType<MineButton>()
                .Where(b => b.IsEnabled
                    && (b.XPosition != button.XPosition || b.YPosition != button.YPosition)
                    && b.XPosition > button.XPosition - 2
                    && b.XPosition < button.XPosition + 2
                    && b.YPosition > button.YPosition - 2
                    && b.YPosition < button.YPosition + 2)
                    .ToList();
        }
コード例 #2
0
 private void OpenNearbyFields(MineButton button)
 {
     var nearbyButtons = GetNearbyButtons(button);
     
     foreach(var b in nearbyButtons)
     {
         OpenField(b);
     }
 }
コード例 #3
0
        private void MarkField(MineButton button)
        {
            if(_core == null)
            {
                return;
            }

            var status = _core.Mark(button.XPosition, button.YPosition);

            if(status == MarkFieldStatus.FieldIsMarked)
            {
                _minesLeft--;
                MinesLeftLabel.Text = String.Format(MinesLeftText, _minesLeft > 0 ? _minesLeft : 0);
                button.Source = _flag;
            }
            else
            {
                _minesLeft++;
                MinesLeftLabel.Text = String.Format(MinesLeftText, _minesLeft > 0 ? _minesLeft : 0);
                button.Source = _blank;
            }
        }
コード例 #4
0
        private void ServeGameOver(MineButton button)
        {
            foreach(var child in MineGrid.Children)
            {
                var b = child as MineButton;
                b.IsEnabled = false;
                b.BackgroundColor = Color.Silver;

                if(!_core.IsMarked(b.XPosition, b.YPosition))
                {
                    if(_core.HasMine(b.XPosition, b.YPosition))
                    {
                        b.Source = _mine;
                    }
                }
                else if(!_core.HasMine(b.XPosition, b.YPosition))
                {
                    b.Source = _nomine;
                }
            }

            button.Source = _explodedmine;
            DisplayAlert("Game over", "BOOM! You lose!", "OK");
        }
コード例 #5
0
        private void OpenField(MineButton button)
        {
            if(_core == null)
            {
                _core = new MineSweeper.Core.MineSweeper(columns, rows, mines, button.XPosition, button.YPosition);
            }
            
            if(_core.IsMarked(button.XPosition, button.YPosition))
            {
                return;
            }

            button.IsEnabled = false;
            button.BackgroundColor = Color.Silver;
            var status = _core.Open(button.XPosition, button.YPosition);

            switch(status)
            {
                case FieldStatus.FieldIsMine:
                    ServeGameOver(button);
                    return;
                case FieldStatus.MinesNearby0:
                    button.Source = _blank;
                    OpenNearbyFields(button);
                    break;
                case FieldStatus.MinesNearby1:
                    button.Source = _1;
                    break;
                case FieldStatus.MinesNearby2:
                    button.Source = _2;
                    break;
                case FieldStatus.MinesNearby3:
                    button.Source = _3;
                    break;
                case FieldStatus.MinesNearby4:
                    button.Source = _4;
                    break;
                case FieldStatus.MinesNearby5:
                    button.Source = _5;
                    break;
                case FieldStatus.MinesNearby6:
                    button.Source = _6;
                    break;
                case FieldStatus.MinesNearby7:
                    button.Source = _7;
                    break;
                default:
                    button.Source = _8;
                    break;
            }
            
            if(MineGrid.Children.OfType<MineButton>().Count(b => b.IsEnabled) == mines)
            {
                ServeGameWin();
            }
        }