submission

Dependencies:   N5110 mbed

Fork of fsmSnake by dean griffin

Committer:
el14d2g
Date:
Thu May 05 14:55:20 2016 +0000
Revision:
1:07a23e18507a
Parent:
0:49a79f3e6dff
submission;

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