Крестики-нолики на Си.

Тема в разделе "Закажу проект", создана пользователем Chaco, 19 янв 2019.

  1. b707

    b707 Гуру

    довольно неэффективно...
    sser - позвольте совет.
    Организуйте все что касается девяти светодиодов - в массивы. Массив номеров пинов, массив переменных ledstate, массив переменных a1-a9 и тд... Код уменьшится примерно в 9 раз :)
     
  2. sser

    sser Гик

    Спасибо, завтра попробую.
     
  3. sser

    sser Гик

    Уф...
    Светодиоды в массив загнал вроде.

    Код (C++):
     const int buttonPin11 = 11;      // номер входа, подключенный к кнопке
    int buttonState11 = 0;        // переменная для хранения состояния кнопки
    const int buttonPin12 = 12;     // номер входа, подключенный к кнопке
    int buttonState12 = 0;          // переменная для хранения состояния кнопки

    int ledPins[] = {
    2, 3, 4, 5, 6, 7,8, 9, 10 }; // массив данным с номерами пинов, к которым подключены светодиоды
    int pinCount = 9; // количество пинов (то есть, длина массива)

    int X = 0;
    bool a1 = false; //переменные для хранения состояния светодиода 1
    bool a2= false; //...светодиода 2
    bool a3 = false;
    bool a4= false;
    bool a5 = false;
    bool a6= false;
    bool a7 = false;
    bool a8= false;
    bool a9 = false;








    // Variables will change:
    int ledState2 = LOW;
    int ledState3 = LOW;
    int ledState4 = LOW;
    int ledState5 = LOW;
    int ledState6 = LOW;
    int ledState7 = LOW;
    int ledState8 = LOW;
    int ledState9 = LOW;
    int ledState10 = LOW;
    // этой переменной устанавливаем состояние светодиода
    long previousMillis = 0;     // храним время последнего переключения светодиода
    long interval = 200;           // интервал между включение/выключением светодиода
    void setup() {
     
      pinMode(buttonPin11, INPUT);// задаем режим выхода для порта, подключенного к кнопке
      pinMode(buttonPin12, INPUT);
    // использование for loop для инициализации пинов как выходов
    for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
    }
    }
    void loop()
    {

      buttonState11 = digitalRead(buttonPin11);//нажатие кнопки изменяет переменную
      buttonState12 = digitalRead(buttonPin12);



    if (buttonState11 == HIGH) { //перемещаем мигающий светодиод после каждого нажатия
    X= ++X;
    if (X==10)

    {
    X=1;

    }
    delay (200);
    }
    if ((buttonState12 == HIGH)&&(X==1)){
                                           // запоминаем  положение мигающего светодиода.
      a1=true;
    }
    if ((buttonState12 == HIGH)&&(X==2)){

    a2=true;
    }

    if ((buttonState12 == HIGH)&&(X==3)){

    a3=true;
    }
    if ((buttonState12 == HIGH)&&(X==4)){

    a4=true;
    }

    if ((buttonState12 == HIGH)&&(X==5)){

    a5=true;
    }
    if ((buttonState12 == HIGH)&&(X==6)){

    a6=true;
    }
    if ((buttonState12 == HIGH)&&(X==7)){

    a7=true;
    }
    if ((buttonState12 == HIGH)&&(X==8)){

    a8=true;
    }

    if ((buttonState12 == HIGH)&&(X==9)){

    a9=true;
    }








     

      unsigned long currentMillis = millis();
     
      if(currentMillis - previousMillis > interval) {
     
        previousMillis = currentMillis;
      }



     
        if (((ledState2 == LOW)&&(X==1))||(a1==true))//мигаем светодиодами
          ledState2 = HIGH;
        else
          ledState2 = LOW;
     
        if (((ledState3 == LOW)&&(X==2))||(a2==true))
          ledState3 = HIGH;
        else
          ledState3 = LOW;
     
           
          if (((ledState4 == LOW)&&(X==3))||(a3==true))
          ledState4 = HIGH;
        else
          ledState4 = LOW;
     
        if (((ledState5 == LOW)&&(X==4))||(a4==true))
          ledState5 = HIGH;
        else
          ledState5 = LOW;

        if (((ledState6 == LOW)&&(X==5))||(a5==true))
          ledState6 = HIGH;
        else
          ledState6 = LOW;
           
          if (((ledState7 == LOW)&&(X==6))||(a6==true))
          ledState7 = HIGH;
        else
          ledState7 = LOW;
     

         
             if (((ledState8 == LOW)&&(X==7))||(a7==true))
          ledState8 = HIGH;
        else
          ledState8 = LOW;

        if (((ledState9 == LOW)&&(X==8))||(a8==true))
          ledState9 = HIGH;
        else
          ledState9 = LOW;
     
     
          if (((ledState10 == LOW)&&(X==9))||(a9==true))
          ledState10 = HIGH;
        else
          ledState10 = LOW;



         
    digitalWrite(ledPins[0],ledState2);
    digitalWrite(ledPins[1],ledState3);
    digitalWrite(ledPins[2],ledState4);
    digitalWrite(ledPins[3],ledState5);
    digitalWrite(ledPins[4],ledState6);
    digitalWrite(ledPins[5],ledState7);
    digitalWrite(ledPins[6],ledState8);
    digitalWrite(ledPins[7],ledState9);
    digitalWrite(ledPins[8],ledState10);



     
    if (((a1==true)&&(a2==true)&&(a3==true))||((a1==true)&&(a4==true)&&(a7==true))||((a4==true)&&(a5==true)&&(a6==true))||((a1==true)&&(a5==true)&&(a9==true))||((a3==true)&&(a6==true)&&(a9==true))||((a7==true)&&(a8==true)&&(a9==true))||((a3==true)&&(a5==true)&&(a7==true)))
     
      {  
        //победил!
    a2=0;//второй светодиод отключаем
    X=2; //мигаем 2 светодиодом    
      }
    }  
     
     

     
     
  4. SvyatoslavS

    SvyatoslavS Нуб

    Ого, нормальное такое задание
     
  5. sser

    sser Гик

    Ну, вроде всё в массивы загнал .
    Код (C++):

    const int buttonPin11 = 11;      // номер входа, подключенный к кнопке
    int buttonState11 = 0;        // переменная для хранения состояния кнопки
    int aI = 0;
    const int buttonPin12 = 12;     // номер входа, подключенный к кнопке
    int buttonState12 = 0;          // переменная для хранения состояния кнопки

    int ledPins[] = {
    2, 3, 4, 5, 6, 7,8, 9, 10 }; // массив данным с номерами пинов, к которым подключены светодиоды
    int pinCount = 9; // количество пинов (то есть, длина массива)

    int X = 0;

    int Vals_a[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};//массив переменных для хранения состояния светодиода a1
    int ledState[9] = {0, 0, 0, 0, 0, 0, 0, 0, 0};//массив переменных ledState2

    // этой переменной устанавливаем состояние светодиода
    long previousMillis = 0;     // храним время последнего переключения светодиода
    long interval = 200;           // интервал между включение/выключением светодиода
    void setup() {

      pinMode(buttonPin11, INPUT);// задаем режим выхода для порта, подключенного к кнопке
      pinMode(buttonPin12, INPUT);
    // использование for loop для инициализации пинов как выходов
    for (int thisPin = 0; thisPin < pinCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT);
    }
    }
    void loop()
    {

      buttonState11 = digitalRead(buttonPin11);//нажатие кнопки изменяет переменную
      buttonState12 = digitalRead(buttonPin12);

    if ((buttonState11 == HIGH)&&( ledState[X] == 0)) { //перемещаем мигающий светодиод после каждого нажатия
    X= ++X;
    if (X==9)
    {
    X=0;
    }
    delay (200);//дрыхнем
    }
    if (buttonState12 == HIGH)//кнопка 2 записывает в массив ход
    {
    Vals_a[X] = 1;;
    }

      unsigned long currentMillis = millis();

      if(currentMillis - previousMillis > interval) {

        previousMillis = currentMillis;
      }
        if (ledState[X]==0)//мигаем светодиодами
        {
          ledState[X] = 1;;
        }
        else
        {
          ledState[X] = 0;;
       }

    for (int Z = 0; Z < 9; Z++) { //листаем массив
    aI=((ledState[Z])||(Vals_a[Z]));//проверяем зажжённые светодиоды
    digitalWrite(ledPins[Z],aI);//зажигаем светодиоды
    }

    //условия победы
     if (((Vals_a[1]==1)&&(Vals_a[4]==1)&&(Vals_a[7]==1))||((Vals_a[0]==1)&&(Vals_a[1]==1)&&(Vals_a[2]==1))||((Vals_a[0]==1)&&(Vals_a[3]==1)&&(Vals_a[6]==1))||((Vals_a[3]==1)&&(Vals_a[4]==1)&&(Vals_a[5]==1))||((Vals_a[0]==1)&&(Vals_a[4]==1)&&(Vals_a[8]==1))||((Vals_a[2]==1)&&(Vals_a[5]==1)&&(Vals_a[8]==1))||((Vals_a[6]==1)&&(Vals_a[7]==1)&&(Vals_a[8]==1))||((Vals_a[2]==1)&&(Vals_a[4]==1)&&(Vals_a[6]==1)))

    {
        //если выполнено условие , то победил!
    Vals_a[1] = 0;;//второй светодиод отключаем
    X=1;//мигаем 2 светодиодом  
      }
    }  
     


     
     
    Последнее редактирование: 26 янв 2019