CS1503 Аргумент 1: невозможно преобразовать из 'Po c .Core.Player' в 'Po c .Interfaces.IScheduleable' - PullRequest
0 голосов
/ 31 марта 2020

Извините, я новичок sh в программировании, так что это может быть легко решаемой проблемой, которую я недостаточно осведомлен, чтобы знать, как исправить

Я использую это руководство для простого сканера подземелий https://bitbucket.org/FaronBracy/roguesharpv3tutorial/src/master/

, когда дело доходит до реализации поведения кобольдов (мутантов в моем проекте), я получаю сообщение об ошибке: «Аргумент 1: невозможно преобразовать из» Po c .Core. (Игрок / монстр ) "to" Po c .Interface.ISchedule "

это происходило в void addplayer, void addmonster и remove void в DungeonMap.cs и дважды в void ActivateMonsters в CommandSystem.cs

Я был бы очень признателен, если бы кто-нибудь мог помочь мне решить эту проблему

пустоты проблемы:

public void AddPlayer(Player player)
    {
        Game.Player = player;
        SetIsWalkable(player.X, player.Y, false);
        UpdatePlayerFieldOfView();
        **Game.SchedulingSystem.Add(player);**
    }




public void AddMonster(Monster monster)
    {
        _monsters.Add(monster);
        // After adding the monster to the map make sure to make the 
        cell not walkable
        SetIsWalkable(monster.X, monster.Y, false);
         **Game.SchedulingSystem.Add( monster );**
    }



public void RemoveMonster(Monster monster)
    {
        _monsters.Remove(monster);
        SetIsWalkable(monster.X, monster.Y, true);
        **SchedulingSystem.Remove(monster);**

    }


public void ActivateMonsters()
    {
        IScheduleable scheduleable = Game.SchedulingSystem.Get();
        if (scheduleable is Player)
        {
            IsPlayerTurn = true;
            **Game.SchedulingSystem.Add(Game.Player);**
        }
        else
        {
            Monster monster = scheduleable as Monster;

            if (monster != null)
            {
                monster.PerformAction(this);
                **Game.SchedulingSystem.Add(monster);**
            }

            ActivateMonsters();
        }
    }

тогда код моей системы планирования

namespace Poc.Systems
{
public class SchedulingSystem
{
    private int _time;
    private readonly SortedDictionary<int, List<IScheduleable>> _scheduleables;

    public SchedulingSystem()
    {
        _time = 0;
        _scheduleables = new SortedDictionary<int, List<IScheduleable>>();
    }


    public void Add(IScheduleable scheduleable)
    {
        int key = _time + scheduleable.Time;
        if (!_scheduleables.ContainsKey(key))
        {
            _scheduleables.Add(key, new List<IScheduleable>());
        }
        _scheduleables[key].Add(scheduleable);
    }

    public void Remove(IScheduleable scheduleable)
    {
        KeyValuePair<int, List<IScheduleable>> scheduleableListFound
          = new KeyValuePair<int, List<IScheduleable>>(-1, null);

        foreach (var scheduleablesList in _scheduleables)
        {
            if (scheduleablesList.Value.Contains(scheduleable))
            {
                scheduleableListFound = scheduleablesList;
                break;
            }
        }
        if (scheduleableListFound.Value != null)
        {
            scheduleableListFound.Value.Remove(scheduleable);
            if (scheduleableListFound.Value.Count <= 0)
            {
                _scheduleables.Remove(scheduleableListFound.Key);
            }
        }
    }


    public IScheduleable Get()
    {
        var firstScheduleableGroup = _scheduleables.First();
        var firstScheduleable = firstScheduleableGroup.Value.First();
        Remove(firstScheduleable);
        _time = firstScheduleableGroup.Key;
        return firstScheduleable;
    }

    // Get the current time (turn) for the schedule
    public int GetTime()
    {
        return _time;
    }


    {
        _time = 0;
        _scheduleables.Clear();
    }
}

}

...