使用OOP C使玩家对象移动#

时间:2017-10-03 11:22:15

标签: c# oop console-application

我需要一些帮助。我一直坚持这个,我需要一些帮助。所以我们应该创建一个使用OOP主体的游戏。游戏网格是使用我们在名为Map.cs的抽象类中创建的2D数组创建的。但是我一直试图弄清楚如何让玩家对象('@')在地图上打印出来,而在Player.cs类中 我只能向你展示Map.cs中的这段代码,因为玩家类是一团糟

Map.cs

    abstract class Map
{
    public const int RAD = 10;
    public const int KOLUMN = 19;

    public string[,] table = new string[RAD, KOLUMN];
    public Map()
    {
        //Creates the map
        for (int i = 0; i < RAD; i++)
        {
            for (int j = 0; j < KOLUMN; j++)
            {
                table[i, j] = ".";
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用你的Map类(我已经将常量重命名为ROWS和COLUMNS),我为播放器编写了以下示例类。

public class Player
{
    public int PositionX { get; set; }
    public int PositionY { get; set; }
    // constructors
}

然后在主课程中你可以得到以下内容。注意,这将打印左上角的(0,0)并且可能会弄乱列和行,但是在理解了非常基本的想法之后,您应该能够使它工作。

static void Main(string[] args)
{
    Map map = new Map();
    Player player = new Player();
    PrintMap(map, player);
}

static void PrintMap(Map map, Player player)
{
    for (int i = 0; i < Map.ROWS; i++)
    {
        for (int j = 0; j < Map.COLUMNS; j++)
        {
            if (player.PositionX == i && player.PositionY == j)
            {
                Console.Write('@');
            }
            else
            {
                Console.Write(map.table[i, j]);
            }
        }
        Console.WriteLine();
    }
}

要记住的一件事是,在OOP编程中(遵循SOLID设计原则),每个类应该只负责一件事。保持地图状态并打印地图是两个完全不同的任务:创建一个保存状态并在其他地方实施打印的地图类更好。