Ejemplo n.º 1
0
        /// <summary>
        /// フィールド内の移動を試みます
        /// </summary>
        /// <param name="commandType"></param>
        /// <returns>移動に成功したら true</returns>
        public bool TryMove(CommandTypes commandType)
        {
            if (!_directionTable.ContainsKey(commandType))
            {
                return(false);
            }

            var direction    = _directionTable[commandType];
            var nextPosition = _map.PlayerPosition + direction;
            var nextField    = _map.GetField(nextPosition);

            if (nextField == FieldTypes.Wall)
            {
                return(false);
            }

            if (nextField == FieldTypes.Space)
            {
                _commandManager.Do(new Command(
                                       () => _map.PlayerPosition += direction,
                                       () => _map.PlayerPosition -= direction));
                return(true);
            }

            if (nextField == FieldTypes.Block)
            {
                var nextNextPosition = nextPosition + direction;

                if (_map.GetField(nextNextPosition) != FieldTypes.Space)
                {
                    return(false);
                }

                _commandManager.Do(new Command(
                                       () => {
                    _map.PlayerPosition += direction;
                    _map.SetField(nextPosition, FieldTypes.Space);
                    _map.SetField(nextNextPosition, FieldTypes.Block);
                },
                                       () => {
                    _map.PlayerPosition -= direction;
                    _map.SetField(nextPosition, FieldTypes.Block);
                    _map.SetField(nextNextPosition, FieldTypes.Space);
                }));

                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 表示用のフィールド種類を取得します
        /// </summary>
        /// <param name="map"></param>
        /// <param name="position"></param>
        /// <returns>表示用のフィールド種類</returns>
        FieldTypes GetDisplayFieldType(Map map, Point position)
        {
            var fieldType = position == map.PlayerPosition
                ? FieldTypes.Player
                : map.GetField(position);

            if (map.GoalPositions.Contains(position))
            {
                fieldType = GetOnGoalFieldType(fieldType);
            }

            return(fieldType);
        }