tic tac toe with Arduino & adafruit NeoPixel Matrix 8x8

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
Chingstar
 
Posts: 1
Joined: Mon Jan 13, 2014 6:12 am

tic tac toe with Arduino & adafruit NeoPixel Matrix 8x8

Post by Chingstar »

Hi I´m new to programming with arduino.
I startet to programm a tic tac toe game on the Matrix. But there are still some bugs and i haven´t an idea why :roll: .

Grid Design:

o o | o o | o o
o o | o o | o o
- - - - - - - -
o o | o o | o o
o o | o o | o o
- - - - - - - -
o o | o o | o o
o o | o o | o o

each sign is a Led.

My Code:

Code: Select all

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Include

#include <Adafruit_NeoPixel.h>

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Define

#define Led 11
#define ButtonR 8
#define ButtonY 7
#define LedPlayer1 13    //blue
#define LedPlayer2 12    //green

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup NeoPixel
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, Led, NEO_GRB + NEO_KHZ800);

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Variablen

//Color

//Game
int field[9] = {
  0,0,0,0,0,0,0,0,0};    //1 = blue-player1, 2 = green-player2, 3 = yellow-cursor
int f = 0;
boolean player1 = HIGH;
boolean player2 = LOW;
int w = 0;

//Sonstige
int i;
int e = 0;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Function

void grid(){

  strip.setPixelColor(2, 10, 0, 0);
  strip.setPixelColor(5, 10, 0, 0);
  strip.setPixelColor(10, 10, 0, 0);
  strip.setPixelColor(13, 10, 0, 0);
  for( i=16; i<=23; i++){
    strip.setPixelColor(i, 10, 0, 0);
  }
  strip.setPixelColor(26, 10, 0, 0);
  strip.setPixelColor(29, 10, 0, 0);
  strip.setPixelColor(34, 10, 0, 0);
  strip.setPixelColor(37, 10, 0, 0);
  for( i=40; i<=47; i++){
    strip.setPixelColor(i, 10, 0, 0);
  }
  strip.setPixelColor(50, 10, 0, 0);
  strip.setPixelColor(53, 10, 0, 0);
  strip.setPixelColor(58, 10, 0, 0);
  strip.setPixelColor(61, 10, 0, 0);
  strip.show();
}

void show (int field[]){

  //filed 1
  if( field[0]==0 ){
    strip.setPixelColor(0, 0, 0, 0);
    strip.setPixelColor(1, 0, 0, 0);
    strip.setPixelColor(8, 0, 0, 0);
    strip.setPixelColor(9, 0, 0, 0);
  }
  if( field[0]==1 ){
    strip.setPixelColor(0, 0, 0, 10);
    strip.setPixelColor(1, 0, 0, 10);
    strip.setPixelColor(8, 0, 0, 10);
    strip.setPixelColor(9, 0, 0, 10);
  }
  if( field[0]==2 ){
    strip.setPixelColor(0, 0, 10, 0);
    strip.setPixelColor(1, 0, 10, 0);
    strip.setPixelColor(8, 0, 10, 0);
    strip.setPixelColor(9, 0, 10, 0);
  }
  if( field[0]==3 ){
    strip.setPixelColor(0, 10, 10, 0);
    strip.setPixelColor(1, 10, 10, 0);
    strip.setPixelColor(8, 10, 10, 0);
    strip.setPixelColor(9, 10, 10, 0);
  }
  //filed 2
  if( field[1]==0 ){
    strip.setPixelColor(3, 0, 0, 0);
    strip.setPixelColor(4, 0, 0, 0);
    strip.setPixelColor(11, 0, 0, 0);
    strip.setPixelColor(12, 0, 0, 0);
  }
  if( field[1]==1 ){
    strip.setPixelColor(3, 0, 0, 10);
    strip.setPixelColor(4, 0, 0, 10);
    strip.setPixelColor(11, 0, 0, 10);
    strip.setPixelColor(12, 0, 0, 10);
  }
  if( field[1]==2 ){
    strip.setPixelColor(3, 0, 10, 0);
    strip.setPixelColor(4, 0, 10, 0);
    strip.setPixelColor(11, 0, 10, 0);
    strip.setPixelColor(12, 0, 10, 0);
  }
  if( field[1]==3 ){
    strip.setPixelColor(3, 10, 10, 0);
    strip.setPixelColor(4, 10, 10, 0);
    strip.setPixelColor(11, 10, 10, 0);
    strip.setPixelColor(12, 10, 10, 0);
  }
  //filed 3
  if( field[2]==0 ){
    strip.setPixelColor(6, 0, 0, 0);
    strip.setPixelColor(7, 0, 0, 0);
    strip.setPixelColor(14, 0, 0, 0);
    strip.setPixelColor(15, 0, 0, 0);
  }
  if( field[2]==1 ){
    strip.setPixelColor(6, 0, 0, 10);
    strip.setPixelColor(7, 0, 0, 10);
    strip.setPixelColor(14, 0, 0, 10);
    strip.setPixelColor(15, 0, 0, 10);
  }
  if( field[2]==2 ){
    strip.setPixelColor(6, 0, 10, 0);
    strip.setPixelColor(7, 0, 10, 0);
    strip.setPixelColor(14, 0, 10, 0);
    strip.setPixelColor(15, 0, 10, 0);
  }
  if( field[2]==3 ){
    strip.setPixelColor(6, 10, 10, 0);
    strip.setPixelColor(7, 10, 10, 0);
    strip.setPixelColor(14, 10, 10, 0);
    strip.setPixelColor(15, 10, 10, 0);
  }
  //filed 4
  if( field[3]==0 ){
    strip.setPixelColor(24, 0, 0, 0);
    strip.setPixelColor(25, 0, 0, 0);
    strip.setPixelColor(32, 0, 0, 0);
    strip.setPixelColor(33, 0, 0, 0);
  }
  if( field[3]==1 ){
    strip.setPixelColor(24, 0, 0, 10);
    strip.setPixelColor(25, 0, 0, 10);
    strip.setPixelColor(32, 0, 0, 10);
    strip.setPixelColor(33, 0, 0, 10);
  }
  if( field[3]==2 ){
    strip.setPixelColor(24, 0, 10, 0);
    strip.setPixelColor(25, 0, 10, 0);
    strip.setPixelColor(32, 0, 10, 0);
    strip.setPixelColor(33, 0, 10, 0);
  }
  if( field[3]==3 ){
    strip.setPixelColor(24, 10, 10, 0);
    strip.setPixelColor(25, 10, 10, 0);
    strip.setPixelColor(32, 10, 10, 0);
    strip.setPixelColor(33, 10, 10, 0);
  }
  //filed 5
  if( field[4]==0 ){
    strip.setPixelColor(27, 0, 0, 0);
    strip.setPixelColor(28, 0, 0, 0);
    strip.setPixelColor(35, 0, 0, 0);
    strip.setPixelColor(36, 0, 0, 0);
  }
  if( field[4]==1 ){
    strip.setPixelColor(27, 0, 0, 10);
    strip.setPixelColor(28, 0, 0, 10);
    strip.setPixelColor(35, 0, 0, 10);
    strip.setPixelColor(36, 0, 0, 10);
  }
  if( field[4]==2 ){
    strip.setPixelColor(27, 0, 10, 0);
    strip.setPixelColor(28, 0, 10, 0);
    strip.setPixelColor(35, 0, 10, 0);
    strip.setPixelColor(36, 0, 10, 0);
  }
  if( field[4]==3 ){
    strip.setPixelColor(27, 10, 10, 0);
    strip.setPixelColor(28, 10, 10, 0);
    strip.setPixelColor(35, 10, 10, 0);
    strip.setPixelColor(36, 10, 10, 0);
  }
  //filed 6
  if( field[5]==0 ){
    strip.setPixelColor(30, 0, 0, 0);
    strip.setPixelColor(31, 0, 0, 0);
    strip.setPixelColor(38, 0, 0, 0);
    strip.setPixelColor(39, 0, 0, 0);
  }
  if( field[5]==1 ){
    strip.setPixelColor(30, 0, 0, 10);
    strip.setPixelColor(31, 0, 0, 10);
    strip.setPixelColor(38, 0, 0, 10);
    strip.setPixelColor(39, 0, 0, 10);
  }
  if( field[5]==2 ){
    strip.setPixelColor(30, 0, 10, 0);
    strip.setPixelColor(31, 0, 10, 0);
    strip.setPixelColor(38, 0, 10, 0);
    strip.setPixelColor(39, 0, 10, 0);
  }
  if( field[5]==3 ){
    strip.setPixelColor(30, 10, 10, 0);
    strip.setPixelColor(31, 10, 10, 0);
    strip.setPixelColor(38, 10, 10, 0);
    strip.setPixelColor(39, 10, 10, 0);
  }
  //filed 7
  if( field[6]==0 ){
    strip.setPixelColor(48, 0, 0, 0);
    strip.setPixelColor(49, 0, 0, 0);
    strip.setPixelColor(56, 0, 0, 0);
    strip.setPixelColor(57, 0, 0, 0);
  }
  if( field[6]==1 ){
    strip.setPixelColor(48, 0, 0, 10);
    strip.setPixelColor(49, 0, 0, 10);
    strip.setPixelColor(56, 0, 0, 10);
    strip.setPixelColor(57, 0, 0, 10);
  }
  if( field[6]==2 ){
    strip.setPixelColor(48, 0, 10, 0);
    strip.setPixelColor(49, 0, 10, 0);
    strip.setPixelColor(56, 0, 10, 0);
    strip.setPixelColor(57, 0, 10, 0);
  }
  if( field[6]==3 ){
    strip.setPixelColor(48, 10, 10, 0);
    strip.setPixelColor(49, 10, 10, 0);
    strip.setPixelColor(56, 10, 10, 0);
    strip.setPixelColor(57, 10, 10, 0);
  }
  //filed 8
  if( field[7]==0 ){
    strip.setPixelColor(51, 0, 0, 0);
    strip.setPixelColor(52, 0, 0, 0);
    strip.setPixelColor(59, 0, 0, 0);
    strip.setPixelColor(60, 0, 0, 0);
  }
  if( field[7]==1 ){
    strip.setPixelColor(51, 0, 0, 10);
    strip.setPixelColor(52, 0, 0, 10);
    strip.setPixelColor(59, 0, 0, 10);
    strip.setPixelColor(60, 0, 0, 10);
  }
  if( field[7]==2 ){
    strip.setPixelColor(51, 0, 10, 0);
    strip.setPixelColor(52, 0, 10, 0);
    strip.setPixelColor(59, 0, 10, 0);
    strip.setPixelColor(60, 0, 10, 0);
  }
  if( field[7]==3 ){
    strip.setPixelColor(51, 10, 10, 0);
    strip.setPixelColor(52, 10, 10, 0);
    strip.setPixelColor(59, 10, 10, 0);
    strip.setPixelColor(60, 10, 10, 0);
  }
  //filed 9
  if( field[8]==0 ){
    strip.setPixelColor(54, 0, 0, 0);
    strip.setPixelColor(55, 0, 0, 0);
    strip.setPixelColor(62, 0, 0, 0);
    strip.setPixelColor(63, 0, 0, 0);
  }
  if( field[8]==1 ){
    strip.setPixelColor(54, 0, 0, 10);
    strip.setPixelColor(55, 0, 0, 10);
    strip.setPixelColor(62, 0, 0, 10);
    strip.setPixelColor(63, 0, 0, 10);
  }
  if( field[8]==2 ){
    strip.setPixelColor(54, 0, 10, 0);
    strip.setPixelColor(55, 0, 10, 0);
    strip.setPixelColor(62, 0, 10, 0);
    strip.setPixelColor(63, 0, 10, 0);
  }
  if( field[8]==3 ){
    strip.setPixelColor(54, 10, 10, 0);
    strip.setPixelColor(55, 10, 10, 0);
    strip.setPixelColor(62, 10, 10, 0);
    strip.setPixelColor(63, 10, 10, 0);
  } 
  strip.show();
}

int winner(int field[]){
  if( field[0]==field[1] && field[1]==field[2] ){
    return field[0];
  }
  if( field[3]==field[4] && field[4]==field[5] ){
    return field[3];
  }
  if( field[6]==field[7] && field[7]==field[8] ){
    return field[6];
  }
  if( field[0]==field[3] && field[3]==field[6] ){
    return field[0];
  }
  if( field[1]==field[4] && field[4]==field[7] ){
    return field[1];
  }
  if( field[2]==field[5] && field[5]==field[8] ){
    return field[2];
  }
  if( field[0]==field[4] && field[4]==field[8] ){
    return field[0];
  }
  if( field[2]==field[4] && field[4]==field[6] ){
    return field[2];
  }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup

void setup() {

  pinMode(ButtonR,INPUT);
  pinMode(ButtonY,INPUT);
  pinMode(LedPlayer1,OUTPUT);
  pinMode(LedPlayer2,OUTPUT);

  strip.begin();
  strip.show();    //Initilize all pixel to off

  grid();

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Main

void loop() {

  if( player1 == HIGH ){
    digitalWrite(LedPlayer1,HIGH);
    digitalWrite(LedPlayer2,LOW);
  }
  if( player2 == HIGH){
    digitalWrite(LedPlayer1,LOW);
    digitalWrite(LedPlayer2,HIGH);
  }

  //Cursor
  if( digitalRead(ButtonY)==HIGH ){
    delay(200);
    for( i=0 ; i<=8 ; i++){
      if( field[i]==3 ){
        field[i] = 0;
      }
    }   
    do{
      f++;
      if( f==10 ){
        f = 1;
      }
      if( field[f-1]==0 ){
        field[f-1] = 3;
        e++;
      }
      else{
        e = 0;
      }
    }
    while(e==0);
    e = 0;
    show(field);
  }

  //Red Button
  if(digitalRead(ButtonR)==HIGH && f!=0 ){
    delay(200);
    for( i=0 ; i<=8 ; i++){
      if( field[i]==3 ){
        field[i] = 0;
      }
    }
    if( player1==HIGH ){
      field[f-1] = 1;
    }
    if( player2==HIGH ){
      field[f-1] = 2;
    }
    player1 = !player1;
    player2 = !player2;
    f = 0;
    show(field);
  }

  //Winner
  w = winner(field);
  if( w==1 ){
    for( i=0 ; i<=63 ; i++){
      strip.setPixelColor(i, 0, 0, 20);
    }
    strip.show();
    delay(1000);
    for( i=0 ; i<=8 ; i++){    
      field[i] = 0;
    }
    show(field);
    grid();
  }


  if( w==2 ){
    for( i=0 ; i<=63 ; i++){
      strip.setPixelColor(i, 0, 20, 0);
      strip.show();
      delay(1000);
      for( i=0 ; i<=8 ; i++){    
        field[i] = 0;
      }
      show(field);
      grid();
    }
  }

}

Two bugs who i found:

When the top/left field is market in green and the below/right filed in blue and you jump with the "cursor" in the center field it says blue won. Same bug if the top/left field is blue and the below/right field ist green then it says green won.

Next bug is when de below row is complete blue, blue also wins, it dosen´t say that blue is the winner.

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”