从文本文件定位对象



与C#一起工作,我已经将游戏对象的位置写入文本文件中的每个帧,从而给我一个看起来像这样的文件

P,130,140,B,200,300,B,400,600-P,131,140,B,201,300,B,401,600-

上面显示了两个帧和3个对象位置,在第二帧上添加1个X坐标。

p用于播放器对象,然后是x和y坐标,然后是两个带有x和y坐标的球对象。

我希望通过分配对象通过文件读取每个帧的位置来重播保存的游戏玩法。使用字母确定下一个可见对象,并确定帧的末端

我无法在语法上读取文件,我在思考

的行
While (text != "-")
{ if (text = "P") Create Object player
player.X = nextText; player.Y = nextText;
if (text = "B") Create Object Ball
Ball.X = nextText; Ball.Y = nextText;
}

NextText变量是指我在逗号之后的下一个文本文件之后,我不确定如何与多个文本定界器一起使用。任何帮助将不胜感激。

 static class Program
{
    static void Main(string[] args)
    {
        using (StreamReader sr = new StreamReader(@"D:1.txt"))
        { 
            String s = null;
            while ((s = sr.ReadUntil('-')) != null)
            {
                if (s.StartsWith("P"))
                { 
                    //crate object
                }
                if (s.StartsWith("B"))
                {
                    //..
                }
            }
        }
    }
    public static String ReadUntil(this StreamReader reader, char delimeter)
    {
        StringBuilder sb = new StringBuilder();
        char c;
        while ((c = (char)reader.Read()) != 0)
        {
            if (c == delimeter)
                return sb.ToString();
            else
                sb.Append(c);
        }
        return sb.Length == 0 ? null:sb.ToString();
    }
}

到目前为止,最简单的方法是首先在" - "字符上 Split()您的字符串,以获取一系列框架,然后使用简单的正则判处拆分P,B和B对象。这样的东西:

string WholeFile = System.IO.File.ReadAllText("YOUR PATH HERE");
var Frames[] = WholeFile.Split('-');
    Regex rx = new Regex(@"P,(?<Px>d+),(?<Py>d+),B,(?<B1x>d+),(?<B1y>d+),B,(?<B2x>d+),(?<B2y>d+)", RegexOptions.ExplicitCapture | );
foreach(var frame in Frames)
{
    var Captures = rx.Match(frame);
    //now use Captures.Groups["Px"] etc. to get your values
}

最新更新