ELEC2645 (2015/16)
/
fy13tmtProject
Simple (basic) snake game
main.h@0:9eb93eff2469, 2016-05-08 (annotated)
- Committer:
- MsTee
- Date:
- Sun May 08 20:10:54 2016 +0000
- Revision:
- 0:9eb93eff2469
- Child:
- 1:ab8ceac59e71
Added game over screen
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:9eb93eff2469 | 12 | #define DIRECTION_TOLERANCE 0.05 |
MsTee | 0:9eb93eff2469 | 13 | |
MsTee | 0:9eb93eff2469 | 14 | // LCD Object |
MsTee | 0:9eb93eff2469 | 15 | N5110 lcd(PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); |
MsTee | 0:9eb93eff2469 | 16 | // Serial Communication with PC |
MsTee | 0:9eb93eff2469 | 17 | Serial pc(USBTX, USBRX); |
MsTee | 0:9eb93eff2469 | 18 | // Analog inputs |
MsTee | 0:9eb93eff2469 | 19 | AnalogIn joy_x(PTB2); |
MsTee | 0:9eb93eff2469 | 20 | AnalogIn joy_y(PTB3); |
MsTee | 0:9eb93eff2469 | 21 | AnalogIn pot(PTB10); |
MsTee | 0:9eb93eff2469 | 22 | // Buttons |
MsTee | 0:9eb93eff2469 | 23 | DigitalIn joy_button(PTB11); // needs pull-down (active high) |
MsTee | 0:9eb93eff2469 | 24 | InterruptIn pcb_button(PTB18); // needs pull-down (active high) |
MsTee | 0:9eb93eff2469 | 25 | // PWM Output (LED and Buzzer) |
MsTee | 0:9eb93eff2469 | 26 | PwmOut pcb_led(PTC2); // |
MsTee | 0:9eb93eff2469 | 27 | PwmOut pcn_buzzer(PTA2); |
MsTee | 0:9eb93eff2469 | 28 | |
MsTee | 0:9eb93eff2469 | 29 | // Ticker for joystick update |
MsTee | 0:9eb93eff2469 | 30 | Ticker joystick_update_ticker; |
MsTee | 0:9eb93eff2469 | 31 | |
MsTee | 0:9eb93eff2469 | 32 | // Initialising board board |
MsTee | 0:9eb93eff2469 | 33 | void init_K64F(); |
MsTee | 0:9eb93eff2469 | 34 | // Welcome screen |
MsTee | 0:9eb93eff2469 | 35 | void welcomeScreen(); |
MsTee | 0:9eb93eff2469 | 36 | |
MsTee | 0:9eb93eff2469 | 37 | // Defining possible joystick directions (enum) |
MsTee | 0:9eb93eff2469 | 38 | enum DirectionName { |
MsTee | 0:9eb93eff2469 | 39 | UP, |
MsTee | 0:9eb93eff2469 | 40 | DOWN, |
MsTee | 0:9eb93eff2469 | 41 | LEFT, |
MsTee | 0:9eb93eff2469 | 42 | RIGHT, |
MsTee | 0:9eb93eff2469 | 43 | CENTRE, |
MsTee | 0:9eb93eff2469 | 44 | UNKNOWN |
MsTee | 0:9eb93eff2469 | 45 | }; |
MsTee | 0:9eb93eff2469 | 46 | // Variable to store previous direction of the joystick |
MsTee | 0:9eb93eff2469 | 47 | DirectionName prevDirection = UNKNOWN; |
MsTee | 0:9eb93eff2469 | 48 | |
MsTee | 0:9eb93eff2469 | 49 | // Joystick type definition |
MsTee | 0:9eb93eff2469 | 50 | struct JoyStick { |
MsTee | 0:9eb93eff2469 | 51 | double x; /// current x value |
MsTee | 0:9eb93eff2469 | 52 | double x0; /// 'centred' x value |
MsTee | 0:9eb93eff2469 | 53 | double y; /// current y value |
MsTee | 0:9eb93eff2469 | 54 | double y0; /// 'centred' y value |
MsTee | 0:9eb93eff2469 | 55 | int button; /// button state (assume pull-down used, so 1 = pressed, 0 = unpressed) |
MsTee | 0:9eb93eff2469 | 56 | DirectionName direction; // current direction |
MsTee | 0:9eb93eff2469 | 57 | } joystick; |
MsTee | 0:9eb93eff2469 | 58 | |
MsTee | 0:9eb93eff2469 | 59 | // Apple type definition |
MsTee | 0:9eb93eff2469 | 60 | struct AppleType { |
MsTee | 0:9eb93eff2469 | 61 | int x; // Apple X |
MsTee | 0:9eb93eff2469 | 62 | int y; // Apple Y |
MsTee | 0:9eb93eff2469 | 63 | }; |
MsTee | 0:9eb93eff2469 | 64 | |
MsTee | 0:9eb93eff2469 | 65 | // Defining possible states (enum) |
MsTee | 0:9eb93eff2469 | 66 | typedef enum { |
MsTee | 0:9eb93eff2469 | 67 | INIT, |
MsTee | 0:9eb93eff2469 | 68 | WAIT_FOR_USER, |
MsTee | 0:9eb93eff2469 | 69 | PLAY, |
MsTee | 0:9eb93eff2469 | 70 | GAME_OVER |
MsTee | 0:9eb93eff2469 | 71 | } GAME_STATES; //States used in the main loop |
MsTee | 0:9eb93eff2469 | 72 | |
MsTee | 0:9eb93eff2469 | 73 | GAME_STATES game_state = INIT; // Default state of the game |
MsTee | 0:9eb93eff2469 | 74 | |
MsTee | 0:9eb93eff2469 | 75 | // Global variables |
MsTee | 0:9eb93eff2469 | 76 | volatile int g_pcb_button_flag = 0; |
MsTee | 0:9eb93eff2469 | 77 | |
MsTee | 0:9eb93eff2469 | 78 | // Function prototypes |
MsTee | 0:9eb93eff2469 | 79 | void calibrateJoystick(); |
MsTee | 0:9eb93eff2469 | 80 | void updateJoystick(); |
MsTee | 0:9eb93eff2469 | 81 | void snake_game(); |
MsTee | 0:9eb93eff2469 | 82 | |
MsTee | 0:9eb93eff2469 | 83 | // These functions are used to map game |
MsTee | 0:9eb93eff2469 | 84 | // field of 20x11 to the LCD screen which is 84x48 |
MsTee | 0:9eb93eff2469 | 85 | |
MsTee | 0:9eb93eff2469 | 86 | // Enable square (4x4 pixels) at x, y |
MsTee | 0:9eb93eff2469 | 87 | void drawBlock(int field_x, int field_y); |
MsTee | 0:9eb93eff2469 | 88 | // Draw Apple (4x4 pixels) at x, y |
MsTee | 0:9eb93eff2469 | 89 | void drawApple(int field_x, int field_y); |
MsTee | 0:9eb93eff2469 | 90 | // Disable square (4x4 pixels) at x, y |
MsTee | 0:9eb93eff2469 | 91 | void eraseBlock(int field_x, int field_y); |
MsTee | 0:9eb93eff2469 | 92 | // Get the status of the square (4x4 pixels) at x, y |
MsTee | 0:9eb93eff2469 | 93 | int getBlock(int field_x, int field_y); |
MsTee | 0:9eb93eff2469 | 94 | // Place an apple at random location (returns food structure) |
MsTee | 0:9eb93eff2469 | 95 | AppleType placeRandomApple(); |
MsTee | 0:9eb93eff2469 | 96 | // pcb_button interrupt function |
MsTee | 0:9eb93eff2469 | 97 | void pcb_button_isr(); |