public override bool Action(Pipes pipes) { //ордината смещается вниз за счет счетчика шагов, поднимаем на 1 if (!(pipes.Field[pipes.CellOrdinateY - 1, pipes.CellAbscissaX].IsActive)) { pipes.Field[pipes.CellOrdinateY - 1, pipes.CellAbscissaX] = new SourceCell(); } return(true); }
public override bool Action(Pipes pipes) { pipes.CellOrdinateY--; // если ордината заходит на верхнюю границу рамки, смещаем под нее (0 - счетчик, 1 - рамка, 2 - начальная ордината) if (pipes.CellOrdinateY == 1) { pipes.CellOrdinateY = 2; } return(true); }
public override bool Action(Pipes pipes) { pipes.CellOrdinateY++; // если ордината заходит на нижнюю границу, устанавливаем над ней if (pipes.CellOrdinateY > pipes.FieldHeight - 1) { pipes.CellOrdinateY = pipes.FieldHeight - 1; } return(true); }
public override bool Action(Pipes pipes) { pipes.CellAbscissaX--; // если абсцисса заходит на левую границу рамки, смещаем на 1 клетку вправо (0 - рамка, 1 - начальная абсцисса) if (pipes.CellAbscissaX == 0) { pipes.CellAbscissaX = 1; } return(true); }
public override bool Action(Pipes pipes) { pipes.CellAbscissaX++; // если абсцисса заходит на правую границу рамки, смещаем на 2 влево, чтобы установить левее границы; // отнимется 2, т.к. fieldWidth это количество клеток по ширине, но нумерация начинается с нуля, // соответственно правая граница рамки это fieldWidth - 1, соотв. крайняя абсцисса - fieldWidth - 2 if (pipes.CellAbscissaX > pipes.FieldWidth - 2) { pipes.CellAbscissaX = pipes.FieldWidth - 2; } return(true); }
public override bool Action(Pipes pipes) { buffer = new Cell[pipes.FieldHeight, pipes.FieldWidth]; pipes.InitializeField(buffer); pipes.CopyField(pipes.Field, buffer); // ордината смещается вниз за счет счетчика шагов, поднимаем на 1 if (pipes.Field[pipes.CellOrdinateY - 1, pipes.CellAbscissaX].IsActive) { pipes.Field[pipes.CellOrdinateY - 1, pipes.CellAbscissaX] = new Cell(); } // тестовый прогон системы pipes.Test(); // если число активных ячеек не равно числу заполненных, значит есть изолированные аппендиксы // и выполняется откат на предыдущую конфигурацию поля, предварительно записанную в буфер if (pipes.CountActives() != pipes.CountFilled()) { pipes.CopyField(buffer, pipes.Field); } pipes.TestClear(); return(true); }
public KeyRead(ConsoleKey input, Pipes pipes) { this.pipes = pipes; this.input = input; }
public override bool Action(Pipes pipes) { return(false); }