Multi-game multiplayer arcade gaming system meant for the red X when playing Super Tic-Tac-Toe.

Dependencies:   uLCD_4DGL_SE PinDetect SDFileSystem mbed wave_player

Committer:
soapy12312
Date:
Thu Nov 26 02:58:17 2015 +0000
Revision:
0:218d3fb75950
Child:
1:2a7e2f5aeda4
Working game selection with Simon Says, Super Tic-Tac-Toe and Simon Says.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
soapy12312 0:218d3fb75950 1 #include "mbed.h"
soapy12312 0:218d3fb75950 2 #include "PinDetect.h"
soapy12312 0:218d3fb75950 3 #include "SDFileSystem.h"
soapy12312 0:218d3fb75950 4 #include "uLCD_4DGL.h"
soapy12312 0:218d3fb75950 5 #include "wave_player.h"
soapy12312 0:218d3fb75950 6 #include <mpr121.h>
soapy12312 0:218d3fb75950 7 #include "RGBLED.h"
soapy12312 0:218d3fb75950 8 #include "SimonSays.h"
soapy12312 0:218d3fb75950 9 #include "SuperTicTacToe.h"
soapy12312 0:218d3fb75950 10 #include "Stage.h"
soapy12312 0:218d3fb75950 11 #include "Pacman.h"
soapy12312 0:218d3fb75950 12 #include "Ghost.h"
soapy12312 0:218d3fb75950 13
soapy12312 0:218d3fb75950 14
soapy12312 0:218d3fb75950 15 /* --------------------------------------------------------------------------------------------
soapy12312 0:218d3fb75950 16 --------------------Global components used in all games with no overlap---------------------
soapy12312 0:218d3fb75950 17 --------------------------------------------------------------------------------------------*/
soapy12312 0:218d3fb75950 18
soapy12312 0:218d3fb75950 19 // Speaker
soapy12312 0:218d3fb75950 20 AnalogOut DACout(p18);
soapy12312 0:218d3fb75950 21 wave_player waver(&DACout);
soapy12312 0:218d3fb75950 22
soapy12312 0:218d3fb75950 23 // SD card
soapy12312 0:218d3fb75950 24 SDFileSystem sd(p5, p6, p7, p8, "sd");
soapy12312 0:218d3fb75950 25
soapy12312 0:218d3fb75950 26 // uLCD display
soapy12312 0:218d3fb75950 27 uLCD_4DGL uLCD(p28, p27, p30);
soapy12312 0:218d3fb75950 28
soapy12312 0:218d3fb75950 29
soapy12312 0:218d3fb75950 30 /* --------------------------------------------------------------------------------------------
soapy12312 0:218d3fb75950 31 -----------------Variables and functions prototypes used in multiple games------------------
soapy12312 0:218d3fb75950 32 --------------------------------------------------------------------------------------------*/
soapy12312 0:218d3fb75950 33
soapy12312 0:218d3fb75950 34 // Select game to play
soapy12312 0:218d3fb75950 35 int selectGame();
soapy12312 0:218d3fb75950 36
soapy12312 0:218d3fb75950 37
soapy12312 0:218d3fb75950 38 /* --------------------------------------------------------------------------------------------
soapy12312 0:218d3fb75950 39 ----------Rock, Paper, Scissors, Lizard, Spock variables and function prototypes------------
soapy12312 0:218d3fb75950 40 --------------------------------------------------------------------------------------------*/
soapy12312 0:218d3fb75950 41
soapy12312 0:218d3fb75950 42
soapy12312 0:218d3fb75950 43 /* --------------------------------------------------------------------------------------------
soapy12312 0:218d3fb75950 44 --------------------------------------Main function-----------------------------------------
soapy12312 0:218d3fb75950 45 --------------------------------------------------------------------------------------------*/
soapy12312 0:218d3fb75950 46
soapy12312 0:218d3fb75950 47 int main() {
soapy12312 0:218d3fb75950 48 start:
soapy12312 0:218d3fb75950 49 int game = selectGame();
soapy12312 0:218d3fb75950 50
soapy12312 0:218d3fb75950 51 // Play Simon Says
soapy12312 0:218d3fb75950 52 if (game == 0) {
soapy12312 0:218d3fb75950 53 // Analog noise
soapy12312 0:218d3fb75950 54 AnalogIn noise(p15);
soapy12312 0:218d3fb75950 55
soapy12312 0:218d3fb75950 56 // Pushbutton interrupts
soapy12312 0:218d3fb75950 57 PinDetect button1(p17);
soapy12312 0:218d3fb75950 58 PinDetect button2(p19);
soapy12312 0:218d3fb75950 59 PinDetect button3(p20);
soapy12312 0:218d3fb75950 60 PinDetect button4(p16);
soapy12312 0:218d3fb75950 61
soapy12312 0:218d3fb75950 62 SimonSays simon = SimonSays(noise, button1, button2, button3, button4, sd, uLCD, waver);
soapy12312 0:218d3fb75950 63 simon.playSimonSays();
soapy12312 0:218d3fb75950 64 // Play Super Tic-Tac-Toe
soapy12312 0:218d3fb75950 65 } else if (game == 1) {
soapy12312 0:218d3fb75950 66 // Speaker
soapy12312 0:218d3fb75950 67 AnalogOut DACout(p18);
soapy12312 0:218d3fb75950 68 wave_player waver(&DACout);
soapy12312 0:218d3fb75950 69
soapy12312 0:218d3fb75950 70 // RGB LED
soapy12312 0:218d3fb75950 71 RGBLED RGB(p25, p23, p22);
soapy12312 0:218d3fb75950 72
soapy12312 0:218d3fb75950 73 // Touch keypad
soapy12312 0:218d3fb75950 74 InterruptIn input(p21);
soapy12312 0:218d3fb75950 75 I2C i2c(p9, p10);
soapy12312 0:218d3fb75950 76 Mpr121 MPR121(&i2c, Mpr121::ADD_VSS);
soapy12312 0:218d3fb75950 77
soapy12312 0:218d3fb75950 78 SuperTicTacToe super = SuperTicTacToe(input, MPR121, RGB, sd, uLCD, waver);
soapy12312 0:218d3fb75950 79 super.playSuperTicTacToe();
soapy12312 0:218d3fb75950 80 // Play Pac-Man
soapy12312 0:218d3fb75950 81 } else if (game == 2) {
soapy12312 0:218d3fb75950 82 // Pac-Man controller
soapy12312 0:218d3fb75950 83 PinDetect PacmanRight(p9);
soapy12312 0:218d3fb75950 84 PinDetect PacmanDown(p10);
soapy12312 0:218d3fb75950 85 PinDetect PacmanLeft(p11);
soapy12312 0:218d3fb75950 86 PinDetect PacmanUp(p29);
soapy12312 0:218d3fb75950 87
soapy12312 0:218d3fb75950 88 // Red ghost controller
soapy12312 0:218d3fb75950 89 PinDetect redGhostRight(p26);
soapy12312 0:218d3fb75950 90 PinDetect redGhostDown(p15);
soapy12312 0:218d3fb75950 91 PinDetect redGhostLeft(p16);
soapy12312 0:218d3fb75950 92 PinDetect redGhostUp(p19);
soapy12312 0:218d3fb75950 93
soapy12312 0:218d3fb75950 94 // Yellow ghost controller
soapy12312 0:218d3fb75950 95 PinDetect yellowGhostRight(p25);
soapy12312 0:218d3fb75950 96 PinDetect yellowGhostDown(p24);
soapy12312 0:218d3fb75950 97 PinDetect yellowGhostLeft(p23);
soapy12312 0:218d3fb75950 98 PinDetect yellowGhostUp(p21);
soapy12312 0:218d3fb75950 99
soapy12312 0:218d3fb75950 100 // Maximize the baud rate
soapy12312 0:218d3fb75950 101 uLCD.baudrate(MAXBAUDRATE);
soapy12312 0:218d3fb75950 102
soapy12312 0:218d3fb75950 103 // Set up the stage
soapy12312 0:218d3fb75950 104 Stage stage(uLCD);
soapy12312 0:218d3fb75950 105 stage.initialize();
soapy12312 0:218d3fb75950 106
soapy12312 0:218d3fb75950 107 // Set up Pac-Man
soapy12312 0:218d3fb75950 108 Pacman pacman(PacmanRight, PacmanDown, PacmanLeft, PacmanUp, stage, uLCD);
soapy12312 0:218d3fb75950 109 pacman.initialize();
soapy12312 0:218d3fb75950 110
soapy12312 0:218d3fb75950 111 // Set up the red ghost
soapy12312 0:218d3fb75950 112 Ghost redGhost(RED, pacman, redGhostRight, redGhostDown, redGhostLeft, redGhostUp, stage, uLCD);
soapy12312 0:218d3fb75950 113 redGhost.initialize(60, 60, FACELEFT);
soapy12312 0:218d3fb75950 114
soapy12312 0:218d3fb75950 115 // Set up the yellow ghost
soapy12312 0:218d3fb75950 116 Ghost yellowGhost(YELLOW, pacman, yellowGhostRight, yellowGhostDown, yellowGhostLeft, yellowGhostUp, stage, uLCD);
soapy12312 0:218d3fb75950 117 yellowGhost.initialize(68, 60, FACERIGHT);
soapy12312 0:218d3fb75950 118
soapy12312 0:218d3fb75950 119 // Wait 3 seconds
soapy12312 0:218d3fb75950 120 wait(3);
soapy12312 0:218d3fb75950 121
soapy12312 0:218d3fb75950 122 // Checks to see whether the game is over
soapy12312 0:218d3fb75950 123 bool gameOver;
soapy12312 0:218d3fb75950 124
soapy12312 0:218d3fb75950 125 // Loop through the game
soapy12312 0:218d3fb75950 126 while (1) {
soapy12312 0:218d3fb75950 127 pacman.displayStatus();
soapy12312 0:218d3fb75950 128 gameOver = pacman.move();
soapy12312 0:218d3fb75950 129
soapy12312 0:218d3fb75950 130 // If all pac dots are eaten or Pac-Man runs out of lives
soapy12312 0:218d3fb75950 131 if (gameOver == true) {
soapy12312 0:218d3fb75950 132 // Break out of the loop
soapy12312 0:218d3fb75950 133 break;
soapy12312 0:218d3fb75950 134 }
soapy12312 0:218d3fb75950 135
soapy12312 0:218d3fb75950 136 redGhost.move();
soapy12312 0:218d3fb75950 137
soapy12312 0:218d3fb75950 138 yellowGhost.move();
soapy12312 0:218d3fb75950 139 }
soapy12312 0:218d3fb75950 140
soapy12312 0:218d3fb75950 141 // Game over display
soapy12312 0:218d3fb75950 142 pacman.gameOver();
soapy12312 0:218d3fb75950 143 } else {
soapy12312 0:218d3fb75950 144 // PLAY RPSLK
soapy12312 0:218d3fb75950 145 wait(1);
soapy12312 0:218d3fb75950 146 uLCD.cls();
soapy12312 0:218d3fb75950 147 }
soapy12312 0:218d3fb75950 148
soapy12312 0:218d3fb75950 149 wait(3);
soapy12312 0:218d3fb75950 150 goto start;
soapy12312 0:218d3fb75950 151 }
soapy12312 0:218d3fb75950 152
soapy12312 0:218d3fb75950 153
soapy12312 0:218d3fb75950 154 /* --------------------------------------------------------------------------------------------
soapy12312 0:218d3fb75950 155 ------------------------Functions used in multiple games------------------------------------
soapy12312 0:218d3fb75950 156 --------------------------------------------------------------------------------------------*/
soapy12312 0:218d3fb75950 157
soapy12312 0:218d3fb75950 158 // Select game to play
soapy12312 0:218d3fb75950 159 int selectGame() {
soapy12312 0:218d3fb75950 160 DigitalIn button1(p17);
soapy12312 0:218d3fb75950 161 DigitalIn button2(p19);
soapy12312 0:218d3fb75950 162 DigitalIn button3(p20);
soapy12312 0:218d3fb75950 163 DigitalIn button4(p16);
soapy12312 0:218d3fb75950 164
soapy12312 0:218d3fb75950 165 button1.mode(PullUp);
soapy12312 0:218d3fb75950 166 button2.mode(PullUp);
soapy12312 0:218d3fb75950 167 button3.mode(PullUp);
soapy12312 0:218d3fb75950 168 button4.mode(PullUp);
soapy12312 0:218d3fb75950 169 wait(0.01);
soapy12312 0:218d3fb75950 170
soapy12312 0:218d3fb75950 171 uLCD.baudrate(MAXBAUDRATE);
soapy12312 0:218d3fb75950 172
soapy12312 0:218d3fb75950 173 uLCD.text_width(1);
soapy12312 0:218d3fb75950 174 uLCD.text_height(1);
soapy12312 0:218d3fb75950 175 uLCD.textbackground_color(BLACK);
soapy12312 0:218d3fb75950 176 uLCD.filled_rectangle(0, 0, 127, 127, BLACK);
soapy12312 0:218d3fb75950 177 uLCD.background_color(BLACK);
soapy12312 0:218d3fb75950 178 uLCD.color(GREEN);
soapy12312 0:218d3fb75950 179 uLCD.locate(0, 0);
soapy12312 0:218d3fb75950 180
soapy12312 0:218d3fb75950 181 uLCD.printf("Select game:\n\n");
soapy12312 0:218d3fb75950 182 uLCD.printf("pb1: Simon Says\n");
soapy12312 0:218d3fb75950 183 uLCD.printf("pb2: Super Tic-\n Tac-Toe\n");
soapy12312 0:218d3fb75950 184 uLCD.printf("pb3: Pac-Man\n");
soapy12312 0:218d3fb75950 185 uLCD.printf("pb4: Rock, Paper,\n Scissors,\n Lizard, Spock");
soapy12312 0:218d3fb75950 186 wait(0.1);
soapy12312 0:218d3fb75950 187
soapy12312 0:218d3fb75950 188 int gameNumber = -1;
soapy12312 0:218d3fb75950 189
soapy12312 0:218d3fb75950 190 while (1) {
soapy12312 0:218d3fb75950 191 if (button1 != 1) {
soapy12312 0:218d3fb75950 192 gameNumber = 0;
soapy12312 0:218d3fb75950 193 break;
soapy12312 0:218d3fb75950 194 } else if (button2 != 1) {
soapy12312 0:218d3fb75950 195 gameNumber = 1;
soapy12312 0:218d3fb75950 196 break;
soapy12312 0:218d3fb75950 197 } else if (button3 != 1) {
soapy12312 0:218d3fb75950 198 gameNumber = 2;
soapy12312 0:218d3fb75950 199 break;
soapy12312 0:218d3fb75950 200 } else if (button4 != 1) {
soapy12312 0:218d3fb75950 201 gameNumber = 3;
soapy12312 0:218d3fb75950 202 break;
soapy12312 0:218d3fb75950 203 }
soapy12312 0:218d3fb75950 204 }
soapy12312 0:218d3fb75950 205
soapy12312 0:218d3fb75950 206 uLCD.cls();
soapy12312 0:218d3fb75950 207 return gameNumber;
soapy12312 0:218d3fb75950 208 }