Simple (basic) snake game

Dependencies:   N5110 mbed

Committer:
MsTee
Date:
Mon May 09 01:55:29 2016 +0000
Revision:
4:d1f0cf1ea11b
Parent:
3:79d3148204e1
Completed Doxygen Documentation;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MsTee 0:9eb93eff2469 1 /**
MsTee 0:9eb93eff2469 2 @file main.h
MsTee 0:9eb93eff2469 3 @brief Header file contains functions and variables
MsTee 0:9eb93eff2469 4 @brief Snake Game - Embedded Systems Project
MsTee 0:9eb93eff2469 5 @brief Revision 1.0
MsTee 0:9eb93eff2469 6 @author Thokozile Tembo
MsTee 0:9eb93eff2469 7 @Date 05/05/2016
MsTee 0:9eb93eff2469 8 */
MsTee 0:9eb93eff2469 9
MsTee 0:9eb93eff2469 10 #include "mbed.h"
MsTee 0:9eb93eff2469 11 #include "N5110.h"
MsTee 1:ab8ceac59e71 12 #define DIRECTION_TOLERANCE 0.01
MsTee 0:9eb93eff2469 13
MsTee 4:d1f0cf1ea11b 14 //Objects/Pin activation
MsTee 4:d1f0cf1ea11b 15 /**
MsTee 4:d1f0cf1ea11b 16 @namespace lcd
MsTee 4:d1f0cf1ea11b 17 @brief Creates N5110 object to allow interaction with lcd
MsTee 4:d1f0cf1ea11b 18 */
MsTee 0:9eb93eff2469 19 N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
MsTee 4:d1f0cf1ea11b 20
MsTee 4:d1f0cf1ea11b 21 /**
MsTee 4:d1f0cf1ea11b 22 @namespace Serial
MsTee 4:d1f0cf1ea11b 23 @brief Creates Serial Communication with PC
MsTee 4:d1f0cf1ea11b 24 */
MsTee 0:9eb93eff2469 25 Serial pc(USBTX, USBRX);
MsTee 4:d1f0cf1ea11b 26
MsTee 4:d1f0cf1ea11b 27
MsTee 4:d1f0cf1ea11b 28 /**
MsTee 4:d1f0cf1ea11b 29 @namespace AnalogueIn
MsTee 4:d1f0cf1ea11b 30 @brief Creates connection with Joystick & potentiometer
MsTee 4:d1f0cf1ea11b 31 */
MsTee 4:d1f0cf1ea11b 32 AnalogIn joy_x(PTB2); // joysitc x directions potentiometer
MsTee 4:d1f0cf1ea11b 33 AnalogIn joy_y(PTB3); // joystick y directions potentiometer
MsTee 4:d1f0cf1ea11b 34 AnalogIn pot(PTB10); // brightness adjusting potentiometer
MsTee 4:d1f0cf1ea11b 35
MsTee 4:d1f0cf1ea11b 36 /**
MsTee 4:d1f0cf1ea11b 37 @namespace Buttons
MsTee 4:d1f0cf1ea11b 38 @brief Digital Inputs for joy button and pcb button
MsTee 4:d1f0cf1ea11b 39 */
MsTee 4:d1f0cf1ea11b 40
MsTee 0:9eb93eff2469 41 DigitalIn joy_button(PTB11); // needs pull-down (active high)
MsTee 0:9eb93eff2469 42 InterruptIn pcb_button(PTB18); // needs pull-down (active high)
MsTee 0:9eb93eff2469 43 // PWM Output (LED and Buzzer)
MsTee 4:d1f0cf1ea11b 44 PwmOut pcb_led(PTC2); // Green LED
MsTee 4:d1f0cf1ea11b 45 PwmOut pcb_buzzer(PTA2); // sound speaker
MsTee 0:9eb93eff2469 46
MsTee 4:d1f0cf1ea11b 47 /**
MsTee 4:d1f0cf1ea11b 48 @namespace Ticker
MsTee 4:d1f0cf1ea11b 49 @brief Creates ticker update for joystick& potentiometer adjustment
MsTee 4:d1f0cf1ea11b 50 */
MsTee 4:d1f0cf1ea11b 51 Ticker joystick_update_ticker; // read values of joystick
MsTee 4:d1f0cf1ea11b 52 Ticker brightness_update_ticker; // read values of potentiometer
MsTee 0:9eb93eff2469 53
MsTee 4:d1f0cf1ea11b 54 /**
MsTee 4:d1f0cf1ea11b 55 Initialises the K64F display and presents the welcome screen
MsTee 4:d1f0cf1ea11b 56 @returns void
MsTee 4:d1f0cf1ea11b 57 */
MsTee 0:9eb93eff2469 58 void init_K64F();
MsTee 4:d1f0cf1ea11b 59
MsTee 4:d1f0cf1ea11b 60 void welcomeScreen(); /*!< Welcome screen*/
MsTee 4:d1f0cf1ea11b 61
MsTee 4:d1f0cf1ea11b 62
MsTee 0:9eb93eff2469 63
MsTee 4:d1f0cf1ea11b 64
MsTee 4:d1f0cf1ea11b 65 /** Defining possible joystick directions (enum)
MsTee 4:d1f0cf1ea11b 66 @returns void
MsTee 4:d1f0cf1ea11b 67 */
MsTee 0:9eb93eff2469 68 enum DirectionName {
MsTee 0:9eb93eff2469 69 UP,
MsTee 0:9eb93eff2469 70 DOWN,
MsTee 0:9eb93eff2469 71 LEFT,
MsTee 0:9eb93eff2469 72 RIGHT,
MsTee 0:9eb93eff2469 73 CENTRE,
MsTee 0:9eb93eff2469 74 UNKNOWN
MsTee 0:9eb93eff2469 75 };
MsTee 0:9eb93eff2469 76
MsTee 4:d1f0cf1ea11b 77 /** struct for Joystick, containing x,y values, button status, direction and centered values
MsTee 4:d1f0cf1ea11b 78 @returns void
MsTee 4:d1f0cf1ea11b 79 */
MsTee 0:9eb93eff2469 80 struct JoyStick {
MsTee 0:9eb93eff2469 81 double x; /// current x value
MsTee 0:9eb93eff2469 82 double x0; /// 'centred' x value
MsTee 0:9eb93eff2469 83 double y; /// current y value
MsTee 0:9eb93eff2469 84 double y0; /// 'centred' y value
MsTee 0:9eb93eff2469 85 int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
MsTee 0:9eb93eff2469 86 DirectionName direction; // current direction
MsTee 0:9eb93eff2469 87 } joystick;
MsTee 0:9eb93eff2469 88
MsTee 4:d1f0cf1ea11b 89 /** struct for Apple, containing x,y values
MsTee 4:d1f0cf1ea11b 90 @returns void*/
MsTee 4:d1f0cf1ea11b 91
MsTee 0:9eb93eff2469 92 struct AppleType {
MsTee 0:9eb93eff2469 93 int x; // Apple X
MsTee 0:9eb93eff2469 94 int y; // Apple Y
MsTee 0:9eb93eff2469 95 };
MsTee 0:9eb93eff2469 96
MsTee 4:d1f0cf1ea11b 97 /** Defining possible states of the game (enum)
MsTee 4:d1f0cf1ea11b 98 @returns void*/
MsTee 4:d1f0cf1ea11b 99
MsTee 3:79d3148204e1 100 enum GAME_STATES {
MsTee 3:79d3148204e1 101 INIT, // 0
MsTee 3:79d3148204e1 102 WAIT_FOR_USER, // 1
MsTee 3:79d3148204e1 103 PLAY, // 2
MsTee 3:79d3148204e1 104 GAME_OVER // 3
MsTee 3:79d3148204e1 105 };
MsTee 0:9eb93eff2469 106
MsTee 0:9eb93eff2469 107 GAME_STATES game_state = INIT; // Default state of the game
MsTee 0:9eb93eff2469 108
MsTee 4:d1f0cf1ea11b 109
MsTee 4:d1f0cf1ea11b 110 volatile int g_pcb_button_flag = 0; /*!<Global variables*/
MsTee 4:d1f0cf1ea11b 111
MsTee 4:d1f0cf1ea11b 112
MsTee 4:d1f0cf1ea11b 113 /** Function prototypes @returns void*/
MsTee 0:9eb93eff2469 114
MsTee 4:d1f0cf1ea11b 115 void calibrateJoystick(); /*!< initial positions in the range 0.0 to 1.0*/
MsTee 4:d1f0cf1ea11b 116 void updateJoystick();/*!< read current joystick values relative to calibrated values*/
MsTee 4:d1f0cf1ea11b 117 void updateBrightness(); /*!< updates brightness of screen based on potentiometer reading*/
MsTee 4:d1f0cf1ea11b 118 void snakeGame(); /*!< executres full functionality of game */
MsTee 0:9eb93eff2469 119
MsTee 4:d1f0cf1ea11b 120 /**These functions are used to map game
MsTee 4:d1f0cf1ea11b 121 @returns void*/
MsTee 0:9eb93eff2469 122
MsTee 4:d1f0cf1ea11b 123 void drawBlock(int field_x, int field_y); /*!< Enable square (4x4 pixels) at x, y */
MsTee 4:d1f0cf1ea11b 124
MsTee 4:d1f0cf1ea11b 125 void drawApple(int field_x, int field_y);/*!< Draw Apple (4x4 pixels) at x, y*/
MsTee 4:d1f0cf1ea11b 126
MsTee 4:d1f0cf1ea11b 127 void eraseBlock(int field_x, int field_y); /*!< Disable square (4x4 pixels) at x, y*/
MsTee 4:d1f0cf1ea11b 128
MsTee 4:d1f0cf1ea11b 129
MsTee 4:d1f0cf1ea11b 130 int getBlock(int field_x, int field_y); /*!<Get the status of the square (4x4 pixels) at x, y*/
MsTee 4:d1f0cf1ea11b 131
MsTee 4:d1f0cf1ea11b 132 AppleType placeRandomApple(); /*!< Place an apple at random location (returns food structure)*/
MsTee 4:d1f0cf1ea11b 133
MsTee 4:d1f0cf1ea11b 134 void pcb_button_isr(); /*!< pcb_button interrupt function*/
MsTee 4:d1f0cf1ea11b 135
MsTee 4:d1f0cf1ea11b 136
MsTee 4:d1f0cf1ea11b 137 void blinkLEDandBuzz();/*!< This function make LED blink and buzzer make a sound*/