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