Untitled

 avatar
unknown
plain_text
10 months ago
5.9 kB
22
Indexable
char tabla[] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Salut!");
  Serial.println("Tu vei muta primul - esti cu X.");
  Serial.println("Tabla de joc are pozitiile numerotate de la 1 la 9.");
  Serial.println("1 2 3");
  Serial.println("4 5 6");
  Serial.println("7 8 9");
  do {
    mutareX();
    if (victorie())
      break;
    mutare0();
    afisare();
  } while (!victorie());
  delay(5000);
  for (int i = 0; i < 100; i++)
    Serial.println();
  for (int i = 0; i < 9; i++)
    tabla[i] = '-';
}

boolean victorie() {
  char winner = '-';
  if (winner == '-' && tabla[0] == tabla[1] && tabla[1] == tabla[2])
    winner = tabla[0];  // linie 1
  if (winner == '-' && tabla[3] == tabla[4] && tabla[4] == tabla[5])
    winner = tabla[3];  // linie 2
  if (winner == '-' && tabla[6] == tabla[7] && tabla[7] == tabla[8])
    winner = tabla[6];  // linie 3
  if (winner == '-' && tabla[0] == tabla[3] && tabla[3] == tabla[6])
    winner = tabla[0];  // coloana 1
  if (winner == '-' && tabla[1] == tabla[4] && tabla[4] == tabla[7])
    winner = tabla[1];  // coloana 2
  if (winner == '-' && tabla[2] == tabla[5] && tabla[5] == tabla[8])
    winner = tabla[2];  // coloana 3
  if (winner == '-' && tabla[0] == tabla[4] && tabla[4] == tabla[8])
    winner = tabla[0];  // diagonala principala
  if (winner == '-' && tabla[2] == tabla[4] && tabla[4] == tabla[6])
    winner = tabla[2];  // diagonala secundara
  if (winner == '-') {
    winner = '*';
    for (int i = 0; i < 9; i++)
      if (tabla[i] == '-')
        winner = '-';
  }
  if (winner == '-')
    return false;
  else {
    if (winner == 'X') {
      afisare();
      Serial.println("Ati castigat! Felicitari!");
    }
    if (winner == '0')
      Serial.println("Arduino a castigat! Mai incercati!");
    if (winner == '*')
      Serial.println("Remiza! Plictisitor!");
    return true;
  }
}

void afisare() {
  for (int i = 0; i < 9; i++) {
    Serial.print(tabla[i]);
    Serial.print(" ");
    if (i == 2 || i == 5 || i == 8)
      Serial.println();
  }
}

void mutareX() {
  boolean valid = false;
  int m0 = 0;
  while (!valid) {
    Serial.println("Alege o pozitie de la 1 la 9.");
    while (m0 < '1' || m0 > '9') {
      m0 = Serial.read();
      delay(1000);
    }
    m0 = m0 - 48;
    Serial.print("Ati ales pozitia: ");
    Serial.print(m0, DEC);
    Serial.println();
    if (tabla[m0 - 1] != '-')
      Serial.println("Pozitie eronata!");
    else {
      tabla[m0 - 1] = 'X';
      valid = true;
    }
  }
}

void mutare0() {
  int i = -1;
  int primaMutare = 0;
  int colturi[] = { 0, 2, 6, 8 };

  while (i == -1) {
    if (!primaMutare) {
      if (tabla[4] == '-') i = 4;
      else {
        int index = random(4);
        i = colturi[index];
      }
      primaMutare++;
    } else {

      for (int j = 0; j < 9; j++) {
        if (j % 3 == 0) {
          if (tabla[j] == '0' && tabla[j + 1] == '0') {
            i = j + 2;
          }
          if (tabla[j + 1] == '0' && tabla[j + 2] == '0') {
            i = j;
          }
          if (tabla[j] == '0' && tabla[j + 2] == '0') {
            i = j + 1;
          }
        }
        if (j == 0 || j == 1 || j == 2) {
          if (tabla[j] == '0' && tabla[j + 3] == '0') {
            i = j + 6;
          }
          if (tabla[j + 3] == '0' && tabla[j + 6] == '0') {
            i = j;
          }
          if (tabla[j] == '0' && tabla[j + 6] == '0') {
            i = j + 3;
          }
        }

        if (j == 0) {
          if (tabla[j] == '0' && tabla[j + 4] == '0') {
            i = j + 8;
          }
          if (tabla[j + 4] == '0' && tabla[j + 8] == '0') {
            i = j;
          }
          if (tabla[j] == '0' && tabla[j + 8] == '0') {
            i = j + 4;
          }
        }


        if (j == 2) {
          if (tabla[j + 2] == '0' && tabla[j + 4] == '0') {
            i = j;
          }
          if (tabla[j] == '0' && tabla[j + 4] == '0') {
            i = j + 2;
          }
          if (tabla[j] == '0' && tabla[j + 2] == '0') {
            i = j + 4;
          }
        }



        if (j % 3 == 0)
          if (tabla[j] == 'X' && tabla[j + 1] == 'X') {
            i = j + 2;
          }
        if (tabla[j + 1] == 'X' && tabla[j + 2] == 'X') {
          i = j;
        }
        if (tabla[j] == 'X' && tabla[j + 2] == 'X') {
          i = j + 1;
        }

        if (j == 0 || j == 1 || j == 2) {
          if (tabla[j] == 'X' && tabla[j + 3] == 'X') {
            i = j + 6;
          }
          if (tabla[j + 3] == 'X' && tabla[j + 6] == 'X') {
            i = j;
          }
          if (tabla[j] == 'X' && tabla[j + 6] == 'X') {
            i = j + 3;
          }
        }

        if (j == 0) {
          if (tabla[j] == 'X' && tabla[j + 4] == 'X') {
            i = j + 8;
          }
          if (tabla[j + 4] == 'X' && tabla[j + 8] == 'X') {
            i = j;
          }
          if (tabla[j] == 'X' && tabla[j + 8] == 'X') {
            i = j + 4;
          }
        }


        if (j == 2) {
          if (tabla[j + 2] == 'X' && tabla[j + 4] == 'X') {
            i = j;
          }
          if (tabla[j] == 'X' && tabla[j + 4] == 'X') {
            i = j + 2;
          }
          if (tabla[j] == 'X' && tabla[j + 2] == 'X') {
            i = j + 4;
          }
        }
      }
    }

    if (i == -1 && primaMutare) {
      i = random(0, 9);
      while (tabla[i] != '-') i = random(0, 9);
    }


    if (tabla[i] == '-') {
      tabla[i] = '0';
      Serial.print("Arduino a ales pozitia: ");
      Serial.print(i + 1, DEC);
      Serial.println();
      break;
    } else
      i = -1;
  }
}
Editor is loading...
Leave a Comment