示例#1
0
        public static RoboField DecodeField(char encoded)
        {
            if (RoboField.FIELDCODING.ContainsKey(encoded))
            {
                return(RoboField.CreateField(RoboField.FIELDCODING[encoded]));
            }

            return(RoboField.CreateField((FieldType)((int)encoded - (int)'a')));
        }
示例#2
0
        private void Clear(RoboField[,] fields, Size size)
        {
            if (size == null)
            {
                return;
            }

            for (int y = 0; y < size.Height; y++)
            {
                for (int x = 0; x < size.Width; x++)
                {
                    SetField(fields, RoboField.CreateField(FieldType.Empty), x, y);
                }
            }
        }
示例#3
0
        public void Load(TextReader reader, Difficulty difficulty)
        {
            Difficulty = difficulty;

            Size = GetSize(reader.ReadLine());

            for (int y = 0; y < Size.Height; y++)
            {
                for (int x = 0; x < Size.Width; x++)
                {
                    RoboField field = null;
                    if (y == 0 || x == 0 || y == Size.Height - 1 || x == Size.Width - 1)
                    {
                        field = (difficulty == Difficulty.Hard ?
                                 RoboField.CreateField(FieldType.Hole) : RoboField.DecodeField('p'));
                    }
                    else
                    {
                        char encoded = (char)reader.Read();
                        if (encoded == '\r' || encoded == '\n')
                        {
                            x--;
                            continue;
                        }
                        field = (difficulty == Difficulty.Easy &&
                                 (encoded == RoboField.EncodeField(FieldType.Hole) ||
                                  encoded == RoboField.EncodeField(FieldType.Oil) ||
                                  encoded == RoboField.EncodeField(FieldType.ScrapLeftRight) ||
                                  encoded == RoboField.EncodeField(FieldType.ScrapUpDown))) ?
                                RoboField.DecodeField(' ') :
                                RoboField.DecodeField(encoded);
                    }

                    SetField(field, x, y);
                }
                //new line?!
                if (y > 0 && y < Size.Height - 1)
                {
                    reader.Read();
                }
            }
        }
示例#4
0
        private RoboBoard GetBoard(RoboBoard original, RoboPlayer actualPlayer, IEnumerable <RoboPlayer> players)
        {
            RoboBoard board = Board.CopyBoard();

            if (Interaction == RoboPlayerInteraction.Blocked)
            {
                foreach (RoboPlayer player in players)
                {
                    if (player == actualPlayer ||
                        board.GetField(player.Position).IsDestination ||
                        player.Position.IsDead)
                    {
                        continue;
                    }

                    board.Fields[player.Position.X, player.Position.Y] =
                        RoboField.CreateField(FieldType.WallDown | FieldType.WallUp | FieldType.WallLeft | FieldType.WallRight);
                }
            }

            return(board);
        }