我有一个多线文本框,我可以在那里为无人机编写密码。
示例:
10 levantar
10 goto 50,40
10转到20,20
10 mayday
10 aterrar
我想创建一个列表,逐步完成这个错误。比如:起飞,起飞后转到那个位置,当到达那个位置时转到下一个等等。
我的问题是: 有没有办法在列表中对此文本进行分组,当它完成该任务时,我只需删除列表的第一个位置并执行下一个操作?
private void executa_missao()
{
string[] linhas_separadas = null;
string[] pontos_separados = null;
for (int i = 0; i < tb_missoes.Lines.Length; i++)
{
linhas_separadas = tb_missoes.Lines[i].Split(null);
for(int k=0;k<drone.Length;k++)
{
listas_posicoes[k] = new List<PointF>();
if (linhas_separadas[0] == drone[k].ip_drone_final)
{
if (linhas_separadas[1] == "goto")
{
pontos_separados = linhas_separadas[2].Split(',');
drone[k].posicao_desejada = new PointF(Convert.ToSingle(pontos_separados[0]), Convert.ToSingle(pontos_separados[1]));
//guarda na lista as posicoes pretendidas
listas_posicoes[k].Add(new PointF(Convert.ToSingle(pontos_separados[0]), Convert.ToSingle(pontos_separados[1])));
}
else if (linhas_separadas[1] == "levantar")
{
drone[k]._droneClient.FlatTrim();
drone[k]._droneClient.Takeoff();
drone[k].subir_ate_altura = true;
}
else if (linhas_separadas[1] == "aterrar")
{
drone[k]._droneClient.Land();
}
}
}
Atm正试图同时做好每一步。我想逐步完成。
答案 0 :(得分:0)
使用Queue<T>
代替List<T>
然后,您可以使用.Dequeue()
函数获取当前命令,并将其从队列中删除。
为此行为创建示例工作代码会变得非常复杂并且需要一段时间,但基本模式看起来如此:
public abstract class Command
{
public abstract bool IsComplete { get; }
public abstract void Execute();
}
public static class CommandExecutor
{
public static Queue<Command> commands;
public static Command current;
public static void Update()
{
if (commands.Count > 0
&& (current == null || current.IsComplete))
{
current = commands.Dequeue();
current.Execute();
}
}
}
在重复间隔中调用Update()
方法的位置。