submission

Dependencies:   N5110 mbed

Fork of fsmSnake by dean griffin

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?

UserRevisionLine numberNew 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