Game doesn't work properly, but it's a 'form' of Tetris.

Dependencies:   N5110 mbed

main.h

Committer:
el14kb
Date:
2016-05-07
Revision:
2:dc75e15229ee

File content as of revision 2:dc75e15229ee:

/**

@file main.h

@Header file to denote the various functions, global variables, and definitions.


@Author: Kristian Bridges
@SID:200859491

@brief: University of Leeds Elec2645 (Embedded systems project)

@Date: May 2016

*/

#ifndef MAIN_H

#define MAIN_H

#include "mbed.h"

#include "Pieces.h"

#include "N5110.h"

// --------------- Peripherals - Input --------------

/**

@namespace joystick

@brief joystick that allows me to move in the x and y direction. Two potentiometers allow this functionality, as well as a button, which allows additional
functionality.

*/

AnalogIn potX(PTB2);
AnalogIn potY(PTB3);
DigitalIn joyButton(PTB11);

/**

@namespace Button A

@brief DigitalIn button that calls an interrupt to rotate the tetris piece anticlockwise.

*/

DigitalIn buttonA(PTB18);

/**

@namespace Button B

@brief DigitalIn button that calls an interrupt to rotate the tetris piece clockwise.

*/

DigitalIn buttonB(PTB19);

// -------------- Peripherals - Output --------------

/**

@namespace Nokia 5110 LCD

@brief 84*48 black and white pixel display.
@brief VCC, GND, SCE, RST, D/C, MOSI, SCLK, LED

*/

N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);

// -------------- Variables --------------

int g_bank_index  = 0; /*!<Index for the menu */
int g_bank_index_copy = 4; /*!<Backup index to ensure the menu doesn't continuously refresh the pixels on the screen */
volatile int g_joyFlag = 0; /*!<Interrupt for the joystick */
volatile int g_rotate_clock_flag = 0; /*!<Interrupt for the B button */
volatile int g_rotate_anticlock_flag = 0; /*!<Interrupt for the A button */
int currentState[45][40]; /*!<Array to store the current playfield state */
volatile int g_call_game_Flag = 0; /*!<Interrupt to call the game functions */
float timer = 1.0; /*!<Value for the game ticker */
int xP; /*!<Current x position */
int yP; /*!<Current y position */
int next_xP; /*!<Next x position */
int next_yP; /*!<Next y position */
int level; /*!<Stores the level */
int line_check; /*!<Checks whether 10 lines have been cleared */
int total_lines; /*!<Total lines cleared */
int current_shape; /*!<Current shape in play */
int piece_in_play; /*!<States whether there's a piece in play */
int orientation; /*!<Stores the orientation of the piece */
int score; /*!<Stores the score */
int game_over; /*!<States whether the game is over */
int orientation_copy; /*!<Keeps track of whether a rotation has occured */
int currentPiece[10][10]; /*!<Current piece in play */
float initial_x,initial_y; /*!<Initial x and y position of the joystick */ 
float current_x,current_y; /*!<Current x and y position of the joystick */
int button; /*!<State of the joystick button */
int buttonA; /*!<State of the anticlockwise button */
int buttonB; /*!<State of the clockwise button */

//  -------------- Functions --------------

/**

@namespace Menu

@brief Renders the menu based on the direction of the joystick.
@brief An index keeps track of which menu item is currently selected.
@brief Index also allows the appropriate function to be called.

*/
void menu();

/**

@namespace cal

@brief Calibrates the joystick, as well as the other input peripherals.

*/
void cal();

/**

@namespace joyUpdate

@brief Updates the direction of the joystick based on tolerances.

*/
void joyUpdate();

/**

@namespace game

@brief Carries out the necessary functions to render and update the game of tetris, although, the actual game doesn't work correctly.

*/
void game();

/**

@namespace options

@brief Allows the user to change the led brightness. More functions can be implemented if needed, such as options to change the parameter
@brief of the game.e

*/
void options();

/**

@namespace orientation

@brief Changes the orientation of the piece in play if either of the rotation interrupts are called.

*/
void orientation();

/**

@namspace draw_piece

@brief Checks the current piece array with the currentState array for any collisions at the next x,y-position. If a collision has been detected,
@brief the piece will be saved to the currentState array, and the next piece will be spawned.

@brief If a collision hasn't been detected, then the piece will be rendered onto the playfield.

*/
void draw_piece();

/**

@namespace array_checker

@brief Checks the currentState array for any elements that are 'on' throughout the top row.
@brief If there are any elements 'on', then the game finishes and returns back to the main menu.
@brief Some features are missing, such as the complete line checker, but the overall feature didn't work; this can be improved upon for a fully working
@brief game of tetris.

*/
void array_checker();

/**

@namespace piece_generator

@brief Generates the next tetris piece, as well as the initial piece orientation, and the initial x and y coordinates.
@brief Spawning of random shapes doesn't entirely work. Not sure whether it is the location of the seed, but further investigation into the issue is needed.

*/
void piece_generator();

/**

@namespace anticlockwise

@brief An ISR that sets a global variable to 1, and calls the piece to be rotated anticlockwise.

*/
void anticlockwise();

/**

@namespace clockwise

@brief An ISR that sets a global variable to 1, and calls the piece to be rotated clockwise.

*/
void clockwise();

/**

@namespace gameCheck_isr

@brief An ISR that sets a global variable to 1, and calls several functions from within the game function.

*/
void gameCheck_isr();



#endif