       updateScreen();
     }
     else {
+      
       // Figure out which colour counter has been dropped
-      char counter;
-      if ((btns & 0b1111111) == col) counter = 'O'; 
-      else counter = 'X';
-      // Has human chosen a colour yet?
-      if (human == '-') {
-        // Human has now chosen a colour and robot chooses the other
-        human = counter;
-        if (human == 'X') {
-          humanColour = strip.Color(32, 32, 0);
-          robot = 'O'; 
-          robotColour = strip.Color(0, 0, 64);
-        }
-        else {
-          humanColour = strip.Color(0, 0, 64);
-          robot = 'X';
-          robotColour = strip.Color(32, 32, 0);
-        }
-      }
-      // Has human played with robot's colour?
-      if (counter != human) {
+      byte counter;
+      if ((btns & 0b1111111) == col) counter = blue; else counter = yellow;
+      
+      // Have player colours been chosen yet?
+      if (playerColour[human] == 0 && playerColour[robot] == 0) {
+        // Colours have now been chosen
+        playerColour[human] = counter;
+        playerColour[robot] = 1 - counter;
+      }
+      
+      // Has the correct colour token been dropped?
+      if (counter != playerColour[whosTurn]) {
         strcpy(screen[0], "Cheat!");
         updateScreen();
       }
       else {
-        // Human has played correct colour. Figure out which column
+        
+        // The correct colour has bee dropped. Figure out which column
         for (byte i=0; i<=6; i++) {
           strip.setPixelColor(i, 0);
           if (bit(i) == col) {


void loop() {
  char c;
  byte best;
  int currentScore;
  unsigned int btnsNow = 0;
  // Read all buttons in the 7 cols x 2 rows matrix
  for (byte row=0; row<=1; row++) {
    for (byte col=0; col<=6; col++) {

unsigned int lastBtns = NO_BUTTONS;
unsigned int stableBtns = NO_BUTTONS;
unsigned long debounce;

const byte human = 0;
const byte robot = 1;
const char token[2] = { 'O', 'X' };
byte whosTurn = human;
byte robotMove;

const byte blue = 0;
const byte yellow = 1;
const uint32_t neoPixelColour[2] = { strip.Color(0,0,64), strip.Color(32,32,0) };
byte playerColour[2] = {0, 0};

char board[42];
char screen[7][22];
// Array containing start position of each "win line"
