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 22:02:25 2020 +0000
Revision:
17:70d45e9e44a8
Parent:
16:fca1bbb06c44
Child:
22:403759d2f093
-

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 17:70d45e9e44a8 72 tetris.floor_hit_flag = 0;
el18rs 15:68114eae4053 73 tetris.read_input(pad); // read input
el18rs 6:39cbec524483 74 tetris.update(pad, lcd);
el18rs 15:68114eae4053 75 lcd.refresh();
el18rs 15:68114eae4053 76 lcd.clear();
el18rs 15:68114eae4053 77 tetris.fallenblocks(lcd, iH);
el18rs 15:68114eae4053 78 tetris.draw(lcd); // re-draw
el18rs 15:68114eae4053 79 if (tetris.floor_hit_flag==1) {
el18rs 16:fca1bbb06c44 80 // tetris.fallenblocks(lcd, iH);
el18rs 15:68114eae4053 81 iH++;
el18rs 15:68114eae4053 82 tetris.X[iH] = tetris.a;
el18rs 15:68114eae4053 83 tetris.Y[iH] = tetris.b;
el18rs 15:68114eae4053 84 tetris.floor_hit_flag = 0;
el18rs 15:68114eae4053 85 printf("iH increased\n");
el18rs 15:68114eae4053 86 }
el18rs 15:68114eae4053 87 wait(1.0f/fps); // wait one frame period
el18rs 15:68114eae4053 88 }
el18rs 4:7ddd287a5d28 89 }
el18rs 3:522c6f850e91 90
el18rs 4:7ddd287a5d28 91
el18rs 4:7ddd287a5d28 92 // initialise classes and libraries
el18rs 15:68114eae4053 93 void init()
el18rs 15:68114eae4053 94 {
el18rs 15:68114eae4053 95 lcd.init(); // initialise lcd
el18rs 4:7ddd287a5d28 96 pad.init(); // initialise Gamepad
el18rs 15:68114eae4053 97
el18rs 4:7ddd287a5d28 98 // initialise the game with correct tetromino sizes etc
el18rs 11:0183a52c1077 99 tetris.init(SPEED);
el18rs 15:68114eae4053 100
el18rs 2:55092965eadd 101 }
el18rs 2:55092965eadd 102
el18rs 15:68114eae4053 103 void set_values()
el18rs 15:68114eae4053 104 {
el18rs 15:68114eae4053 105 for(int i=0; i<=50; i++) {
el18rs 15:68114eae4053 106 tetris.X[i]=0;
el18rs 15:68114eae4053 107 tetris.Y[i]=0;
el18rs 15:68114eae4053 108 }
el18rs 15:68114eae4053 109 }
el18rs 15:68114eae4053 110
el18rs 15:68114eae4053 111 void render() // draws each frame on the lcd
el18rs 15:68114eae4053 112 {
el18rs 4:7ddd287a5d28 113
el18rs 4:7ddd287a5d28 114 lcd.clear(); // clear screen
el18rs 15:68114eae4053 115 tetris.draw(lcd); // re-draw
el18rs 4:7ddd287a5d28 116 lcd.refresh(); // refresh screen
el18rs 15:68114eae4053 117
eencae 0:b7f1f47bb26a 118 }
eencae 0:b7f1f47bb26a 119
el18rs 4:7ddd287a5d28 120 // welcome screen display
el18rs 15:68114eae4053 121 void welcome()
el18rs 15:68114eae4053 122 {
el18rs 15:68114eae4053 123
el18rs 7:80e1c83b9b6a 124 lcd.printString(" TETRIS ",0,1);
el18rs 7:80e1c83b9b6a 125 lcd.printString(" Press Start ",0,4);
el18rs 3:522c6f850e91 126 lcd.refresh();
el18rs 15:68114eae4053 127
el18rs 4:7ddd287a5d28 128 // flash LEDs untile start button pressed
el18rs 3:522c6f850e91 129 while (pad.start_pressed() == false) {
el18rs 3:522c6f850e91 130 lcd.setContrast(pad.read_pot1());
el18rs 3:522c6f850e91 131 pad.leds_on();
el18rs 3:522c6f850e91 132 wait(0.1);
el18rs 3:522c6f850e91 133 pad.leds_off();
el18rs 3:522c6f850e91 134 wait(0.1);
el18rs 3:522c6f850e91 135 }
el18rs 4:7ddd287a5d28 136 }