Проблема с моим массивом при создании монопольной игры - PullRequest
0 голосов
/ 11 ноября 2019

Привет, я пытаюсь создать массив для хранения всех позиций, доступных на монопольном правлении, но при создании массива я получаю сообщение об ошибке «Не могу неявно преобразовать тип» (строка, строка, строка, строка, строка)' нанизывать". Конечно, в коде не должно быть проблем с преобразованием строки в строку. Для кодирования я использую C # с Visual Basic от Microsoft.

 private void pictureBox1_Click_1(object sender, EventArgs e)
        {
            string[,,,,]BoardPos;
            BoardPos = new string[39, 0, 4, 0, 0];
            BoardPos[0, 0, 0, 0, 0] = ("Go", "+200", "CurrentPlayer", "", "");
            BoardPos[1, 0, 0, 0, 0] = ("Old Kent Road", "-60", "CurrentPlayer", "", "");
        }

1 Ответ

2 голосов
/ 11 ноября 2019

Этот синтаксис:

("Go", "+200", "CurrentPlayer", "", "");

фактически создает кортеж строк, а не строковый массив.

Исправление состоит в том, чтобы переписать ваш код, чтобы использовать преимущества объектно-ориентированного C #природа. Я бы порекомендовал вам упростить ваш код, создав класс для хранения соответствующих полей:

public interface IMonopolySquare
{
     public string Name { get; }
     public void PlayerLandsOnEvent(Player player);
     public void PlayerPassesSquareEvent(Player player);
     public void SetOwner(Player player);
}

public class GoSquare : IMonopolySquare
{
     public string Name { get => "Go" }

     public void PlayerLandsOnEvent(Player player)
     {
          // Do nothing - player has to pass to receive £200.
     }

     public void PlayerPassesSquareEvent(Player player)
     {
         player.AddMoney(200);
     }

    public void SetOwner(Player player)
    {
        throw new Exception ("You can't buy go!!");
    }
}

public class PropertySquare : IMonopolySquare
{
    private Player _owner = null;
    private int _rentWithoutHouse;
    private Color _color;

    public PropertySquare(
        string name,
        int rentWithoutHouse,
        Color color)
    {
        Name = name;
        _rentWithoutHouse = rentWithoutHouse;
        _color = color;
    }

    public string Name {get;}
     public void PlayerLandsOnEvent(Player player)
     {
         if (_owner != null && _owner != player)
         {
             player.SubtractMoney(_rentWithoutHouse); 
         }
     }

     public void PlayerPassesSquareEvent(Player player)
     {
         // Do nothing.
     }

    public void SetOwner(Player player)
    {
        if (owner != null)
        {
            throw new Exception("Can't buy something that's already been bought!");
        }
        else
        {
            _owner = player;
        }
    }
}

// the Player class is left as an exercise for the reader...

И тогда ваша «доска» станет намного проще:

var board = new IMonopolySquare[] {
    new GoSquare(),
    new PropertySquare("Old Kent Road", "2", Color.Brown),
    // etc.
}
...