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
main.cpp@0:218d3fb75950, 2015-11-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |