Beispiel #1
0
 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);
 }
Beispiel #2
0
 public override bool Action(Pipes pipes)
 {
     pipes.CellOrdinateY--;
     // если ордината заходит на верхнюю границу рамки, смещаем под нее (0 - счетчик, 1 - рамка, 2 - начальная ордината)
     if (pipes.CellOrdinateY == 1)
     {
         pipes.CellOrdinateY = 2;
     }
     return(true);
 }
Beispiel #3
0
 public override bool Action(Pipes pipes)
 {
     pipes.CellOrdinateY++;
     // если ордината заходит на нижнюю границу, устанавливаем над ней
     if (pipes.CellOrdinateY > pipes.FieldHeight - 1)
     {
         pipes.CellOrdinateY = pipes.FieldHeight - 1;
     }
     return(true);
 }
Beispiel #4
0
 public override bool Action(Pipes pipes)
 {
     pipes.CellAbscissaX--;
     // если абсцисса заходит на левую границу рамки, смещаем на 1 клетку вправо (0 - рамка, 1 - начальная абсцисса)
     if (pipes.CellAbscissaX == 0)
     {
         pipes.CellAbscissaX = 1;
     }
     return(true);
 }
Beispiel #5
0
 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);
 }
Beispiel #6
0
 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);
 }
Beispiel #7
0
 public KeyRead(ConsoleKey input, Pipes pipes)
 {
     this.pipes = pipes;
     this.input = input;
 }
Beispiel #8
0
 public override bool Action(Pipes pipes)
 {
     return(false);
 }