Ejemplo n.º 1
0
        /// <summary>
        /// calculate the number of adjacent mines for each matrix element
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="fs"></param>
        /// <param name="inputField"></param>
        /// <returns></returns>
        private string CalculateAdjacentMines(int x, int y, IFieldSettings fs, char[,] inputField)
        {
            int    minX, minY, maxX, maxY;
            int    result = 0;
            string res    = "";

            // Don't check outside the edge of the field
            minX = (x <= 0 ? 0 : x - 1);
            minY = (y <= 0 ? 0 : y - 1);
            maxX = (x >= fs.RowsNo - 1 ? fs.RowsNo : x + 2);
            maxY = (y >= fs.ColumnsNo - 1 ? fs.ColumnsNo : y + 2);

            // Check all immediate neighbours for mines
            for (int i = minX; i < maxX; i++)
            {
                for (int j = minY; j < maxY; j++)
                {
                    if (inputField[i, j].Equals('*'))
                    {
                        result++;
                    }
                }
            }
            res = result.ToString();
            return(res);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// populate the input field matrix according to the given settings
        /// </summary>
        /// <param name="fs"></param>
        /// <returns></returns>
        public char[,] PopulateMineField(IFieldSettings fs)
        {
            if (fs == null)
            {
                throw new NullMineFieldException("Invalid mine field");
            }

            if (fs.RowsNo < 0 || fs.RowsNo > 100)
            {
                throw new InvalidRowNumberException("Invalid rows number");
            }

            if (fs.ColumnsNo < 0 || fs.ColumnsNo > 100)
            {
                throw new InvalidColumnNumberException("Invalid columns number");
            }

            char[,] InputField = new char[fs.RowsNo, fs.ColumnsNo];
            // Fill the input field with safe spots
            for (int i = 0; i < fs.RowsNo; i++)
            {
                for (int j = 0; j < fs.ColumnsNo; j++)
                {
                    InputField[i, j] = '.';
                }
            }
            //insert the mines randomly
            InputField = PlaceRandomMines(fs, InputField);

            return(InputField);
        }
Ejemplo n.º 3
0
 protected FieldSettingsBase(MemberInfo member, IFieldSettings settings)
     : this(member)
 {
     Index      = settings.Index;
     IsNullable = settings.IsNullable;
     NullValue  = settings.NullValue;
     Converter  = settings.Converter;
 }
Ejemplo n.º 4
0
        public void Should_Throw_MineFieldException()
        {
            //arrange
            GameManager    gameManager = new GameManager();
            IFieldSettings fs          = null;

            //act
            gameManager.PopulateMineField(fs);
        }
Ejemplo n.º 5
0
        protected NestedField(long id, string name, IFieldSettings settings = null)
        {
            Guard.NotNullOrEmpty(name, nameof(name));
            Guard.GreaterThan(id, 0, nameof(id));

            fieldId   = id;
            fieldName = name;

            if (settings != null)
            {
                isLocked   = settings.IsLocked;
                isHidden   = settings.IsHidden;
                isDisabled = settings.IsDisabled;
            }
        }
Ejemplo n.º 6
0
        protected RootField(long id, string name, Partitioning partitioning, IFieldSettings settings = null)
        {
            Guard.NotNullOrEmpty(name, nameof(name));
            Guard.GreaterThan(id, 0, nameof(id));
            Guard.NotNull(partitioning, nameof(partitioning));

            fieldId   = id;
            fieldName = name;

            this.partitioning = partitioning;

            if (settings != null)
            {
                isLocked   = settings.IsLocked;
                isHidden   = settings.IsHidden;
                isDisabled = settings.IsDisabled;
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// generates and returns the output field matrix starting from the input field
        /// </summary>
        /// <param name="fs"></param>
        /// <param name="inputField"></param>
        /// <returns></returns>
        public string[,] GenerateOutputField(IFieldSettings fs, char[,] inputField)
        {
            string[,] outputField = new string[fs.RowsNo, fs.ColumnsNo];

            for (int i = 0; i < fs.RowsNo; i++)
            {
                for (int j = 0; j < fs.ColumnsNo; j++)
                {
                    if (inputField[i, j].Equals('*'))
                    {
                        outputField[i, j] = "*";
                    }
                    else
                    {
                        outputField[i, j] = CalculateAdjacentMines(i, j, fs, inputField);
                    }
                }
            }
            return(outputField);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// places the mines randomly inside the input field matrix
        /// </summary>
        /// <param name="fs"></param>
        /// <param name="InputField"></param>
        /// <returns></returns>
        private char[,] PlaceRandomMines(IFieldSettings fs, char[,] InputField)
        {
            int    randomRow, randomCol;
            int    minesToPlace = fs.MinesNo;
            Random random       = new Random();

            //place randomly the mines
            while (minesToPlace != 0)
            {
                randomRow = random.Next(0, fs.RowsNo);
                randomCol = random.Next(0, fs.ColumnsNo);
                //don't replace an existing mine
                if (InputField[randomRow, randomCol].Equals('*'))
                {
                    continue;
                }
                InputField[randomRow, randomCol] = '*';
                minesToPlace--;
            }

            return(InputField);
        }
Ejemplo n.º 9
0
 public static ArrayField AddTags(this ArrayField field, long id, string name, TagsFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(field.AddField(Tags(id, name, properties, settings)));
 }
Ejemplo n.º 10
0
 public static ArrayField AddGeolocation(this ArrayField field, long id, string name, GeolocationFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(field.AddField(Geolocation(id, name, properties, settings)));
 }
Ejemplo n.º 11
0
 public static ArrayField AddDateTime(this ArrayField field, long id, string name, DateTimeFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(field.AddField(DateTime(id, name, properties, settings)));
 }
Ejemplo n.º 12
0
 public static ArrayField Array(long id, string name, Partitioning partitioning, ArrayFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new ArrayField(id, name, partitioning, properties, settings));
 }
Ejemplo n.º 13
0
 public static NestedField <ReferencesFieldProperties> References(long id, string name, ReferencesFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new NestedField <ReferencesFieldProperties>(id, name, properties, settings));
 }
Ejemplo n.º 14
0
 public static NestedField <JsonFieldProperties> Json(long id, string name, JsonFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new NestedField <JsonFieldProperties>(id, name, properties, settings));
 }
Ejemplo n.º 15
0
        public RootField CreateRootField(long id, string name, Partitioning partitioning, FieldProperties properties, IFieldSettings settings = null)
        {
            CheckProperties(properties);

            return(properties.CreateRootField(id, name, partitioning, settings));
        }
Ejemplo n.º 16
0
 public NestedField(long id, string name, T properties = null, IFieldSettings settings = null)
     : base(id, name, settings)
 {
     SetProperties(properties ?? new T());
 }
Ejemplo n.º 17
0
        public ArrayField(long id, string name, Partitioning partitioning, NestedField[] fields, ArrayFieldProperties properties = null, IFieldSettings settings = null)
            : this(id, name, partitioning, properties, settings)
        {
            Guard.NotNull(fields, nameof(fields));

            this.fields = new FieldCollection <NestedField>(fields);
        }
Ejemplo n.º 18
0
 public ArrayField(long id, string name, Partitioning partitioning, ArrayFieldProperties properties = null, IFieldSettings settings = null)
     : base(id, name, partitioning, properties, settings)
 {
 }
Ejemplo n.º 19
0
 public RootField(long id, string name, Partitioning partitioning, T properties = null, IFieldSettings settings = null)
     : base(id, name, partitioning, settings)
 {
     SetProperties(properties ?? new T());
 }
Ejemplo n.º 20
0
 public static RootField <TagsFieldProperties> Tags(long id, string name, Partitioning partitioning, TagsFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new RootField <TagsFieldProperties>(id, name, partitioning, properties, settings));
 }
Ejemplo n.º 21
0
 public static NestedField <DateTimeFieldProperties> DateTime(long id, string name, DateTimeFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new NestedField <DateTimeFieldProperties>(id, name, properties, settings));
 }
Ejemplo n.º 22
0
 public override RootField CreateRootField(long id, string name, Partitioning partitioning, IFieldSettings settings = null)
 {
     return(Fields.Number(id, name, partitioning, this, settings));
 }
Ejemplo n.º 23
0
 public static NestedField <NumberFieldProperties> Number(long id, string name, NumberFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(new NestedField <NumberFieldProperties>(id, name, properties, settings));
 }
Ejemplo n.º 24
0
 public abstract RootField CreateRootField(long id, string name, Partitioning partitioning, IFieldSettings settings = null);
Ejemplo n.º 25
0
        public NestedField CreateNestedField(long id, string name, FieldProperties properties, IFieldSettings settings = null)
        {
            CheckProperties(properties);

            return(properties.CreateNestedField(id, name, settings));
        }
Ejemplo n.º 26
0
 public abstract NestedField CreateNestedField(long id, string name, IFieldSettings settings = null);
Ejemplo n.º 27
0
 public override NestedField CreateNestedField(long id, string name, IFieldSettings settings = null)
 {
     throw new NotSupportedException();
 }
Ejemplo n.º 28
0
        public static Schema AddArray(this Schema schema, long id, string name, Partitioning partitioning, Func <ArrayField, ArrayField> handler, ArrayFieldProperties properties = null, IFieldSettings settings = null)
        {
            var field = Array(id, name, partitioning, properties, settings);

            if (handler != null)
            {
                field = handler(field);
            }

            return(schema.AddField(field));
        }
Ejemplo n.º 29
0
 public override NestedField CreateNestedField(long id, string name, IFieldSettings settings = null)
 {
     return(Fields.Number(id, name, this, settings));
 }
Ejemplo n.º 30
0
 public static Schema AddTags(this Schema schema, long id, string name, Partitioning partitioning, TagsFieldProperties properties = null, IFieldSettings settings = null)
 {
     return(schema.AddField(Tags(id, name, partitioning, properties, settings)));
 }