C# 如何在控制台模式C中删除多行#

C# 如何在控制台模式C中删除多行#,c#,console-application,C#,Console Application,我正在编写一个游戏,在我绘制另一个游戏之前,我正在努力删除我的stickman 我可以只使用Console.Clear(),但它会清除整个控制台,我只需要删除以前的stickman 我正在尝试使用: private static string path = @"c:..\..\characters\"; private string file; private int xpast = 0; private int ypast = 0; private i

我正在编写一个游戏,在我绘制另一个游戏之前,我正在努力删除我的stickman

我可以只使用
Console.Clear()
,但它会清除整个控制台,我只需要删除以前的stickman

我正在尝试使用:

    private static string path =  @"c:..\..\characters\";
    private string file;
    private int xpast = 0;
    private int ypast = 0;
    private int LinhasSeparacao;

    public Graphics()
    {
    }

    public Graphics(string file)
    {
        this.file = file;
        StreamReader sr = new StreamReader(path + file);
        LinhasSeparacao = 0;
        do
        {
            LinhasSeparacao++;
        }
        while (sr.ReadLine() != "separar");
        sr.Close();            
    }

    public void Draw(int x, int y,bool forma = true)
    {
        string[] persona = File.ReadAllLines(path + file);
        LimparAnterior(forma,persona,x,y);
        //Console.Clear();
        if (forma)
        {
            for (int i = 0; i < LinhasSeparacao - 1; i++)
            {
                Console.SetCursorPosition(x, y + i);
                Console.Write(persona[i]);
            }
        }
        else
        {
            int j= 0;
            for (int i = LinhasSeparacao; i <persona.Length-1; i++)
            {
                Console.SetCursorPosition(x, y + j);
                Console.Write(persona[i]);
                j++;
            }
        }

        xpast = x;
        ypast = y;
    }

    private  void LimparAnterior(bool forma,string[] persona, int xlive, int ylive)
    {
        int i = 0;

        for (i = 0 ; i < LinhasSeparacao; i++)
        {
            Console.SetCursorPosition(xpast > 0? xpast -1:xpast,ypast  + i);
            Console.Write(" ",persona[i].Length);  
        }
    }
私有静态字符串路径=@“c:..\..\characters\”;
私有字符串文件;
私有int xpast=0;
私有int ypast=0;
林哈塞帕拉考私人酒店;
公共图形()
{
}
公共图形(字符串文件)
{
this.file=文件;
StreamReader sr=新的StreamReader(路径+文件);
LinhasSeparacao=0;
做
{
LinhasSeparacao++;
}
而(sr.ReadLine()!=“separar”);
高级关闭();
}
公共无效提款(整数x,整数y,布尔形式=真)
{
string[]persona=File.ReadAllLines(路径+文件);
LimparInterior(形式、角色、x、y);
//Console.Clear();
如果(形式)
{
对于(int i=0;i
这是我的类来绘制新的字符,它需要x和y坐标。我使用一个文件来绘制图形,并将所有行放入一个名为persona的数组中。我是在有人按下箭头让那个小家伙动之后画的

如果你需要更多的信息,说点什么。以下是github的链接:

代码不一定是您的问题,如果查看hero.txt文件,您会注意到英雄之剑右侧没有空格

_A_
 0 
/|\/
/ \
separar
 _A_
  0 
\/|\X 
 / \
separar
看到我把“X”字放在哪里了吗?当你的英雄面对右边时,那里有一把剑。但当你把他移到左边时,没有空间覆盖剑所在的牢房

您需要更改hero.txt文件,使其在战略位置上有空格,或者更新绘图代码,使其删除粘贴人所在的区域,然后更新其位置并在新位置上绘图


因为这似乎是一种随意的学习体验,这很好,但如果你决定变得更具冒险精神,你会想使用专门为这类事情设计的库,或者重新设计代码,通过将每个角色绘制到缓冲区,然后将完成的缓冲区带到物理屏幕,从而“合成”场景。玩得开心

代码不一定是您的问题,如果查看hero.txt文件,您会注意到英雄之剑右侧没有空格

_A_
 0 
/|\/
/ \
separar
 _A_
  0 
\/|\X 
 / \
separar
看到我把“X”字放在哪里了吗?当你的英雄面对右边时,那里有一把剑。但当你把他移到左边时,没有空间覆盖剑所在的牢房

您需要更改hero.txt文件,使其在战略位置上有空格,或者更新绘图代码,使其删除粘贴人所在的区域,然后更新其位置并在新位置上绘图


因为这似乎是一种随意的学习体验,这很好,但如果你决定变得更具冒险精神,你会想使用专门为这类事情设计的库,或者重新设计代码,通过将每个角色绘制到缓冲区,然后将完成的缓冲区带到物理屏幕,从而“合成”场景。玩得开心

移动到要清除的位置,然后
控制台。写入(“”)
(即,写入空格),或者,如果要清除整行内容,请移动到所需位置并
Console.WriteLine()请注意,后一个调用会将光标定位在下一行的开头。谢谢您的回答,但我有多行要删除,但不是整行,只是确切的字符数。请看一下GitHub的链接和文件“hero.txt”,这就是我想要删除的内容。请随意编辑这些是你真正的选择(据我所知)。如果你在位置(x,y)写一个“0”,在位置(x,z)写一个“|”,记住你在哪里写的。然后,当您要删除它们时,请返回您编写它们的位置,并用空格覆盖它们。如果要删除一行中的4个字符(水平),可以写入4个空格。其他人可能知道更好的方法。如果是这样的话,我很想看看这个建议。但问题是,我用了那种方式。我有变量来保存x和y位置。在设置它们之后,我写“”以清除,但不清除所有字符。如果你想要帮助,请在编译后下载该项目。如果你正在编写大量控制台游戏,你应该检查以下内容:移动到你想要清除的位置,然后
控制台。写(“”)
(即,写入空格),或者,如果要清除整行内容,请移动到所需位置并
Console.WriteLine()请注意,后一个调用会将光标定位在下一行的开头。谢谢您的回答,但我有多行要删除,但不是整行,只是确切的字符数。请看一下GitHub的链接和文件“hero.txt”,这就是我想要删除的内容。请随意编辑这些是你真正的选择(据我所知)。如果你在位置(x,y)写一个“0”,在位置(x,z)写一个“|”,记住你在哪里写的。然后,当您要删除它们时,请返回您编写它们的位置,并用空格覆盖它们。如果要删除一行中的4个字符(水平),可以写入4个空格。其他人可能知道更好的方法。如果是这样的话,我很想看看这个建议。但问题是,我用了那种方式。我有变量来保存x和y位置。在a设置它们之后,我写“”以清除,但不清除a