Hey,
I want to make a Tic Tac Toe game with LEDs and buttons.
I got it all wired up and I started to write the code for it. I have ran into a problem though: when I try to start the game (by checking if win== "inGame"), the while loop that runs the game doesn't even start.
Here is the code for my program
int controlLED = 22;
int controlButton = 53;
char nextTurn[] = "X";
int operateOn;
char win[] = "inGame";
char winner_message[] = "No one ;)";
int controlButtonState;
int BottomRightButtonState;
int BottomCenterButtonState;
int BottomLeftButtonState;
int MiddleRightButtonState;
int MiddleCenterButtonState;
int MiddleLeftButtonState;
int TopRightButtonState;
int TopCenterButtonState;
int TopLeftButtonState;
//Board
int BottomRight = 24;
int BottomCenter = 26;
int BottomLeft = 28;
int MiddleRight = 30;
int MiddleCenter = 32;
int MiddleLeft = 34;
int TopRight = 36;
int TopCenter = 38;
int TopLeft = 40;
//Buttons
int BottomRightButton = 43;
int BottomCenterButton = 45;
int BottomLeftButton = 47;
int MiddleRightButton = 31;
int MiddleCenterButton = 33;
int MiddleLeftButton = 35;
int TopRightButton = 37;
int TopCenterButton = 39;
int TopLeftButton = 41;
int board[] = {0,0,0
,0,0,0
,0,0,0};
void setup() {
Serial.begin(9600);
pinMode(BottomRight, OUTPUT);
pinMode(BottomCenter, OUTPUT);
pinMode(BottomLeft, OUTPUT);
pinMode(MiddleRight, OUTPUT);
pinMode(MiddleCenter, OUTPUT);
pinMode(MiddleLeft, OUTPUT);
pinMode(TopRight, OUTPUT);
pinMode(TopCenter, OUTPUT);
pinMode(TopLeft, OUTPUT);
pinMode(controlLED, OUTPUT);
pinMode(controlButton, INPUT);
pinMode(BottomRightButton, INPUT);
pinMode(BottomCenterButton, INPUT);
pinMode(BottomLeftButton, INPUT);
pinMode(MiddleRightButton, INPUT);
pinMode(MiddleCenterButton, INPUT);
pinMode(MiddleLeftButton, INPUT);
pinMode(TopRightButton, INPUT);
pinMode(TopCenterButton, INPUT);
pinMode(TopLeftButton, INPUT);
digitalWrite(controlButton,HIGH);
digitalWrite(BottomRightButton,HIGH);
digitalWrite(BottomCenterButton,HIGH);
digitalWrite(BottomLeftButton,HIGH);
digitalWrite(MiddleRightButton,HIGH);
digitalWrite(MiddleCenterButton,HIGH);
digitalWrite(MiddleLeftButton,HIGH);
digitalWrite(TopRightButton,HIGH);
digitalWrite(TopCenterButton,HIGH);
digitalWrite(TopLeftButton,HIGH);
}
void loop() {
controlButtonState = digitalRead(controlButton);
if(controlButtonState == 0){
Serial.println("0");
digitalWrite(controlLED, HIGH);
PvP();
}
}
void PvP() {
Serial.println(win);
while (win == "inGame") {
Serial.println(nextTurn);
checkButtonPress();
gameCondition();
}
}
void X() {
while(true){
digitalWrite(operateOn, HIGH);
delay(250);
digitalWrite(operateOn, LOW);
delay(250);
}
}
void O() {
digitalWrite(operateOn, HIGH);
}
void checkButtonPress() {
BottomRightButtonState = digitalRead(BottomRightButton);
BottomCenterButtonState = digitalRead(BottomCenterButton);
BottomLeftButtonState = digitalRead(BottomLeftButton);
MiddleRightButtonState = digitalRead(MiddleRightButton);
MiddleCenterButtonState = digitalRead(MiddleCenterButton);
MiddleLeftButtonState = digitalRead(MiddleLeftButton);
TopRightButtonState = digitalRead(TopRightButton);
TopCenterButtonState = digitalRead(TopRightButton);
TopLeftButtonState = digitalRead(TopLeftButton);
if (BottomRightButtonState == 0){
operateOn = BottomRight;
board[8] = nextTurn[0];
whoseTurn();
Serial.println("BottomRight");
}
if (BottomCenterButtonState == 0){
operateOn = BottomCenter;
board[7] = nextTurn[0];
whoseTurn();
Serial.println("BottomCenter");
}
if (BottomLeftButtonState == 0){
operateOn = BottomLeft;
board[6] = nextTurn[0];
whoseTurn();
Serial.println("BottomLeft");
}
if (MiddleRightButtonState == 0){
operateOn = MiddleRight;
board[5] = nextTurn[0];
whoseTurn();
Serial.println("MiddleRight");
}
if (MiddleCenterButtonState == 0){
operateOn = MiddleCenter;
board[4] = nextTurn[0];
whoseTurn();
Serial.println("MiddleCenter");
}
if (MiddleLeftButtonState == 0){
operateOn = MiddleLeft;
board[3] = nextTurn[0];
whoseTurn();
Serial.println("MiddleLeft");
}
if (TopRightButtonState == 0){
operateOn = TopRight;
board[2] = nextTurn[0];
whoseTurn();
Serial.println("TopRight");
}
if (TopCenterButtonState == 0){
operateOn = TopCenter;
board[1] = nextTurn[0];
whoseTurn();
Serial.println("TopCenter");
}
if (TopLeftButtonState == 0){
operateOn = TopLeft;
board[0] = nextTurn[0];
whoseTurn();
Serial.println("TopLeft");
}
}
void whoseTurn() {
if (nextTurn == "X"){
X();
nextTurn[0] = "O";
}
if (nextTurn == "O"){
O();
nextTurn[0] = "X";
}
}
void initializeGame() {
Serial.println(winner_message);
winner_message[0] = "\0";
winner_message[0] = "No one ;)";
board[0] = 0;
board[1] = 0;
board[2] = 0;
board[3] = 0;
board[4] = 0;
board[5] = 0;
board[6] = 0;
board[7] = 0;
board[8] = 0;
nextTurn[0] = "X";
digitalWrite(BottomRight,LOW);
digitalWrite(BottomCenter,LOW);
digitalWrite(BottomLeft,LOW);
digitalWrite(MiddleRight,LOW);
digitalWrite(MiddleCenter,LOW);
digitalWrite(MiddleLeft,LOW);
digitalWrite(TopRight,LOW);
digitalWrite(TopCenter,LOW);
digitalWrite(TopLeft,LOW);
win[0] = "\0";
win[0] = "inGame";
}
void winnerMessage() {
if (win[0] == "X"){
winner_message[0] = "\0";
winner_message[0] = "The winner is the player who played X";
}
if (win[0] == "O"){
winner_message[0] = "\0";
winner_message[0] = "The winner is the player who played O";
}
if (win[0] == "Tie"){
winner_message[0] = "\0";
winner_message[0] = "No one won this time... It's a tie :D";
}
}
void gameCondition() {
//Top Row
if (board[0] == "1" && board[1] == "1" && board[2] == "1"){
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "X";
Serial.println("Game Over");
initializeGame();
}
if (board[0] == "2" && board[1] == "2" && board[2] == "2"){
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Middle Row
if (board[3] == "1" && board[4] == "1" && board[5] == "1"){
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[3] == "2" && board[4] == "2" && board[5] == "2"){
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Bottom Row
if (board[6] == "1" && board[7] == "1" && board[8] == "1"){
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[6] == "2" && board[7] == "2" && board[8] == "2"){
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Left Column
if (board[0] == "1" && board[3] == "1" && board[6] == "1"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[0] == "2" && board[3] == "2" && board[6] == "2"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Middle Column
if (board[1] == "1" && board[4] == "1" && board[7] == "1"){
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[1] == "2" && board[4] == "2" && board[7] == "2"){
digitalWrite(TopLeft, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomRight, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Right Column
if (board[2] == "1" && board[5] == "1" && board[8] == "1"){
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[2] == "2" && board[5] == "2" && board[8] == "2"){
digitalWrite(TopLeft, LOW);
digitalWrite(TopCenter, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleCenter, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Top left to bottom right diagonal
if (board[0] == "1" && board[4] == "1" && board[8] == "1"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[0] == "2" && board[4] == "2" && board[8] == "2"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopRight, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomLeft, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Top right to bottom left diagonal
if (board[2] == "1" && board[4] == "1" && board[6] == "1"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopLeft, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomRight, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "X";
initializeGame();
}
if (board[2] == "2" && board[4] == "2" && board[6] == "2"){
digitalWrite(TopCenter, LOW);
digitalWrite(TopLeft, LOW);
digitalWrite(MiddleLeft, LOW);
digitalWrite(MiddleRight, LOW);
digitalWrite(BottomRight, LOW);
digitalWrite(BottomCenter, LOW);
delay(5000);
win[0] = "O";
initializeGame();
}
//Tie
if (board[0] != "0" && board[1] != "0" && board[2] != "0" && board[3] != "0" && board[4] != "0" && board[5] != "0" && board[6] != "0" && board[7] != "0" && board[8] != "0"){
win[0] = "Tie";
initializeGame();
}
}