使用C#我已经将每个帧的游戏对象的位置写入文本文件,给我一个看起来像这样的文件
P,130,140,B,200,300,B,400,600-P,131,140,B,201,300,B,401,600-
上面显示了两个帧和3个对象位置,在第二帧的每个X坐标上加1。
P代表玩家对象,然后是X和Y坐标,然后是两个Ball对象及其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变量是指示我在逗号后面的文本文件的下一位之后,我不知道如何使用多个文本分隔符。 任何帮助将不胜感激。
答案 0 :(得分:0)
到目前为止,最简单的方法是在“ - ”字符上首先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
}
答案 1 :(得分:0)
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();
}
}