meurig phillips snake game
Dependencies: Joystick N5110 SDFileSystem beep fsmMenu mbed
main.h@23:6f042168d147, 2016-05-05 (annotated)
- Committer:
- meurigp
- Date:
- Thu May 05 14:56:17 2016 +0000
- Revision:
- 23:6f042168d147
- Parent:
- 22:195d66c61bf3
final code submission 2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
meurigp | 10:7820b46476ea | 1 | /** |
meurigp | 10:7820b46476ea | 2 | @file main.h |
meurigp | 11:f8478bc749e0 | 3 | @brief Header file containing functions prototypes, defines and global variables for the snake game |
meurigp | 10:7820b46476ea | 4 | @brief Revision 1.0. |
meurigp | 10:7820b46476ea | 5 | @author Meurig Phillips |
meurigp | 10:7820b46476ea | 6 | @date April 2016 |
meurigp | 10:7820b46476ea | 7 | */ |
meurigp | 10:7820b46476ea | 8 | |
meurigp | 10:7820b46476ea | 9 | #ifndef MAIN_H |
meurigp | 10:7820b46476ea | 10 | #define MAIN_H |
meurigp | 10:7820b46476ea | 11 | |
meurigp | 10:7820b46476ea | 12 | #include "mbed.h" |
meurigp | 15:a5590211888c | 13 | #include "beep.h" |
meurigp | 21:e03461ea23e9 | 14 | #include "N5110.h" |
meurigp | 21:e03461ea23e9 | 15 | #include "SDFileSystem.h" |
meurigp | 21:e03461ea23e9 | 16 | #include "Joystick.h" |
meurigp | 21:e03461ea23e9 | 17 | #include "fsmMenu.h" |
meurigp | 10:7820b46476ea | 18 | |
meurigp | 21:e03461ea23e9 | 19 | /** |
meurigp | 21:e03461ea23e9 | 20 | @namespace lcd |
meurigp | 21:e03461ea23e9 | 21 | @brief GPIO for LCD screen |
meurigp | 21:e03461ea23e9 | 22 | */ |
meurigp | 21:e03461ea23e9 | 23 | N5110 lcd (PTD3, PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
meurigp | 21:e03461ea23e9 | 24 | /** |
meurigp | 21:e03461ea23e9 | 25 | @namespace sd |
meurigp | 21:e03461ea23e9 | 26 | @brief GPIO for SD card holder |
meurigp | 21:e03461ea23e9 | 27 | */ |
meurigp | 21:e03461ea23e9 | 28 | SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); |
meurigp | 21:e03461ea23e9 | 29 | /** |
meurigp | 10:7820b46476ea | 30 | @namespace greenLed |
meurigp | 10:7820b46476ea | 31 | @brief GPIO output for green LED |
meurigp | 21:e03461ea23e9 | 32 | */ |
meurigp | 21:e03461ea23e9 | 33 | DigitalOut greenLed(PTC2); |
meurigp | 21:e03461ea23e9 | 34 | /** |
meurigp | 10:7820b46476ea | 35 | @namespace redLed |
meurigp | 10:7820b46476ea | 36 | @brief GPIO output for red LED |
meurigp | 21:e03461ea23e9 | 37 | */ |
meurigp | 21:e03461ea23e9 | 38 | DigitalOut redLed(PTA2); |
meurigp | 21:e03461ea23e9 | 39 | /** |
meurigp | 14:56e355c5cfc9 | 40 | @namespace pot |
meurigp | 14:56e355c5cfc9 | 41 | @brief GPIO input for the POT |
meurigp | 21:e03461ea23e9 | 42 | */ |
meurigp | 21:e03461ea23e9 | 43 | AnalogIn pot(PTB10); |
meurigp | 21:e03461ea23e9 | 44 | /** |
meurigp | 11:f8478bc749e0 | 45 | @namespace buzzer |
meurigp | 11:f8478bc749e0 | 46 | @brief GPIO output for buzzer |
meurigp | 10:7820b46476ea | 47 | */ |
meurigp | 21:e03461ea23e9 | 48 | Beep buzzer(PTA1); |
meurigp | 21:e03461ea23e9 | 49 | /** |
meurigp | 21:e03461ea23e9 | 50 | @namespace RB |
meurigp | 21:e03461ea23e9 | 51 | @brief GPIO input for Right Button |
meurigp | 21:e03461ea23e9 | 52 | */ |
meurigp | 21:e03461ea23e9 | 53 | InterruptIn RB(PTE24); |
meurigp | 21:e03461ea23e9 | 54 | /** |
meurigp | 21:e03461ea23e9 | 55 | @namespace LB |
meurigp | 21:e03461ea23e9 | 56 | @brief GPIO input for Left Button |
meurigp | 21:e03461ea23e9 | 57 | */ |
meurigp | 21:e03461ea23e9 | 58 | InterruptIn LB(PTE25); |
meurigp | 21:e03461ea23e9 | 59 | /** |
meurigp | 21:e03461ea23e9 | 60 | @namespace gameTicker |
meurigp | 21:e03461ea23e9 | 61 | @brief ticker to apply logic and update screen |
meurigp | 21:e03461ea23e9 | 62 | */ |
meurigp | 21:e03461ea23e9 | 63 | Ticker gameTicker; |
meurigp | 11:f8478bc749e0 | 64 | |
meurigp | 21:e03461ea23e9 | 65 | //Enums |
meurigp | 21:e03461ea23e9 | 66 | /*! Enum containing current direction of snake */ |
meurigp | 11:f8478bc749e0 | 67 | enum CurrentDirection { |
meurigp | 11:f8478bc749e0 | 68 | up, |
meurigp | 11:f8478bc749e0 | 69 | down, |
meurigp | 11:f8478bc749e0 | 70 | left, |
meurigp | 11:f8478bc749e0 | 71 | right, |
meurigp | 11:f8478bc749e0 | 72 | centre, |
meurigp | 11:f8478bc749e0 | 73 | }; |
meurigp | 21:e03461ea23e9 | 74 | CurrentDirection currentDirection = centre; //initialise direction |
meurigp | 11:f8478bc749e0 | 75 | |
meurigp | 21:e03461ea23e9 | 76 | /*! Enum containing different game modes */ |
meurigp | 21:e03461ea23e9 | 77 | |
meurigp | 14:56e355c5cfc9 | 78 | enum GameType { |
meurigp | 16:68b9460d4c76 | 79 | classicMode, |
meurigp | 16:68b9460d4c76 | 80 | infiniteMode, |
meurigp | 16:68b9460d4c76 | 81 | hardMode, |
meurigp | 14:56e355c5cfc9 | 82 | }; |
meurigp | 21:e03461ea23e9 | 83 | GameType gameType = classicMode; //initialise |
meurigp | 14:56e355c5cfc9 | 84 | |
meurigp | 21:e03461ea23e9 | 85 | //Volatile Integers for ISR |
meurigp | 16:68b9460d4c76 | 86 | volatile int game_timer_flag = 0; /*!< flag for game timer isr */ |
meurigp | 16:68b9460d4c76 | 87 | volatile int rb_flag = 0; /*!< flag for right button isr */ |
meurigp | 16:68b9460d4c76 | 88 | volatile int lb_flag = 0; /*!< flag for left button isr */ |
meurigp | 21:e03461ea23e9 | 89 | |
meurigp | 21:e03461ea23e9 | 90 | //Integers |
meurigp | 11:f8478bc749e0 | 91 | int randomX = rand() % 83 + 1; /*!< random number in the range of 1 to 83 assigned to randomX */ |
meurigp | 11:f8478bc749e0 | 92 | int randomY = rand() % 47 + 1; /*!< random number in the range of 1 to 47 assigned to randomY */ |
meurigp | 11:f8478bc749e0 | 93 | int randomXoddEven = randomX%2; /*!< distinguish whether randomX is odd or even */ |
meurigp | 11:f8478bc749e0 | 94 | int randomYoddEven = randomY%2; /*!< distinguish whether randomY is odd or even */ |
meurigp | 11:f8478bc749e0 | 95 | int snakeTailX[100]; /*!< array for X coordinate of each snake segment */ |
meurigp | 11:f8478bc749e0 | 96 | int snakeTailY[100]; /*!< array for Y coordinate of each snake segment */ |
meurigp | 11:f8478bc749e0 | 97 | int snakeTailLength = 3; /*!< length of snake, intialised to 3 */ |
meurigp | 11:f8478bc749e0 | 98 | int score = 0; /*!< score for current round */ |
meurigp | 11:f8478bc749e0 | 99 | int top_score = 0; /*!< top score read and write from the SD card */ |
meurigp | 11:f8478bc749e0 | 100 | int fruitValue = 10; /*!< value of the fruit */ |
meurigp | 14:56e355c5cfc9 | 101 | int i = 40; /*!< x origin of snake head, intialised at 41 */ |
meurigp | 14:56e355c5cfc9 | 102 | int j = 22; /*!< y origin of snake head, intialised at 23 */ |
meurigp | 11:f8478bc749e0 | 103 | int prev_i; /*!< integer to store previous value of x/i */ |
meurigp | 11:f8478bc749e0 | 104 | int prev_j; /*!< integer to store previous value of y/j */ |
meurigp | 11:f8478bc749e0 | 105 | int prev2_i; /*!< integer to store previous, previous value of x/i */ |
meurigp | 11:f8478bc749e0 | 106 | int prev2_j; /*!< integer to store previous, previous value of y/j */ |
meurigp | 12:825a402d230f | 107 | int pauseCount; /*!< counts how many times the player has paused */ |
meurigp | 11:f8478bc749e0 | 108 | |
meurigp | 21:e03461ea23e9 | 109 | // Booleans |
meurigp | 21:e03461ea23e9 | 110 | bool gamePlaying = false; /*!< bool to store whether the game is in play or not */ |
meurigp | 11:f8478bc749e0 | 111 | |
meurigp | 21:e03461ea23e9 | 112 | // Function proto types |
meurigp | 21:e03461ea23e9 | 113 | //ISR's |
meurigp | 21:e03461ea23e9 | 114 | /** @name ISR Functions |
meurigp | 21:e03461ea23e9 | 115 | * Functions to raise flags |
meurigp | 21:e03461ea23e9 | 116 | */ |
meurigp | 21:e03461ea23e9 | 117 | ///@{ |
meurigp | 21:e03461ea23e9 | 118 | void timer_isr(); /*!< Sets the gameTicker flag when called */ |
meurigp | 21:e03461ea23e9 | 119 | void rb_isr(); /*!< Sets the Right Button flag when called */ |
meurigp | 21:e03461ea23e9 | 120 | void lb_isr(); /*!< Sets the Left Button flag when called */ |
meurigp | 21:e03461ea23e9 | 121 | ///@} |
meurigp | 21:e03461ea23e9 | 122 | |
meurigp | 21:e03461ea23e9 | 123 | //Other functions |
meurigp | 11:f8478bc749e0 | 124 | /** |
meurigp | 11:f8478bc749e0 | 125 | Displays new fruit |
meurigp | 11:f8478bc749e0 | 126 | */ |
meurigp | 11:f8478bc749e0 | 127 | void generateFood(); |
meurigp | 11:f8478bc749e0 | 128 | /** |
meurigp | 11:f8478bc749e0 | 129 | Generates new random coordinates for the fruit |
meurigp | 11:f8478bc749e0 | 130 | */ |
meurigp | 11:f8478bc749e0 | 131 | void newFruitXY(); |
meurigp | 11:f8478bc749e0 | 132 | /** |
meurigp | 13:08159ea3d556 | 133 | Receives input form joystick and updates the current direction |
meurigp | 11:f8478bc749e0 | 134 | */ |
meurigp | 11:f8478bc749e0 | 135 | void moveSnake(); |
meurigp | 11:f8478bc749e0 | 136 | /** |
meurigp | 11:f8478bc749e0 | 137 | Restricted boundaries |
meurigp | 11:f8478bc749e0 | 138 | */ |
meurigp | 11:f8478bc749e0 | 139 | void hardWall(); |
meurigp | 11:f8478bc749e0 | 140 | /** |
meurigp | 11:f8478bc749e0 | 141 | Map with obstacles in the way |
meurigp | 11:f8478bc749e0 | 142 | */ |
meurigp | 11:f8478bc749e0 | 143 | void specialMap(); |
meurigp | 11:f8478bc749e0 | 144 | /** |
meurigp | 11:f8478bc749e0 | 145 | Infinite boundaries |
meurigp | 11:f8478bc749e0 | 146 | */ |
meurigp | 11:f8478bc749e0 | 147 | void wrapAround(); |
meurigp | 11:f8478bc749e0 | 148 | /** |
meurigp | 11:f8478bc749e0 | 149 | Calculates score |
meurigp | 11:f8478bc749e0 | 150 | */ |
meurigp | 11:f8478bc749e0 | 151 | void scoreCalculation(); |
meurigp | 11:f8478bc749e0 | 152 | /** |
meurigp | 11:f8478bc749e0 | 153 | Displayes scores when player dies |
meurigp | 11:f8478bc749e0 | 154 | */ |
meurigp | 11:f8478bc749e0 | 155 | void gameOver(); |
meurigp | 11:f8478bc749e0 | 156 | /** |
meurigp | 11:f8478bc749e0 | 157 | Initilaises the snake so it's moving from left to right to begin with |
meurigp | 11:f8478bc749e0 | 158 | */ |
meurigp | 11:f8478bc749e0 | 159 | void initSnakeTail(); |
meurigp | 11:f8478bc749e0 | 160 | /** |
meurigp | 11:f8478bc749e0 | 161 | Splash screen for the intro of the game |
meurigp | 11:f8478bc749e0 | 162 | */ |
meurigp | 11:f8478bc749e0 | 163 | void snakeIntro(); |
meurigp | 12:825a402d230f | 164 | /** |
meurigp | 12:825a402d230f | 165 | Game paused function |
meurigp | 12:825a402d230f | 166 | */ |
meurigp | 12:825a402d230f | 167 | void gamePaused(); |
meurigp | 13:08159ea3d556 | 168 | /** |
meurigp | 13:08159ea3d556 | 169 | Contains all logic for the snake game and displays accordingly |
meurigp | 13:08159ea3d556 | 170 | */ |
meurigp | 13:08159ea3d556 | 171 | void gameLogic(); |
meurigp | 17:4e6f0f7f22fb | 172 | /** |
meurigp | 17:4e6f0f7f22fb | 173 | Main loop for the game |
meurigp | 17:4e6f0f7f22fb | 174 | */ |
meurigp | 17:4e6f0f7f22fb | 175 | void mainGame(); |
meurigp | 19:8907a82ebe09 | 176 | /** |
meurigp | 19:8907a82ebe09 | 177 | Main menu loop |
meurigp | 19:8907a82ebe09 | 178 | */ |
meurigp | 19:8907a82ebe09 | 179 | void mainMenu(); |
meurigp | 22:195d66c61bf3 | 180 | /** |
meurigp | 22:195d66c61bf3 | 181 | Init interrupts peripherals |
meurigp | 22:195d66c61bf3 | 182 | */ |
meurigp | 22:195d66c61bf3 | 183 | void initInterrupts(); |
meurigp | 11:f8478bc749e0 | 184 | |
meurigp | 11:f8478bc749e0 | 185 | |
meurigp | 11:f8478bc749e0 | 186 | #endif |