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 21:22:20 2020 +0000
Revision:
16:fca1bbb06c44
Parent:
15:68114eae4053
Child:
17:70d45e9e44a8
blocks stack

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 15:68114eae4053 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 15:68114eae4053 32 // variables //
el18rs 15:68114eae4053 33
el18rs 15:68114eae4053 34 volatile extern int iH;
el18rs 15:68114eae4053 35 //volatile extern int floor_hit_flag;
el18rs 15:68114eae4053 36 //volatile extern int X[50];
el18rs 15:68114eae4053 37 //volatile extern int Y[50];
el18rs 15:68114eae4053 38 //volatile extern int a;
el18rs 15:68114eae4053 39 //volatile extern int b;
el18rs 3:522c6f850e91 40
el18rs 4:7ddd287a5d28 41 // OBJECTS //
el18rs 4:7ddd287a5d28 42
el18rs 3:522c6f850e91 43 N5110 lcd;
el18rs 3:522c6f850e91 44 Gamepad pad;
el18rs 3:522c6f850e91 45 TetrisGame tetris;
el18rs 3:522c6f850e91 46
el18rs 15:68114eae4053 47 // PROTOTBPES //
el18rs 4:7ddd287a5d28 48
el18rs 3:522c6f850e91 49 void init();
el18rs 3:522c6f850e91 50 void update_game(UserInput input);
el18rs 3:522c6f850e91 51 void render();
el18rs 3:522c6f850e91 52 void welcome();
el18rs 15:68114eae4053 53 void fallenblocks(N5110 &lcd, int iH);
el18rs 15:68114eae4053 54 void set_values();
eencae 0:b7f1f47bb26a 55
el18rs 15:68114eae4053 56 // FUNCTIONS //
el18rs 2:55092965eadd 57
el18rs 3:522c6f850e91 58 int main()
el18rs 2:55092965eadd 59 {
el18rs 15:68114eae4053 60 int fps = 6; // 6 frames per second
el18rs 15:68114eae4053 61
el18rs 4:7ddd287a5d28 62 init(); // initialise and display welcome screen
el18rs 4:7ddd287a5d28 63 welcome(); // wait for user to press start
el18rs 15:68114eae4053 64
el18rs 15:68114eae4053 65 render(); // draw initial frame
el18rs 15:68114eae4053 66 wait(1.0f/fps); // wait one frame period
el18rs 4:7ddd287a5d28 67
el18rs 15:68114eae4053 68 set_values();
el18rs 15:68114eae4053 69
el18rs 4:7ddd287a5d28 70 // game loop
el18rs 3:522c6f850e91 71 while(1) {
el18rs 15:68114eae4053 72 tetris.read_input(pad); // read input
el18rs 6:39cbec524483 73 tetris.update(pad, lcd);
el18rs 15:68114eae4053 74 lcd.refresh();
el18rs 15:68114eae4053 75 lcd.clear();
el18rs 15:68114eae4053 76 tetris.fallenblocks(lcd, iH);
el18rs 15:68114eae4053 77 tetris.draw(lcd); // re-draw
el18rs 15:68114eae4053 78 if (tetris.floor_hit_flag==1) {
el18rs 16:fca1bbb06c44 79 // tetris.fallenblocks(lcd, iH);
el18rs 15:68114eae4053 80 iH++;
el18rs 15:68114eae4053 81 tetris.X[iH] = tetris.a;
el18rs 15:68114eae4053 82 tetris.Y[iH] = tetris.b;
el18rs 15:68114eae4053 83 tetris.floor_hit_flag = 0;
el18rs 15:68114eae4053 84 printf("iH increased\n");
el18rs 15:68114eae4053 85 }
el18rs 15:68114eae4053 86 wait(1.0f/fps); // wait one frame period
el18rs 15:68114eae4053 87 }
el18rs 4:7ddd287a5d28 88 }
el18rs 3:522c6f850e91 89
el18rs 4:7ddd287a5d28 90
el18rs 4:7ddd287a5d28 91 // initialise classes and libraries
el18rs 15:68114eae4053 92 void init()
el18rs 15:68114eae4053 93 {
el18rs 15:68114eae4053 94 lcd.init(); // initialise lcd
el18rs 4:7ddd287a5d28 95 pad.init(); // initialise Gamepad
el18rs 15:68114eae4053 96
el18rs 4:7ddd287a5d28 97 // initialise the game with correct tetromino sizes etc
el18rs 11:0183a52c1077 98 tetris.init(SPEED);
el18rs 15:68114eae4053 99
el18rs 2:55092965eadd 100 }
el18rs 2:55092965eadd 101
el18rs 15:68114eae4053 102 void set_values()
el18rs 15:68114eae4053 103 {
el18rs 15:68114eae4053 104 for(int i=0; i<=50; i++) {
el18rs 15:68114eae4053 105 tetris.X[i]=0;
el18rs 15:68114eae4053 106 tetris.Y[i]=0;
el18rs 15:68114eae4053 107 }
el18rs 15:68114eae4053 108 }
el18rs 15:68114eae4053 109
el18rs 15:68114eae4053 110 void render() // draws each frame on the lcd
el18rs 15:68114eae4053 111 {
el18rs 4:7ddd287a5d28 112
el18rs 4:7ddd287a5d28 113 lcd.clear(); // clear screen
el18rs 15:68114eae4053 114 tetris.draw(lcd); // re-draw
el18rs 4:7ddd287a5d28 115 lcd.refresh(); // refresh screen
el18rs 15:68114eae4053 116
eencae 0:b7f1f47bb26a 117 }
eencae 0:b7f1f47bb26a 118
el18rs 4:7ddd287a5d28 119 // welcome screen display
el18rs 15:68114eae4053 120 void welcome()
el18rs 15:68114eae4053 121 {
el18rs 15:68114eae4053 122
el18rs 7:80e1c83b9b6a 123 lcd.printString(" TETRIS ",0,1);
el18rs 7:80e1c83b9b6a 124 lcd.printString(" Press Start ",0,4);
el18rs 3:522c6f850e91 125 lcd.refresh();
el18rs 15:68114eae4053 126
el18rs 4:7ddd287a5d28 127 // flash LEDs untile start button pressed
el18rs 3:522c6f850e91 128 while (pad.start_pressed() == false) {
el18rs 3:522c6f850e91 129 lcd.setContrast(pad.read_pot1());
el18rs 3:522c6f850e91 130 pad.leds_on();
el18rs 3:522c6f850e91 131 wait(0.1);
el18rs 3:522c6f850e91 132 pad.leds_off();
el18rs 3:522c6f850e91 133 wait(0.1);
el18rs 3:522c6f850e91 134 }
el18rs 4:7ddd287a5d28 135 }