Simone Adobs
Published © GPL3+

Tech-TicTacToe

Don't have a piece of paper or a pen and you want to play TicTacToe? No problem with this Tech-TicTacToe you can play this Game everywhere.

BeginnerFull instructions provided4 hours5,938
Tech-TicTacToe

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
Arduino
×1
MAX7219 LED dot Matrix
×1
Membrane Switch Keypad
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Schematics

Schematics with Fritzing

Schematics with Fritzing

Code

Tech-Tris

C/C++
#include <Keypad.h>
#include <LedControl.h>
#include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {} 

LedControl lc=LedControl(12,10,11,1);

bool player1=true,q1=false,q2=false,q3=false,q4=false,q5=false,q6=false,q7=false,q8=false,q9=false;
int row,col,rowPlays,colPlays,result,player,winner;
char hexaKeys[4][3] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
int plays[3][3] = {
  {0,0,0},
  {0,0,0},
  {0,0,0}
};
byte rowPins[4] = {8, 7, 6, 5};
byte colPins[3] = {4, 3, 2};

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, 4, 3); 

void setup() {
  lc.shutdown(0,false);
  lc.setIntensity(0,0);
  lc.clearDisplay(0);
}

void loop() { 
  int customKey = customKeypad.getKey();
  painting(customKey);
  win(result);
  if (winner==1) {
    lc.clearDisplay(0);
    while (winner==1) {
      char customKey = customKeypad.getKey();
      if (customKey=='0') {
        Reset_AVR();
      }
      lc.setLed(0,1,4,true);
      lc.setLed(0,2,5,true);
      lc.setLed(0,3,6,true);
      lc.setLed(0,4,7,true);
      lc.setLed(0,4,6,true);
      lc.setLed(0,4,5,true);
      lc.setLed(0,4,4,true);
      lc.setLed(0,4,3,true);
      lc.setLed(0,4,2,true);
      lc.setLed(0,4,1,true);
      lc.setLed(0,4,0,true);
      lc.setLed(0,5,0,true);
      lc.setLed(0,6,0,true);
      lc.setLed(0,3,0,true);
      lc.setLed(0,2,0,true);
    }
  }
  else if (winner==2) {
    lc.clearDisplay(0);
    while (winner==2) {
      char customKey = customKeypad.getKey();
      if (customKey=='0') {
        Reset_AVR();
      }
      lc.setLed(0,2,0,true);
      lc.setLed(0,3,0,true);
      lc.setLed(0,4,0,true);
      lc.setLed(0,5,0,true);
      lc.setLed(0,2,1,true);
      lc.setLed(0,2,2,true);
      lc.setLed(0,2,3,true);
      lc.setLed(0,2,4,true);
      lc.setLed(0,3,4,true);
      lc.setLed(0,4,4,true);
      lc.setLed(0,5,4,true);
      lc.setLed(0,5,5,true);
      lc.setLed(0,5,6,true);
      lc.setLed(0,5,7,true);
      lc.setLed(0,4,7,true);
      lc.setLed(0,3,7,true);
      lc.setLed(0,2,7,true);
    }
  }
}

int round_player() {
  if (player1) {
    player1=false;
    result=1;
  }
  else {
    player1=true;
    result=2;
  }
  return result;
}

void win(int player) {
  if (plays[0][0]==player && plays[0][1]==player && plays[0][2]==player) {
    winner=player;
  }
  else if (plays[1][0]==player && plays[1][1]==player && plays[1][2]==player) {
    winner=player;
  }
  else if (plays[2][0]==player && plays[2][1]==player && plays[2][2]==player) {
    winner=player;
  }
  else if (plays[0][0]==player && plays[1][0]==player && plays[2][0]==player) {
    winner=player;
  }
  else if (plays[0][1]==player && plays[1][1]==player && plays[2][1]==player) {
    winner=player;
  }
  else if (plays[0][2]==player && plays[1][2]==player && plays[2][2]==player) {
    winner=player;
  }
  else if (plays[0][0]==player && plays[1][1]==player && plays[2][2]==player) {
    winner=player;
  }
  else if (plays[0][2]==player && plays[1][1]==player && plays[2][0]==player) {
    winner=player;
  }
}

void switch_on_led(int col, int row, int colPlays, int rowPlays) {
  if (player1) {
    lc.setLed(0,col,row,true);
    lc.setLed(0,col+1,row-1,true);
  }
  else {
    lc.setLed(0,col,row-1,true);
    lc.setLed(0,col+1,row,true);
  }
  plays[rowPlays][colPlays]=round_player();
}

void painting(int bottone) {
  switch (bottone) {    
  case 49:
    if (!q1){
      switch_on_led(0,7,0,0);
      q1=true;
    }
    break; 
  case 50:
    if (!q2) {
      switch_on_led(3,7,0,1);
      q2=true;
    }    
    break;    
  case 51:
    if (!q3) {
      switch_on_led(6,7,0,2);
      q3=true;
    }    
    break;    
  case 52:
    if (!q4) {
      switch_on_led(0,4,1,0);
      q4=true;
    }
    break;    
  case 53:
    if (!q5) {
      switch_on_led(3,4,1,1);
      q5=true;
    }
    break;    
  case 54:
    if (!q6) {
      switch_on_led(6,4,1,2);
      q6=true;
    }    
    break;    
  case 55:
    if (!q7) {
      switch_on_led(0,1,2,0);
      q7=true;
    }    
    break;
  case 56:
    if (!q8) {
      switch_on_led(3,1,2,1);
      q8=true;
    }    
    break;    
  case 57: 
    if (!q9) {
      switch_on_led(6,1,2,2); 
      q9=true;
    } 
    break;    
  case 48:
    Reset_AVR();
    break;
  }
}

Credits

Simone Adobs

Simone Adobs

3 projects • 25 followers
Hi, Hackster Community! I'm Simone Adobs and I am an Arduino fan. Take a look to all my projects! ;-)

Comments