Multi-game multiplayer arcade gaming system meant for the blue O when playing Super Tic-Tac-Toe.
Dependencies: 4DGL-uLCD-SE PinDetect SDFileSystem mbed wave_player
Diff: main.cpp
- Revision:
- 0:218d3fb75950
- Child:
- 1:2a7e2f5aeda4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Nov 26 02:58:17 2015 +0000 @@ -0,0 +1,208 @@ +#include "mbed.h" +#include "PinDetect.h" +#include "SDFileSystem.h" +#include "uLCD_4DGL.h" +#include "wave_player.h" +#include <mpr121.h> +#include "RGBLED.h" +#include "SimonSays.h" +#include "SuperTicTacToe.h" +#include "Stage.h" +#include "Pacman.h" +#include "Ghost.h" + + +/* -------------------------------------------------------------------------------------------- + --------------------Global components used in all games with no overlap--------------------- + --------------------------------------------------------------------------------------------*/ + +// Speaker +AnalogOut DACout(p18); +wave_player waver(&DACout); + +// SD card +SDFileSystem sd(p5, p6, p7, p8, "sd"); + +// uLCD display +uLCD_4DGL uLCD(p28, p27, p30); + + +/* -------------------------------------------------------------------------------------------- + -----------------Variables and functions prototypes used in multiple games------------------ + --------------------------------------------------------------------------------------------*/ + +// Select game to play +int selectGame(); + + +/* -------------------------------------------------------------------------------------------- + ----------Rock, Paper, Scissors, Lizard, Spock variables and function prototypes------------ + --------------------------------------------------------------------------------------------*/ + + +/* -------------------------------------------------------------------------------------------- + --------------------------------------Main function----------------------------------------- + --------------------------------------------------------------------------------------------*/ + +int main() { + start: + int game = selectGame(); + + // Play Simon Says + if (game == 0) { + // Analog noise + AnalogIn noise(p15); + + // Pushbutton interrupts + PinDetect button1(p17); + PinDetect button2(p19); + PinDetect button3(p20); + PinDetect button4(p16); + + SimonSays simon = SimonSays(noise, button1, button2, button3, button4, sd, uLCD, waver); + simon.playSimonSays(); + // Play Super Tic-Tac-Toe + } else if (game == 1) { + // Speaker + AnalogOut DACout(p18); + wave_player waver(&DACout); + + // RGB LED + RGBLED RGB(p25, p23, p22); + + // Touch keypad + InterruptIn input(p21); + I2C i2c(p9, p10); + Mpr121 MPR121(&i2c, Mpr121::ADD_VSS); + + SuperTicTacToe super = SuperTicTacToe(input, MPR121, RGB, sd, uLCD, waver); + super.playSuperTicTacToe(); + // Play Pac-Man + } else if (game == 2) { + // Pac-Man controller + PinDetect PacmanRight(p9); + PinDetect PacmanDown(p10); + PinDetect PacmanLeft(p11); + PinDetect PacmanUp(p29); + + // Red ghost controller + PinDetect redGhostRight(p26); + PinDetect redGhostDown(p15); + PinDetect redGhostLeft(p16); + PinDetect redGhostUp(p19); + + // Yellow ghost controller + PinDetect yellowGhostRight(p25); + PinDetect yellowGhostDown(p24); + PinDetect yellowGhostLeft(p23); + PinDetect yellowGhostUp(p21); + + // Maximize the baud rate + uLCD.baudrate(MAXBAUDRATE); + + // Set up the stage + Stage stage(uLCD); + stage.initialize(); + + // Set up Pac-Man + Pacman pacman(PacmanRight, PacmanDown, PacmanLeft, PacmanUp, stage, uLCD); + pacman.initialize(); + + // Set up the red ghost + Ghost redGhost(RED, pacman, redGhostRight, redGhostDown, redGhostLeft, redGhostUp, stage, uLCD); + redGhost.initialize(60, 60, FACELEFT); + + // Set up the yellow ghost + Ghost yellowGhost(YELLOW, pacman, yellowGhostRight, yellowGhostDown, yellowGhostLeft, yellowGhostUp, stage, uLCD); + yellowGhost.initialize(68, 60, FACERIGHT); + + // Wait 3 seconds + wait(3); + + // Checks to see whether the game is over + bool gameOver; + + // Loop through the game + while (1) { + pacman.displayStatus(); + gameOver = pacman.move(); + + // If all pac dots are eaten or Pac-Man runs out of lives + if (gameOver == true) { + // Break out of the loop + break; + } + + redGhost.move(); + + yellowGhost.move(); + } + + // Game over display + pacman.gameOver(); + } else { + // PLAY RPSLK + wait(1); + uLCD.cls(); + } + + wait(3); + goto start; +} + + +/* -------------------------------------------------------------------------------------------- + ------------------------Functions used in multiple games------------------------------------ + --------------------------------------------------------------------------------------------*/ + +// Select game to play +int selectGame() { + DigitalIn button1(p17); + DigitalIn button2(p19); + DigitalIn button3(p20); + DigitalIn button4(p16); + + button1.mode(PullUp); + button2.mode(PullUp); + button3.mode(PullUp); + button4.mode(PullUp); + wait(0.01); + + uLCD.baudrate(MAXBAUDRATE); + + uLCD.text_width(1); + uLCD.text_height(1); + uLCD.textbackground_color(BLACK); + uLCD.filled_rectangle(0, 0, 127, 127, BLACK); + uLCD.background_color(BLACK); + uLCD.color(GREEN); + uLCD.locate(0, 0); + + uLCD.printf("Select game:\n\n"); + uLCD.printf("pb1: Simon Says\n"); + uLCD.printf("pb2: Super Tic-\n Tac-Toe\n"); + uLCD.printf("pb3: Pac-Man\n"); + uLCD.printf("pb4: Rock, Paper,\n Scissors,\n Lizard, Spock"); + wait(0.1); + + int gameNumber = -1; + + while (1) { + if (button1 != 1) { + gameNumber = 0; + break; + } else if (button2 != 1) { + gameNumber = 1; + break; + } else if (button3 != 1) { + gameNumber = 2; + break; + } else if (button4 != 1) { + gameNumber = 3; + break; + } + } + + uLCD.cls(); + return gameNumber; +} \ No newline at end of file