     for (int i = 22; i <= 45; i++)
     {
         // init common leds
-      pinMode(i, OUTPUT);
+        pinMode(i, OUTPUT);
     }
     for (int i = 2; i <= 13; i++)
     {
         // init rgb leds
-      pinMode(i, OUTPUT);
-    }
-  }
-
-  void reset_buttons_flagClick()
-  {
+        pinMode(i, OUTPUT);
+    }
+}
+
+void reset_buttons_flagClick()
+{
     button11.flagClick = 0;
     button12.flagClick = 0;
     button13.flagClick = 0;

    reset_buttons_flagClick();
    digitalWrite(field[x][y], HIGH);
    digitalWrite(field[xPrev][yPrev], LOW);
  }

  void start_game()
  {
    game = 999;
    lcd.init();
    reset_buttons_flagClick;
    for (int j = random(100, 1000); j > 0; j = j - 100)
    {
      for (int i = 2; i <= 13; i++)
      {
            // init rgb leds
        digitalWrite(i, HIGH);
      }
      delay(j);
      for (int i = 2; i <= 13; i++)
      {
            // init rgb leds
            // lcd.setCursor(12, 1); lcd.print(analogRead(b11));
            // lcd.setCursor(15, 1); lcd.print(analogRead(b21));
        digitalWrite(i, LOW);
      }
      delay(j);
      if (button11.flagClick == 1 && button21.flagClick == 1)
      {
        lcd.setCursor(0, 0);
        lcd.print("Both plrs false start!");
        return;
      }
      else
        if (button21.flagClick == 1)
        {
          lcd.setCursor(0, 0);
          lcd.print("Red plr false start! Green plr wins!");
          game = GAME_PERFORMED;
          newxy(5, 2, GREENS);
          return;
        }
        else
          if (button11.flagClick == 1)
          {
            lcd.setCursor(0, 0);
            lcd.print("Green plr false start! Red plr wins!");
            game = GAME_PERFORMED;
            newxy(6, 2, REDS);
            return;
          }
        }
        tone(SPEAKER_PIN, 3000, 250);
        reset_buttons_flagClick;
        while (1)
        {
          if (button11.flagClick == 1)
          {
            lcd.setCursor(0, 0);
            lcd.print("Green plr wins!");
            game = GAME_PERFORMED;
            newxy(5, 2, GREENS);
            return;
          }
          else
            if (button21.flagClick == 1)
            {
              lcd.setCursor(0, 0);
              lcd.print("Red plr wins!");
              game = GAME_PERFORMED;
              newxy(6, 2, REDS);
              return;
            }
          }
        }

        void in_game()
        {
          currentMillis = millis();
          if (!ballkick && ((currentMillis - previousMillis) >= 3000))
          {
            game = GAME_OFFSIDE;
            return;
          }
          else
            if (ballkick && ((currentMillis - previousMillis) >= 300))
            {
              newxy(x + x - xPrev, y + y - yPrev, vector);
              return;
            }
            if ((button14.flagClick == 1) || (button24.flagClick == 1))
            {
              newxy(x + vector, y, vector);
              ballkick = true;
            }
            if ((button13.flagClick == 1) || (button23.flagClick == 1))
            {
              newxy(x - vector, y, vector);
              ballkick = true;
            }
            if ((button12.flagClick == 1) || (button22.flagClick == 1))
            {
              newxy(x, y + vector, vector);
              ballkick = true;
            }
            if ((button15.flagClick == 1) || (button25.flagClick == 1))
            {
              newxy(x, y - vector, vector);
              ballkick = true;
            }
          }

          void loop()
          {
    // put your main code here, to run repeatedly:
            switch (game)
            {
              case GAME_START:
              start_game();
            /*#define GAME_SIDE_OUT 2
            #define GAME_END_OUT 3
            #define GAME_OFFSIDE 4
            #define GAME_GOAL 9
            */
              break;
              case GAME_PERFORMED:
              in_game();
            // выполняется когда  var равно 2
              break;
              default:
        // выполняется, если не выбрана ни одна альтернатива
        // default необязателен
              for (int i = 2; i <= 13; i++)
              {
                lcd.setCursor(2, 1);
                lcd.print(millis() / 1000);
            digitalWrite(i, HIGH); // turn the LED on (HIGH is the voltage level)
            delay(1000); // wait for a second
            digitalWrite(i, LOW); // turn the LED off by making the voltage LOW
            delay(1000); // wait for a second
          }
          for (int i = 22; i <= 45; i++)
          {
            lcd.setCursor(2, 1);
            lcd.print(millis() / 1000);
            digitalWrite(i, HIGH); // turn the LED on (HIGH is the voltage level)

#define L4B_PIN 13
class Button
{
    public:
        Button(byte pin, byte timeButton); // конструктор
        boolean flagPress; // признак кнопка в нажатом состоянии
        boolean flagClick; // признак нажатия кнопки (клик)
        boolean scanState(); // метод проверки состояние сигнала
        void filterAvarage(); // метод фильтрации сигнала по среднему значению
        void setPinTime(byte pin, byte timeButton); // метод установки номера вывода и времени (числа) подтверждения
    private:
        byte _buttonCount; // счетчик подтверждений состояния кнопки
        byte _timeButton; // время подтверждения состояния кнопки
        byte _pin; // номер вывода кнопки
};

// метод фильтрации сигнала по среднему значению
// при сигнале низкого уровня flagPress= true
// при сигнале высокого уровня flagPress= false
// при изменении состояния с высокого на низкий flagClick= true
void Button::filterAvarage()
{
    if (flagPress != digitalRead(_pin))
    {
        // состояние кнопки осталось прежним
        if (_buttonCount != 0)
            _buttonCount--; // счетчик подтверждений - 1 с ограничением на 0
    }
    else
    {
        // состояние кнопки изменилось
        _buttonCount++; // +1 к счетчику подтверждений
        if (_buttonCount >= _timeButton)
