Эксперимент 12. Кнопочные ковбои (2 задание)

Тема в разделе "Флудилка", создана пользователем Denis557, 22 сен 2019.

  1. Denis557

    Denis557 Нуб

    http://wiki.amperka.ru/конспект-arduino:кнопочные-ковбои
    В игре есть лазейка: кнопку можно зажать до сигнала «пли!» и таким образом сразу же выиграть. Дополните программу так, чтобы так выиграть было нельзя.


    Как я понял нужно добавить булевую переменную, которая до сигнала будет иметь значение ложь, и вместе с подачей сигнала меняться на истина, а в обработку нажатия кнопок добавить проверку это переменной.

    Вот так я это понял

    Код (C++):
    #define BUZZER_PIN   12  // пин с пищалкой
    #define PLAYER_COUNT 2   // количество игроков-ковбоев
    // вместо перечисления всех пинов по-одному, мы объявляем пару
    // списков: один с номерами пинов с кнопками, другой — со
    // светодиодами. Списки также называют массивами (англ. array)
    int buttonPins[PLAYER_COUNT] = {3, 2};
    int ledPins[PLAYER_COUNT] = {9, 11};
    boolean Tour;
    void setup()
    {
       pinMode(BUZZER_PIN, OUTPUT);
       Tour = false;    // инициализация цикла игры
       for (int player = 0; player < PLAYER_COUNT; ++player) {
        // при помощи квадратных скобок получают значение в массиве
        // под указанным в них номером. Нумерация начинается с нуля
        pinMode(ledPins[player], OUTPUT);
        pinMode(buttonPins[player], INPUT_PULLUP);
      }
    }
    void loop()
    {
      // даём сигнал «пли!», выждав случайное время от 2 до 7 сек
      delay(random(2000, 7000));
    Tour = true;                     //запускаем тур
      tone(BUZZER_PIN, 3000, 250); // 3 килогерца, 250 миллисекунд

      for (int player = 0; ; player = (player+1) % PLAYER_COUNT) {
        // если игрок номер «player» нажал кнопку...
        if (!digitalRead(buttonPins[player]))
        {
          Tour = false;    //тур завершился
          // ...включаем его светодиод и сигнал победы на 1 сек
          digitalWrite(ledPins[player], HIGH);
          tone(BUZZER_PIN, 4000, 1000);
          delay(1000);
          digitalWrite(ledPins[player], LOW);
          break; // Есть победитель! Выходим (англ. break) из цикла
        }
      }
    }
    У меня ничего не получилось, фальшстарт имеется. Помогите разобраться
     
    Последнее редактирование: 23 сен 2019
  2. NikitOS

    NikitOS Король шутов Администратор

    Научить читать правила и объявления? :)
     
  3. parovoZZ

    parovoZZ Гуру

    поможем, когда выполнишь правила размещения постов на данном ресурсе.
     
    NikitOS нравится это.