Simple (basic) snake game

Dependencies:   N5110 mbed

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?

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 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();