meurig phillips snake game - accidentally published to my account instead of to the group!

Dependencies:   Joystick N5110 SDFileSystem beep fsmMenu mbed

Fork of SnakeProjectRev1 by Meurig Phillips

Committer:
meurigp
Date:
Thu May 05 14:55:29 2016 +0000
Revision:
22:195d66c61bf3
Parent:
21:e03461ea23e9
final code submission;

Who changed what in which revision?

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