All there but errors need fixing

Dependencies:   mbed

Overview:

Rookie Tetris is a jigsaw style game based on the classic Tetris.

A block will appear at the top of the screen, you must move it (your options for movement are left, right and down - you cannot move up the board). The block will stop when it if placed either on the floor of the board or on-top of another block.

Your goal is to fill a complete row of the board with the blocks; when you do so the row will delete and the pattern above it will drop down. The game is over when your pattern is tall enough to reach to the top of the board!

Controls:

Use the joystick to move your block! Your block cannot move out of the parameters of the board.

Pot 2 controls the contrast of the screen.

Committer:
el18rs
Date:
Tue Jun 02 18:38:09 2020 +0000
Revision:
14:bd8c59a4b641
Parent:
13:600a34a047ca
Child:
15:68114eae4053
compiles

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el18rs 2:55092965eadd 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
el18rs 1:35dba0833c7d 7 Name: Ruby Smith
el18rs 1:35dba0833c7d 8 Username: el18rs
el18rs 1:35dba0833c7d 9 Student ID Number: 201259470
el18rs 1:35dba0833c7d 10 Date: 22/05/20
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
eencae 0:b7f1f47bb26a 13 // includes
eencae 0:b7f1f47bb26a 14 #include "mbed.h"
eencae 0:b7f1f47bb26a 15 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 16 #include "N5110.h"
el18rs 3:522c6f850e91 17 #include "TetrisGame.h"
el18rs 3:522c6f850e91 18
el18rs 14:bd8c59a4b641 19 // set defaults
el18rs 3:522c6f850e91 20 #define TETROMINO_WIDTH 4
el18rs 3:522c6f850e91 21 #define TETROMINO_HEIGHT 4
el18rs 4:7ddd287a5d28 22 // #define TETROMINO_SIZE 4
el18rs 11:0183a52c1077 23 #define SPEED 1
el18rs 4:7ddd287a5d28 24 #define HEIGHT 48
el18rs 4:7ddd287a5d28 25 #define WIDTH 84
el18rs 4:7ddd287a5d28 26 // STRUCTS //
el18rs 3:522c6f850e91 27
el18rs 3:522c6f850e91 28 struct UserInput {
el18rs 3:522c6f850e91 29 Direction d;
el18rs 3:522c6f850e91 30 float mag;
el18rs 3:522c6f850e91 31 };
el18rs 3:522c6f850e91 32
el18rs 4:7ddd287a5d28 33 // OBJECTS //
el18rs 4:7ddd287a5d28 34
el18rs 3:522c6f850e91 35 N5110 lcd;
el18rs 3:522c6f850e91 36 Gamepad pad;
el18rs 3:522c6f850e91 37 TetrisGame tetris;
el18rs 3:522c6f850e91 38
el18rs 14:bd8c59a4b641 39 // VARIABLES //
el18rs 14:bd8c59a4b641 40
el18rs 14:bd8c59a4b641 41 volatile extern int iH;
el18rs 14:bd8c59a4b641 42 volatile extern int floor_hit_flag;
el18rs 14:bd8c59a4b641 43 volatile extern int a;
el18rs 14:bd8c59a4b641 44 volatile extern int b;
el18rs 14:bd8c59a4b641 45
el18rs 4:7ddd287a5d28 46 // PROTOTYPES //
el18rs 4:7ddd287a5d28 47
el18rs 3:522c6f850e91 48 void init();
el18rs 3:522c6f850e91 49 void update_game(UserInput input);
el18rs 3:522c6f850e91 50 void render();
el18rs 3:522c6f850e91 51 void welcome();
el18rs 14:bd8c59a4b641 52 int score = 0;
eencae 0:b7f1f47bb26a 53
el18rs 14:bd8c59a4b641 54 // int ScreenHeight = 84;
el18rs 14:bd8c59a4b641 55 // int ScreenWidth = 48;
el18rs 14:bd8c59a4b641 56
el18rs 14:bd8c59a4b641 57 // FUNCTIONS //
el18rs 2:55092965eadd 58
el18rs 3:522c6f850e91 59 int main()
el18rs 2:55092965eadd 60 {
el18rs 14:bd8c59a4b641 61 int fps = 6; // 6 frames per second
el18rs 14:bd8c59a4b641 62
el18rs 4:7ddd287a5d28 63 init(); // initialise and display welcome screen
el18rs 4:7ddd287a5d28 64 welcome(); // wait for user to press start
el18rs 4:7ddd287a5d28 65
el18rs 14:bd8c59a4b641 66 render(); // draw initial frame
el18rs 14:bd8c59a4b641 67 wait(1.0f/fps); // wait one frame period
el18rs 14:bd8c59a4b641 68
el18rs 4:7ddd287a5d28 69 // game loop
el18rs 3:522c6f850e91 70 while(1) {
el18rs 14:bd8c59a4b641 71 tetris.read_input(pad); // read input
el18rs 6:39cbec524483 72 tetris.update(pad, lcd);
el18rs 14:bd8c59a4b641 73 tetris.draw(lcd); // re-draw
el18rs 14:bd8c59a4b641 74 lcd.refresh(); // refresh screen
el18rs 14:bd8c59a4b641 75 wait(1.0f/fps); // wait one frame period
el18rs 14:bd8c59a4b641 76
el18rs 14:bd8c59a4b641 77 }
el18rs 4:7ddd287a5d28 78 }
el18rs 3:522c6f850e91 79
el18rs 4:7ddd287a5d28 80
el18rs 4:7ddd287a5d28 81 // initialise classes and libraries
el18rs 14:bd8c59a4b641 82 void init() {
el18rs 14:bd8c59a4b641 83 lcd.init(); // initialise lcd
el18rs 4:7ddd287a5d28 84 pad.init(); // initialise Gamepad
el18rs 14:bd8c59a4b641 85
el18rs 4:7ddd287a5d28 86 // initialise the game with correct tetromino sizes etc
el18rs 11:0183a52c1077 87 tetris.init(SPEED);
el18rs 14:bd8c59a4b641 88
el18rs 2:55092965eadd 89 }
el18rs 2:55092965eadd 90
el18rs 14:bd8c59a4b641 91 void render() { // draws each frame on the lcd
el18rs 4:7ddd287a5d28 92
el18rs 4:7ddd287a5d28 93 lcd.clear(); // clear screen
el18rs 14:bd8c59a4b641 94 tetris.draw(lcd); // re-draw
el18rs 4:7ddd287a5d28 95 lcd.refresh(); // refresh screen
el18rs 14:bd8c59a4b641 96
eencae 0:b7f1f47bb26a 97 }
eencae 0:b7f1f47bb26a 98
el18rs 4:7ddd287a5d28 99 // welcome screen display
el18rs 14:bd8c59a4b641 100 void welcome() {
el18rs 14:bd8c59a4b641 101
el18rs 7:80e1c83b9b6a 102 lcd.printString(" TETRIS ",0,1);
el18rs 7:80e1c83b9b6a 103 lcd.printString(" Press Start ",0,4);
el18rs 3:522c6f850e91 104 lcd.refresh();
el18rs 14:bd8c59a4b641 105
el18rs 4:7ddd287a5d28 106 // flash LEDs untile start button pressed
el18rs 3:522c6f850e91 107 while (pad.start_pressed() == false) {
el18rs 3:522c6f850e91 108 lcd.setContrast(pad.read_pot1());
el18rs 3:522c6f850e91 109 pad.leds_on();
el18rs 3:522c6f850e91 110 wait(0.1);
el18rs 3:522c6f850e91 111 pad.leds_off();
el18rs 3:522c6f850e91 112 wait(0.1);
el18rs 3:522c6f850e91 113 }
el18rs 4:7ddd287a5d28 114 }