ELEC2645 (2015/16)
/
fsmSnake
submission
Fork of fsmSnake by
fsmSnakemain.h@1:07a23e18507a, 2016-05-05 (annotated)
- Committer:
- el14d2g
- Date:
- Thu May 05 14:55:20 2016 +0000
- Revision:
- 1:07a23e18507a
- Parent:
- 0:49a79f3e6dff
submission;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el14d2g | 0:49a79f3e6dff | 1 | /** |
el14d2g | 0:49a79f3e6dff | 2 | @file fsmSnakemain.h |
el14d2g | 0:49a79f3e6dff | 3 | @file Header file containing functions prototypes,defines and gloabal variables. |
el14d2g | 0:49a79f3e6dff | 4 | @Author Dean Griffin |
el14d2g | 0:49a79f3e6dff | 5 | @date April 2016 |
el14d2g | 0:49a79f3e6dff | 6 | */ |
el14d2g | 0:49a79f3e6dff | 7 | |
el14d2g | 0:49a79f3e6dff | 8 | #ifndef FSMSNAKE_H |
el14d2g | 0:49a79f3e6dff | 9 | #define FSMSNAKE_H |
el14d2g | 0:49a79f3e6dff | 10 | |
el14d2g | 0:49a79f3e6dff | 11 | #include "mbed.h" |
el14d2g | 0:49a79f3e6dff | 12 | #include "N5110.h" |
el14d2g | 0:49a79f3e6dff | 13 | |
el14d2g | 0:49a79f3e6dff | 14 | // change this to alter tolerance of joystick direction |
el14d2g | 0:49a79f3e6dff | 15 | #define DIRECTION_TOLERANCE 0.05f |
el14d2g | 0:49a79f3e6dff | 16 | |
el14d2g | 0:49a79f3e6dff | 17 | /** |
el14d2g | 1:07a23e18507a | 18 | @namespace lcd |
el14d2g | 1:07a23e18507a | 19 | @brief lcd object |
el14d2g | 1:07a23e18507a | 20 | */ |
el14d2g | 1:07a23e18507a | 21 | // VCC, SCE, RST, D/C, MOSI, SCLK, LED |
el14d2g | 1:07a23e18507a | 22 | N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); // connections for screen |
el14d2g | 1:07a23e18507a | 23 | |
el14d2g | 1:07a23e18507a | 24 | /** |
el14d2g | 1:07a23e18507a | 25 | @namespace pc (USBTX USBRX); |
el14d2g | 1:07a23e18507a | 26 | @brief serial for devu |
el14d2g | 1:07a23e18507a | 27 | */ |
el14d2g | 1:07a23e18507a | 28 | |
el14d2g | 1:07a23e18507a | 29 | /** |
el14d2g | 0:49a79f3e6dff | 30 | @namespace button |
el14d2g | 0:49a79f3e6dff | 31 | @brief Digital in for joystick button |
el14d2g | 0:49a79f3e6dff | 32 | */ |
el14d2g | 0:49a79f3e6dff | 33 | DigitalIn button(PTB11); |
el14d2g | 0:49a79f3e6dff | 34 | /** |
el14d2g | 0:49a79f3e6dff | 35 | @namespace xpot |
el14d2g | 0:49a79f3e6dff | 36 | @brief analog in for joystick x co-ordinate |
el14d2g | 0:49a79f3e6dff | 37 | */ |
el14d2g | 0:49a79f3e6dff | 38 | AnalogIn xPot(PTB2); |
el14d2g | 0:49a79f3e6dff | 39 | /** |
el14d2g | 0:49a79f3e6dff | 40 | @namespace ypot |
el14d2g | 0:49a79f3e6dff | 41 | @brief analog in for joystick y co-ordinate |
el14d2g | 0:49a79f3e6dff | 42 | */ |
el14d2g | 0:49a79f3e6dff | 43 | AnalogIn yPot(PTB3); |
el14d2g | 0:49a79f3e6dff | 44 | /** |
el14d2g | 0:49a79f3e6dff | 45 | @namespace greenLED |
el14d2g | 0:49a79f3e6dff | 46 | @brief digital out for green game playing LED |
el14d2g | 0:49a79f3e6dff | 47 | */ |
el14d2g | 0:49a79f3e6dff | 48 | DigitalOut greenLED (PTD1); |
el14d2g | 0:49a79f3e6dff | 49 | /** |
el14d2g | 0:49a79f3e6dff | 50 | @namespace redLED |
el14d2g | 0:49a79f3e6dff | 51 | @brief digital out for red gameover LED |
el14d2g | 0:49a79f3e6dff | 52 | */ |
el14d2g | 0:49a79f3e6dff | 53 | DigitalOut redLED(PTD0); |
el14d2g | 0:49a79f3e6dff | 54 | /** |
el14d2g | 0:49a79f3e6dff | 55 | @namespace g_button_flag |
el14d2g | 0:49a79f3e6dff | 56 | @brief set flag in ISR |
el14d2g | 0:49a79f3e6dff | 57 | */ |
el14d2g | 0:49a79f3e6dff | 58 | volatile int g_button_flag = 0; |
el14d2g | 0:49a79f3e6dff | 59 | /** |
el14d2g | 0:49a79f3e6dff | 60 | @namespace g_timer_flag |
el14d2g | 0:49a79f3e6dff | 61 | @brief set flag in ISR |
el14d2g | 0:49a79f3e6dff | 62 | */ |
el14d2g | 0:49a79f3e6dff | 63 | volatile int g_timer_flag = 0; |
el14d2g | 0:49a79f3e6dff | 64 | /** |
el14d2g | 0:49a79f3e6dff | 65 | @namespace menu_isr |
el14d2g | 0:49a79f3e6dff | 66 | @brief update menu flag when called |
el14d2g | 0:49a79f3e6dff | 67 | */ |
el14d2g | 0:49a79f3e6dff | 68 | void menu_isr(); |
el14d2g | 0:49a79f3e6dff | 69 | /** |
el14d2g | 0:49a79f3e6dff | 70 | @namespace button_isr |
el14d2g | 0:49a79f3e6dff | 71 | @brief update button flag when called |
el14d2g | 0:49a79f3e6dff | 72 | */ |
el14d2g | 0:49a79f3e6dff | 73 | void button_isr(); |
el14d2g | 0:49a79f3e6dff | 74 | |
el14d2g | 0:49a79f3e6dff | 75 | |
el14d2g | 0:49a79f3e6dff | 76 | // set-up the on-board LEDs and switches |
el14d2g | 0:49a79f3e6dff | 77 | void init_K64F(); |
el14d2g | 0:49a79f3e6dff | 78 | |
el14d2g | 0:49a79f3e6dff | 79 | // set-up the on-board LEDs and switches |
el14d2g | 0:49a79f3e6dff | 80 | void init_K64F(); |
el14d2g | 1:07a23e18507a | 81 | |
el14d2g | 0:49a79f3e6dff | 82 | |
el14d2g | 0:49a79f3e6dff | 83 | |
el14d2g | 0:49a79f3e6dff | 84 | Ticker pollJoystick, checkJoystick, menuTicker, moveSnake, gameTime; |
el14d2g | 0:49a79f3e6dff | 85 | /** |
el14d2g | 0:49a79f3e6dff | 86 | flag for joystick ticker |
el14d2g | 0:49a79f3e6dff | 87 | */ |
el14d2g | 0:49a79f3e6dff | 88 | volatile int g_joystickTimer_flag = 0; |
el14d2g | 0:49a79f3e6dff | 89 | /** |
el14d2g | 0:49a79f3e6dff | 90 | flag for gametime ticker |
el14d2g | 0:49a79f3e6dff | 91 | */ |
el14d2g | 0:49a79f3e6dff | 92 | volatile int g_gameTimer_flag = 0; |
el14d2g | 0:49a79f3e6dff | 93 | |
el14d2g | 0:49a79f3e6dff | 94 | /**brief serial out for debugging |
el14d2g | 0:49a79f3e6dff | 95 | */ |
el14d2g | 0:49a79f3e6dff | 96 | |
el14d2g | 0:49a79f3e6dff | 97 | /** |
el14d2g | 0:49a79f3e6dff | 98 | @namespace pc |
el14d2g | 0:49a79f3e6dff | 99 | @brief serial connection for mbed to pc |
el14d2g | 0:49a79f3e6dff | 100 | */ |
el14d2g | 0:49a79f3e6dff | 101 | Serial pc(USBTX,USBRX); |
el14d2g | 0:49a79f3e6dff | 102 | |
el14d2g | 0:49a79f3e6dff | 103 | /** |
el14d2g | 0:49a79f3e6dff | 104 | @namespace Directionname |
el14d2g | 0:49a79f3e6dff | 105 | */ |
el14d2g | 0:49a79f3e6dff | 106 | enum DirectionName { |
el14d2g | 0:49a79f3e6dff | 107 | UP, |
el14d2g | 0:49a79f3e6dff | 108 | DOWN, |
el14d2g | 0:49a79f3e6dff | 109 | LEFT, |
el14d2g | 0:49a79f3e6dff | 110 | RIGHT, |
el14d2g | 0:49a79f3e6dff | 111 | CENTRE, |
el14d2g | 0:49a79f3e6dff | 112 | UNKNOWN |
el14d2g | 0:49a79f3e6dff | 113 | }; |
el14d2g | 0:49a79f3e6dff | 114 | |
el14d2g | 0:49a79f3e6dff | 115 | /** |
el14d2g | 0:49a79f3e6dff | 116 | @namespace snakeDirection |
el14d2g | 0:49a79f3e6dff | 117 | */ |
el14d2g | 0:49a79f3e6dff | 118 | enum snakeDirection { |
el14d2g | 0:49a79f3e6dff | 119 | up, |
el14d2g | 0:49a79f3e6dff | 120 | down, |
el14d2g | 0:49a79f3e6dff | 121 | left, |
el14d2g | 0:49a79f3e6dff | 122 | right, |
el14d2g | 0:49a79f3e6dff | 123 | }; |
el14d2g | 0:49a79f3e6dff | 124 | |
el14d2g | 0:49a79f3e6dff | 125 | /** |
el14d2g | 0:49a79f3e6dff | 126 | @namespace joystick |
el14d2g | 0:49a79f3e6dff | 127 | @brief creates strcut for joystick |
el14d2g | 0:49a79f3e6dff | 128 | */ |
el14d2g | 0:49a79f3e6dff | 129 | typedef struct JoyStick Joystick; |
el14d2g | 0:49a79f3e6dff | 130 | struct JoyStick { |
el14d2g | 0:49a79f3e6dff | 131 | float x; // current x value |
el14d2g | 0:49a79f3e6dff | 132 | float x0; // 'centred' x value |
el14d2g | 0:49a79f3e6dff | 133 | float y; // current y value |
el14d2g | 0:49a79f3e6dff | 134 | float y0; // 'centred' y value |
el14d2g | 0:49a79f3e6dff | 135 | int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
el14d2g | 0:49a79f3e6dff | 136 | DirectionName direction; // current direction |
el14d2g | 0:49a79f3e6dff | 137 | }; |
el14d2g | 0:49a79f3e6dff | 138 | // create struct variable |
el14d2g | 0:49a79f3e6dff | 139 | Joystick joystick; |
el14d2g | 0:49a79f3e6dff | 140 | |
el14d2g | 0:49a79f3e6dff | 141 | int printFlag = 0; |
el14d2g | 0:49a79f3e6dff | 142 | |
el14d2g | 0:49a79f3e6dff | 143 | /** game functions |
el14d2g | 0:49a79f3e6dff | 144 | */ |
el14d2g | 0:49a79f3e6dff | 145 | |
el14d2g | 0:49a79f3e6dff | 146 | |
el14d2g | 0:49a79f3e6dff | 147 | /** menu function contains all of the game logic to be called in the main |
el14d2g | 0:49a79f3e6dff | 148 | */ |
el14d2g | 0:49a79f3e6dff | 149 | void menu(); |
el14d2g | 0:49a79f3e6dff | 150 | /** reads joysticks x and y pots |
el14d2g | 0:49a79f3e6dff | 151 | */ |
el14d2g | 0:49a79f3e6dff | 152 | void calibrateJoystick(); |
el14d2g | 0:49a79f3e6dff | 153 | |
el14d2g | 0:49a79f3e6dff | 154 | /** lets the joystick know which way its being pressed |
el14d2g | 0:49a79f3e6dff | 155 | */ |
el14d2g | 0:49a79f3e6dff | 156 | |
el14d2g | 0:49a79f3e6dff | 157 | void updateJoystick(); |
el14d2g | 0:49a79f3e6dff | 158 | |
el14d2g | 0:49a79f3e6dff | 159 | /** joystick lets snake know which way to go |
el14d2g | 0:49a79f3e6dff | 160 | */ |
el14d2g | 0:49a79f3e6dff | 161 | |
el14d2g | 0:49a79f3e6dff | 162 | void checkDirection(); |
el14d2g | 0:49a79f3e6dff | 163 | |
el14d2g | 0:49a79f3e6dff | 164 | /** initialises game settings |
el14d2g | 0:49a79f3e6dff | 165 | */ |
el14d2g | 0:49a79f3e6dff | 166 | void gameSetup(); |
el14d2g | 0:49a79f3e6dff | 167 | |
el14d2g | 0:49a79f3e6dff | 168 | |
el14d2g | 0:49a79f3e6dff | 169 | /** determines the snakes direction of travel |
el14d2g | 0:49a79f3e6dff | 170 | */ |
el14d2g | 0:49a79f3e6dff | 171 | void nextMoveSnake(); |
el14d2g | 0:49a79f3e6dff | 172 | |
el14d2g | 0:49a79f3e6dff | 173 | /** displays snake in next position |
el14d2g | 0:49a79f3e6dff | 174 | */ |
el14d2g | 0:49a79f3e6dff | 175 | |
el14d2g | 0:49a79f3e6dff | 176 | void printFood(); |
el14d2g | 0:49a79f3e6dff | 177 | |
el14d2g | 0:49a79f3e6dff | 178 | /** check if the snake has ate the food, then produced next snack |
el14d2g | 0:49a79f3e6dff | 179 | */ |
el14d2g | 0:49a79f3e6dff | 180 | void generateFood(); |
el14d2g | 0:49a79f3e6dff | 181 | |
el14d2g | 0:49a79f3e6dff | 182 | /** initialises the rules for and logic for classic snake mode |
el14d2g | 0:49a79f3e6dff | 183 | */ |
el14d2g | 0:49a79f3e6dff | 184 | void classic (); |
el14d2g | 0:49a79f3e6dff | 185 | |
el14d2g | 0:49a79f3e6dff | 186 | /** initialises the rules for and logic for classic snake two mode |
el14d2g | 0:49a79f3e6dff | 187 | */ |
el14d2g | 0:49a79f3e6dff | 188 | void snake2(); |
el14d2g | 0:49a79f3e6dff | 189 | |
el14d2g | 0:49a79f3e6dff | 190 | /** sets snake on game area |
el14d2g | 0:49a79f3e6dff | 191 | */ |
el14d2g | 0:49a79f3e6dff | 192 | |
el14d2g | 0:49a79f3e6dff | 193 | void newSnake(); |
el14d2g | 0:49a79f3e6dff | 194 | |
el14d2g | 0:49a79f3e6dff | 195 | /** called by ticker to set next screen |
el14d2g | 0:49a79f3e6dff | 196 | */ |
el14d2g | 0:49a79f3e6dff | 197 | |
el14d2g | 0:49a79f3e6dff | 198 | void timer_isr(); |
el14d2g | 0:49a79f3e6dff | 199 | |
el14d2g | 0:49a79f3e6dff | 200 | /** called by ticker to set snake in new position |
el14d2g | 0:49a79f3e6dff | 201 | */ |
el14d2g | 0:49a79f3e6dff | 202 | |
el14d2g | 0:49a79f3e6dff | 203 | void update_snake_isr(); |
el14d2g | 0:49a79f3e6dff | 204 | |
el14d2g | 0:49a79f3e6dff | 205 | /** set joystick direction to snake direction |
el14d2g | 0:49a79f3e6dff | 206 | */ |
el14d2g | 0:49a79f3e6dff | 207 | |
el14d2g | 0:49a79f3e6dff | 208 | void newDirection(); |
el14d2g | 0:49a79f3e6dff | 209 | |
el14d2g | 0:49a79f3e6dff | 210 | /** set hardwall for classic snake mode |
el14d2g | 0:49a79f3e6dff | 211 | */ |
el14d2g | 0:49a79f3e6dff | 212 | |
el14d2g | 0:49a79f3e6dff | 213 | void hardWall(); |
el14d2g | 0:49a79f3e6dff | 214 | |
el14d2g | 0:49a79f3e6dff | 215 | /** allows snake to go through to other other side in maze and snake 2 mode |
el14d2g | 0:49a79f3e6dff | 216 | */ |
el14d2g | 0:49a79f3e6dff | 217 | |
el14d2g | 0:49a79f3e6dff | 218 | void wrapAround(); |
el14d2g | 0:49a79f3e6dff | 219 | |
el14d2g | 0:49a79f3e6dff | 220 | /** function to make snake tail follow its head |
el14d2g | 0:49a79f3e6dff | 221 | */ |
el14d2g | 0:49a79f3e6dff | 222 | void snakeTail(); |
el14d2g | 0:49a79f3e6dff | 223 | |
el14d2g | 0:49a79f3e6dff | 224 | /** lets player know its game over if the snake has died |
el14d2g | 0:49a79f3e6dff | 225 | */ |
el14d2g | 0:49a79f3e6dff | 226 | |
el14d2g | 0:49a79f3e6dff | 227 | void game_over(); |
el14d2g | 0:49a79f3e6dff | 228 | /** |
el14d2g | 0:49a79f3e6dff | 229 | */ |
el14d2g | 0:49a79f3e6dff | 230 | |
el14d2g | 0:49a79f3e6dff | 231 | void gameTimer_ISR(); |
el14d2g | 0:49a79f3e6dff | 232 | |
el14d2g | 0:49a79f3e6dff | 233 | /** sets rules and logic for maze mode |
el14d2g | 0:49a79f3e6dff | 234 | */ |
el14d2g | 0:49a79f3e6dff | 235 | |
el14d2g | 0:49a79f3e6dff | 236 | void maze(); |
el14d2g | 0:49a79f3e6dff | 237 | |
el14d2g | 0:49a79f3e6dff | 238 | /** variable |
el14d2g | 0:49a79f3e6dff | 239 | */ |
el14d2g | 0:49a79f3e6dff | 240 | |
el14d2g | 0:49a79f3e6dff | 241 | int i; |
el14d2g | 0:49a79f3e6dff | 242 | |
el14d2g | 0:49a79f3e6dff | 243 | /** store direction of snake |
el14d2g | 0:49a79f3e6dff | 244 | */ |
el14d2g | 0:49a79f3e6dff | 245 | |
el14d2g | 0:49a79f3e6dff | 246 | int snakeDirection; |
el14d2g | 0:49a79f3e6dff | 247 | |
el14d2g | 0:49a79f3e6dff | 248 | /** array determining game areas x axis |
el14d2g | 0:49a79f3e6dff | 249 | */ |
el14d2g | 0:49a79f3e6dff | 250 | int width [84]; |
el14d2g | 0:49a79f3e6dff | 251 | |
el14d2g | 0:49a79f3e6dff | 252 | /** array determining game areas y axis |
el14d2g | 0:49a79f3e6dff | 253 | */ |
el14d2g | 0:49a79f3e6dff | 254 | int height [48]; |
el14d2g | 0:49a79f3e6dff | 255 | |
el14d2g | 0:49a79f3e6dff | 256 | /** snakes head on the x -axis |
el14d2g | 0:49a79f3e6dff | 257 | */ |
el14d2g | 0:49a79f3e6dff | 258 | |
el14d2g | 0:49a79f3e6dff | 259 | int sx = 48; |
el14d2g | 0:49a79f3e6dff | 260 | |
el14d2g | 0:49a79f3e6dff | 261 | /** snakes head on the y-axis |
el14d2g | 0:49a79f3e6dff | 262 | */ |
el14d2g | 0:49a79f3e6dff | 263 | |
el14d2g | 1:07a23e18507a | 264 | int sy = 24; //set snake at centre |
el14d2g | 0:49a79f3e6dff | 265 | |
el14d2g | 0:49a79f3e6dff | 266 | /** food on the x-axis |
el14d2g | 0:49a79f3e6dff | 267 | */ |
el14d2g | 0:49a79f3e6dff | 268 | |
el14d2g | 0:49a79f3e6dff | 269 | int fx; |
el14d2g | 0:49a79f3e6dff | 270 | |
el14d2g | 0:49a79f3e6dff | 271 | /** food on the y-axis |
el14d2g | 0:49a79f3e6dff | 272 | */ |
el14d2g | 0:49a79f3e6dff | 273 | |
el14d2g | 0:49a79f3e6dff | 274 | int fy; |
el14d2g | 0:49a79f3e6dff | 275 | |
el14d2g | 0:49a79f3e6dff | 276 | /** stores game score |
el14d2g | 0:49a79f3e6dff | 277 | */ |
el14d2g | 0:49a79f3e6dff | 278 | |
el14d2g | 0:49a79f3e6dff | 279 | int score = 0; |
el14d2g | 0:49a79f3e6dff | 280 | |
el14d2g | 0:49a79f3e6dff | 281 | /** stores snake length |
el14d2g | 0:49a79f3e6dff | 282 | */ |
el14d2g | 0:49a79f3e6dff | 283 | |
el14d2g | 0:49a79f3e6dff | 284 | int tailL = 0; |
el14d2g | 0:49a79f3e6dff | 285 | |
el14d2g | 0:49a79f3e6dff | 286 | /** array to store snake tail on x axis |
el14d2g | 0:49a79f3e6dff | 287 | */ |
el14d2g | 0:49a79f3e6dff | 288 | |
el14d2g | 0:49a79f3e6dff | 289 | int tailX [100]; |
el14d2g | 0:49a79f3e6dff | 290 | |
el14d2g | 0:49a79f3e6dff | 291 | /** array to store snake tail on the y axis |
el14d2g | 0:49a79f3e6dff | 292 | */ |
el14d2g | 0:49a79f3e6dff | 293 | |
el14d2g | 0:49a79f3e6dff | 294 | int tailY [100]; |
el14d2g | 0:49a79f3e6dff | 295 | |
el14d2g | 0:49a79f3e6dff | 296 | /** true when the game is running |
el14d2g | 0:49a79f3e6dff | 297 | */ |
el14d2g | 0:49a79f3e6dff | 298 | |
el14d2g | 0:49a79f3e6dff | 299 | bool gameOver = false; |
el14d2g | 0:49a79f3e6dff | 300 | |
el14d2g | 1:07a23e18507a | 301 | #endif |