Tic Tac Toe Code
// setting a variable to pin number 13
int tictacPins [] = {2,3,4,5,6,7,8,9,10,11}; // holds pin location of each LED (including the active user one at 0)
int userPin = 0; // holds the location on the array where the active user is displayed
int winnerPin = 13; // holds the location on the array wher the winnerPin is located
int buttonPin = 12; // holds number of pin for button input
int potPin = 0; // holds number of pin for the potentionmeter
int potRead = 0; // holds the pot value
int potRange = 0; // holds the value of the pot range to go from one LED to the next
int activeUser = 1; // holds the active user (1 or 0)
boolean buttonState = false; // holds buttonState (true means it has been pressed)
int user2counter = 0; // holds variable to enable the active user LED to blink
int blinkStateUser2 = 1; // holds the current blink state for all player two LEDs
int blinnkStateSelect = 0;
long unsigned timeButton; // holds time variable that ensures only one button press is read at a time
long unsigned timeButtonInter = 500; // holds the interval between button presses
long unsigned timeUserLED; // holds time variable that governs blinking of the LED light that is currently active (prior to being selected)
long unsigned timeUserInter = 150; // holds the interval for the blinking of the LED lights described above
long unsigned timePlayerLED; // holds time variable that governs the blinking of the LED lights on the spots that were selected by player 2
long unsigned timePlayerInter = 1200; // holds the interval for the blinking of the LED lights described above
long unsigned timeHolder;
int tempActiveLoc = 1; // holds number of active locations on board
int activeLoc = 1; // holds current LED selected
int availableLoc = 9; // holds number of available locations
boolean locState [] = {true, false, false, false, false, false, false, false, false, false}; // holds current state of each location board - true = taken; false = available
boolean user1select [] = {false, false, false, false, false, false, false, false, false, false}; // holds current state of board for player 1 - true = taken by player 1; false = not taken by player 1
boolean user2select [] = {false, false, false, false, false, false, false, false, false, false}; // holds current state of board for player 2 - true = taken by player 2; false = not taken by player 2
boolean gameStatus = true; // holds whether game is active or over
int gameWinner = 0;
// set-up the output pin where LED will be attached
void setup() {
for (int counter = 0; counter <= 9; counter++) { // counter to set pinMode for all tic tact toe board pins (and active user pin)
pinMode(tictacPins[counter], OUTPUT); // setting each pin as output
}
pinMode(winnerPin, OUTPUT); // set win notification pin as output
pinMode(buttonPin, INPUT); // set button switch as input
resetGame(); // call reset game function to initialize the game
}
// the loop() method runs continuously
void loop()
{
setAvailableLoc();
blinkCounters();
setUser();
browsePin();
setButtonState();
selectPin();
displaySelect();
displayUserStatus();
displayGame();
checkWin();
}
// function that reads if the button has been pressed. Then it sets buttonState to true if button was pressed
void setButtonState() {
if (millis() - timeButton > timeButtonInter) {
if (digitalRead(buttonPin) == HIGH) { // if the button is pressed
buttonState = true; // set buttonState to true
timeButton = millis(); // record that time when button was pressed
}
}
}
// function to set counter for player 2 pins to blink properly
// function that changes the active user if button has been pressed (e.g. player has made a selection
// function also calls setUser2PinState function to set counter for blinking player 2 lights
void setUser() {
if (buttonState == true && activeUser == 1) { // if button has been pressed and active user is 0
activeUser = 2; // set active user to 1
buttonState = false; // set button state to false
}
else if (buttonState == true && activeUser == 2) { // if button has been pressed and active user is 1
activeUser = 1; // set active user to 0
buttonState = false; // set button state to false
}
}
// function regulates the blinking of the user status pin based on what user is currently active
void displayUserStatus () {
if (gameWinner == 0) { // confirm that no one has won the game
displayPin(userPin, activeUser); // calls displayPin function with to change state of userPin to currect active user
} else {
if (gameWinner == 1) { // check if user 1 won
displayPin(userPin, 1); // calls displayPin function to show the winner if user 1
} else if (gameWinner == 2) { // check is user 2 won
displayPin(userPin, 2); // calls displayPin function to show the winner ifuser 2
}
}
}
// function that governs the activity of each selected pin based on whether it is a user 1 or user 2 pin
void displayPin (int tempPin, int tempUser) {
if (tempUser == 1) { // checks if current user is user 1 (0)
digitalWrite(tictacPins[tempPin], HIGH); // if it is user 1 then turn on the pin pin
} else if (tempUser == 2) {
if (blinkStateUser2 == 1) { // checks if current user is user 2 (1)
digitalWrite(tictacPins[tempPin], HIGH); // turn on the pin
}
if (blinkStateUser2 == 2) { // check counter number if equal to one
digitalWrite(tictacPins[tempPin], LOW); // turn off the pin
}
}
}
// counter function that governs the blinking of all user 2 lights
void blinkCounters () {
if (millis() - timePlayerLED < timePlayerInter/2) { // checks if enough time has elapsed sine light was turned on
blinkStateUser2 = 1; // keeps the light on until the time has exceed a given interval
} else if (millis() - timePlayerLED > timePlayerInter/2) { // once interval has passed
blinkStateUser2 = 2; // set light off by change blink state to two
}
if (millis() - timePlayerLED > timePlayerInter) { // once a full cycle has passed of turning the light on and off
timePlayerLED = millis(); // reset the time tracker for the next loop
}
}
// function that displays the game
void displayGame () {
if (gameWinner == 1 || gameWinner == 2) { // if the game has been won be either player
digitalWrite(winnerPin, HIGH); // turn on green LED
displayPin(userPin, gameWinner); // display the winner's blink pattern on user LED
} else { // if the game has not been won
digitalWrite(winnerPin, LOW); // keep green LED off
}
for (int counter = 1; counter <= 9; counter++) { // loop through each location on the tic tac toe board
if (locState[counter] == true) { // if location has been selected/taken
if (user1select[counter] == true) { // check if player one has taken this location
displayPin(counter, 1); // turn on LED to denote space taken by player 1
} else if (user2select[counter] == true) { // check if player 2 has taken this location
displayPin(counter, 2); // blink LED to denote space taken by player 2
}
}
}
}
// function that re-initialized the game once someone has won
void resetGame() {
potRead = 0; // holds the pot value
potRange = 0; // holds the value of the pot range to go from one LED to the next
activeUser = 1; // holds the active user (1 or 0)
buttonState = false; // holds buttonState (true means it has been pressed)
user2counter = 0; // holds variable to enable the active user LED to blink
tempActiveLoc = 1; // holds number of active locations on board
activeLoc = 1; // holds current LED selected
availableLoc = 9; // holds number of available locations
gameStatus = true; // holds whether game is active or over
gameWinner = 0;
timeButton = millis();
timeUserLED = millis();
timePlayerLED = millis();
for (int counter = 1; counter <= 9; counter++) { // loop to set all initialize all arrays and turn off all LEDs on tic tact toe board
locState [counter] = false; // reset locState array
user1select [counter] = false; // reset user 1 location array
user2select [counter] = false; // reset user 2 location array
digitalWrite(tictacPins [counter], LOW); // turn off all LEDs on tic tac toe board
}
}
// function that makes the current selected pin blink on and off
void displaySelect() {
if (availableLoc != 0 && gameWinner == 0) { // if there is a space available on the tic tac toe board and no winner
if ((millis() - timeUserLED) > (timeUserInter)) { // if sufficient has passed since the beggining of the last cycle
digitalWrite(tictacPins[activeLoc], HIGH); // turn on the selected LED
delay (150); // wait for 150 milliseconds
digitalWrite(tictacPins[activeLoc], LOW); // turn off the LED lights
timeUserLED = millis(); // reset cycle start time
}
}
}
// function that reads the potentiometer and uses this information to select a pin
void browsePin () {
int openLoc = 0; // variable that holds how many open locations have been found in the array
potRead = analogRead(potPin); // read the potentionmeter
tempActiveLoc = map (potRead, 0, 1024, 1, availableLoc+1); // set the size of the range
for (int counter = 1; counter <= 9; counter++) { // loop to identify current pin based on number of available pins and range
if(locState[counter] == false) { // if the pin has not been selected yet
openLoc++; // then add 1 to openLoc
}
if (openLoc == tempActiveLoc) { // if openLoc is equal to tempActiveLoc
activeLoc = counter; // then make activeLoc equal to counter
openLoc++;
}
}
}
// identifies the number of available locations on the board
int setAvailableLoc () {
availableLoc = 0; // initialize the availableLoc to 0
for (int counter = 1; counter <= 9 ; counter++) { // loop from 1 to 9
if (locState[counter] == false) { // if the location is set to false (e.g. not yet selected)
availableLoc = availableLoc + 1; // add one to the availableLoc variable
}
}
}
// function that enables a user to select a pin
void selectPin () {
if (gameWinner == 0) { // check if the game has been won, if it has not then
if (buttonState == true && activeUser == 1) { // if the button has been pressed and the active user is 1
locState[activeLoc] = true; // set the current location to taken
user1select[activeLoc] = true; // register the location as selected by user 1
} else if (buttonState == true && activeUser == 2) { // if the button has been pressed and the active user is 2
locState[activeLoc] = true; // set the current location to taken
user2select[activeLoc] = true; // register the location as selected by user 2
}
} else if (gameWinner == 1 || gameWinner == 2) { // if game has been won
if (buttonState == true) { // and if button has been pressed
resetGame(); // reset the game
}
}
}
// function that confirms whether either player has won the game
void checkWin() {
// check to see if player one won
if ((user1select[1] == true) && (user1select[2] == true) && (user1select[3] == true)) {
gameWinner = 1;
} else if ((user1select[1] == true) && (user1select[4] == true) && (user1select[7] == true)) {
gameWinner = 1;
} else if ((user1select[1] == true) && (user1select[5] == true) && (user1select[9] == true)) {
gameWinner = 1;
} else if ((user1select[2] == true) && (user1select[5] == true) && (user1select[8] == true)) {
gameWinner = 1;
} else if ((user1select[9] == true) && (user1select[3] == true) && (user1select[6] == true)) {
gameWinner = 1;
} else if ((user1select[9] == true) && (user1select[7] == true) && (user1select[8] == true)) {
gameWinner = 1;
} else if ((user1select[7] == true) && (user1select[5] == true) && (user1select[3] == true)) {
gameWinner = 1;
} else if ((user1select[4] == true) && (user1select[5] == true) && (user1select[6] == true)) {
gameWinner = 1;
}
// check to see if player two won
if ((user2select[1] == true) && (user2select[2] == true) && (user2select[3] == true)) {
gameWinner = 2;
} else if ((user2select[1] == true) && (user2select[4] == true) && (user2select[7] == true)) {
gameWinner = 2;
} else if ((user2select[1] == true) && (user2select[5] == true) && (user2select[9] == true)) {
gameWinner = 2;
} else if ((user2select[2] == true) && (user2select[5] == true) && (user2select[8] == true)) {
gameWinner = 2;
} else if ((user2select[9] == true) && (user2select[3] == true) && (user2select[6] == true)) {
gameWinner = 2;
} else if ((user2select[9] == true) && (user2select[7] == true) && (user2select[8] == true)) {
gameWinner = 2;
} else if ((user2select[7] == true) && (user2select[5] == true) && (user2select[3] == true)) {
gameWinner = 2;
} else if ((user2select[4] == true) && (user2select[5] == true) && (user2select[6] == true)) {
gameWinner = 2;
}
}
2 comments:
great job :) !
what if i don't want to use any input. how can i do that? can u send me the schematic diagram?
can u send me the schematic diagram?
Post a Comment