
Kaif Kutchwala 201267448 ELEC2645 Project
Dependencies: mbed
main.cpp@31:e1f80d181779, 2020-05-26 (annotated)
- Committer:
- KaifK
- Date:
- Tue May 26 15:50:46 2020 +0000
- Revision:
- 31:e1f80d181779
- Parent:
- 30:abe30c123470
Final Submission. I have read and agreed with Statement of Academic Integrity.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
KaifK | 0:e47aa16004e6 | 1 | /* |
KaifK | 28:215e8327d4e6 | 2 | ELEC2645 Embedded Systems Project |
KaifK | 28:215e8327d4e6 | 3 | School of Electronic & Electrical Engineering |
KaifK | 28:215e8327d4e6 | 4 | University of Leeds |
KaifK | 28:215e8327d4e6 | 5 | Name: Kaif Kutchwala |
KaifK | 28:215e8327d4e6 | 6 | Username: el18kk |
KaifK | 28:215e8327d4e6 | 7 | Student ID Number: 201267448 |
KaifK | 28:215e8327d4e6 | 8 | Date: May 2020 |
KaifK | 28:215e8327d4e6 | 9 | Game: Shoot! |
KaifK | 0:e47aa16004e6 | 10 | */ |
KaifK | 0:e47aa16004e6 | 11 | |
KaifK | 0:e47aa16004e6 | 12 | #include "mbed.h" |
KaifK | 0:e47aa16004e6 | 13 | #include "Gamepad.h" |
KaifK | 0:e47aa16004e6 | 14 | #include "N5110.h" |
KaifK | 3:f86c1cf90d0d | 15 | #include "Ball.h" |
KaifK | 3:f86c1cf90d0d | 16 | #include "Splash.h" |
KaifK | 4:08a0ff6668df | 17 | #include "Game.h" |
KaifK | 21:d5b1160f349f | 18 | #include "test.h" |
KaifK | 18:100e7d3509b5 | 19 | #include "Instructions.h" |
KaifK | 18:100e7d3509b5 | 20 | #include "Sprites.h" |
KaifK | 0:e47aa16004e6 | 21 | |
KaifK | 4:08a0ff6668df | 22 | //objects |
KaifK | 0:e47aa16004e6 | 23 | Gamepad pad; |
KaifK | 0:e47aa16004e6 | 24 | N5110 lcd; |
KaifK | 9:e6566d09f087 | 25 | Ball ball(lcd); |
KaifK | 9:e6566d09f087 | 26 | Splash splash(lcd, ball); |
KaifK | 9:e6566d09f087 | 27 | Game game(lcd, pad, ball); |
KaifK | 18:100e7d3509b5 | 28 | Instructions instruction(lcd, pad, ball, game); |
KaifK | 25:467d8fd0fec4 | 29 | |
KaifK | 5:ed71996c0534 | 30 | //functions |
KaifK | 16:1f196a0e12be | 31 | void init(); |
KaifK | 5:ed71996c0534 | 32 | void display_menu(); |
KaifK | 17:2fbe40177b9c | 33 | void game_loop(); |
KaifK | 16:1f196a0e12be | 34 | void how_to(); |
KaifK | 16:1f196a0e12be | 35 | void display_settings(); |
KaifK | 25:467d8fd0fec4 | 36 | |
KaifK | 4:08a0ff6668df | 37 | //variables |
KaifK | 18:100e7d3509b5 | 38 | int page = 1; |
KaifK | 2:21973e665a32 | 39 | |
KaifK | 18:100e7d3509b5 | 40 | int main() { |
KaifK | 16:1f196a0e12be | 41 | init(); |
KaifK | 18:100e7d3509b5 | 42 | while (1) { |
KaifK | 11:59119247dd68 | 43 | //ball.level_loop(); |
KaifK | 4:08a0ff6668df | 44 | display_menu(); |
KaifK | 28:215e8327d4e6 | 45 | page = 1; //reset instructions page |
KaifK | 4:08a0ff6668df | 46 | if (pad.A_pressed()) { |
KaifK | 28:215e8327d4e6 | 47 | game_loop(); //if A is pressed, play game |
KaifK | 18:100e7d3509b5 | 48 | } else if (pad.B_pressed()) { |
KaifK | 25:467d8fd0fec4 | 49 | wait(0.3); //debounce |
KaifK | 28:215e8327d4e6 | 50 | while (!pad.B_pressed()) { how_to(); } //if B, show instructions |
KaifK | 25:467d8fd0fec4 | 51 | wait(0.3); |
KaifK | 18:100e7d3509b5 | 52 | pad.reset_buttons(); |
KaifK | 28:215e8327d4e6 | 53 | pad.leds(0.0); |
KaifK | 18:100e7d3509b5 | 54 | } else if (pad.X_pressed()) { |
KaifK | 28:215e8327d4e6 | 55 | while (!pad.B_pressed()) { display_settings(); } // if C, settings |
KaifK | 25:467d8fd0fec4 | 56 | wait(0.3); |
KaifK | 21:d5b1160f349f | 57 | pad.reset_buttons(); |
KaifK | 28:215e8327d4e6 | 58 | } else if (pad.Y_pressed()) { // if Y, turn off lcd and leds |
KaifK | 6:09a555c0d997 | 59 | lcd.turnOff(); |
KaifK | 6:09a555c0d997 | 60 | pad.leds(0.0); |
KaifK | 6:09a555c0d997 | 61 | } |
KaifK | 4:08a0ff6668df | 62 | } |
KaifK | 4:08a0ff6668df | 63 | } |
KaifK | 28:215e8327d4e6 | 64 | void init() { //initialise all objects, display splash screen and intro |
KaifK | 21:d5b1160f349f | 65 | run_all_tests(); |
KaifK | 16:1f196a0e12be | 66 | lcd.init(); |
KaifK | 22:76bb0f52be8b | 67 | pad.init(); |
KaifK | 16:1f196a0e12be | 68 | lcd.setContrast(0.5); |
KaifK | 16:1f196a0e12be | 69 | lcd.backLightOn(); |
KaifK | 18:100e7d3509b5 | 70 | splash.displayInfo(); |
KaifK | 18:100e7d3509b5 | 71 | splash.playIntro(); |
KaifK | 22:76bb0f52be8b | 72 | game.init(); |
KaifK | 25:467d8fd0fec4 | 73 | } |
KaifK | 18:100e7d3509b5 | 74 | void display_menu() { |
KaifK | 9:e6566d09f087 | 75 | splash.drawLogo(13, 0); |
KaifK | 4:08a0ff6668df | 76 | lcd.printString("Play", 2, 2); |
KaifK | 4:08a0ff6668df | 77 | lcd.printString("How-To?", 2, 3); |
KaifK | 4:08a0ff6668df | 78 | lcd.printString("Settings", 2, 4); |
KaifK | 4:08a0ff6668df | 79 | lcd.printString("Exit", 2, 5); |
KaifK | 25:467d8fd0fec4 | 80 | lcd.drawSprite(28, 15, 9, 9, (int * ) a_button); |
KaifK | 25:467d8fd0fec4 | 81 | lcd.drawSprite(45, 23, 9, 9, (int * ) b_button); |
KaifK | 25:467d8fd0fec4 | 82 | lcd.drawSprite(52, 31, 9, 9, (int * ) x_button); |
KaifK | 25:467d8fd0fec4 | 83 | lcd.drawSprite(28, 39, 9, 9, (int * ) y_button); |
KaifK | 28:215e8327d4e6 | 84 | // displaying highscore |
KaifK | 25:467d8fd0fec4 | 85 | lcd.drawSprite(65, 21, 9, 15, (int * ) highscore_icon); |
KaifK | 16:1f196a0e12be | 86 | lcd.drawRect(65, 30, 15, 12, FILL_TRANSPARENT); |
KaifK | 16:1f196a0e12be | 87 | int highscore = game.get_highscore(); |
KaifK | 16:1f196a0e12be | 88 | char buffer[12]; |
KaifK | 25:467d8fd0fec4 | 89 | sprintf(buffer, "%d", highscore); |
KaifK | 25:467d8fd0fec4 | 90 | lcd.printString(buffer, 67, 4); |
KaifK | 15:5bf3f951d337 | 91 | lcd.refresh(); |
KaifK | 15:5bf3f951d337 | 92 | wait(0.1); |
KaifK | 16:1f196a0e12be | 93 | lcd.clear(); |
KaifK | 16:1f196a0e12be | 94 | } |
KaifK | 17:2fbe40177b9c | 95 | void game_loop() { |
KaifK | 29:532e5c371be4 | 96 | char buffer_score[14]; |
KaifK | 29:532e5c371be4 | 97 | char buffer_high_score[14]; |
KaifK | 28:215e8327d4e6 | 98 | game.init(); //initialise |
KaifK | 17:2fbe40177b9c | 99 | wait(0.2); //debounce |
KaifK | 28:215e8327d4e6 | 100 | game.play(); //play game |
KaifK | 31:e1f80d181779 | 101 | //////////////////// game has now ended ////////////////////////////////////// |
KaifK | 28:215e8327d4e6 | 102 | lcd.clear(); //clear screen once game is over and display apt message |
KaifK | 29:532e5c371be4 | 103 | // store player score and top score in buffer |
KaifK | 29:532e5c371be4 | 104 | sprintf(buffer_score, "Your Score: %d", game.get_score()); |
KaifK | 29:532e5c371be4 | 105 | sprintf(buffer_high_score, "Top Score: %d", game.get_highscore()); |
KaifK | 30:abe30c123470 | 106 | lcd.printString("GAME OVER", 15, 1); |
KaifK | 29:532e5c371be4 | 107 | lcd.printString(buffer_score,0,3); |
KaifK | 29:532e5c371be4 | 108 | lcd.printString(buffer_high_score,0,4); |
KaifK | 17:2fbe40177b9c | 109 | lcd.refresh(); |
KaifK | 28:215e8327d4e6 | 110 | game.playGoalSound(3); // game over sound effect |
KaifK | 29:532e5c371be4 | 111 | wait(3); |
KaifK | 17:2fbe40177b9c | 112 | pad.reset_buttons(); //to ensure no accidental selection on menu |
KaifK | 17:2fbe40177b9c | 113 | } |
KaifK | 16:1f196a0e12be | 114 | void how_to() { |
KaifK | 20:c697902b844f | 115 | pad.leds(0.0); |
KaifK | 25:467d8fd0fec4 | 116 | if (pad.get_direction() == N) { |
KaifK | 25:467d8fd0fec4 | 117 | page--; |
KaifK | 25:467d8fd0fec4 | 118 | } else if (pad.get_direction() == S || page == 3 || page == 4) { |
KaifK | 28:215e8327d4e6 | 119 | page++; //pages 3 and 4 don't need scrolling so increase page number |
KaifK | 25:467d8fd0fec4 | 120 | } |
KaifK | 25:467d8fd0fec4 | 121 | if (page > 7) { |
KaifK | 28:215e8327d4e6 | 122 | page = 7; //only 7 pages |
KaifK | 25:467d8fd0fec4 | 123 | } |
KaifK | 25:467d8fd0fec4 | 124 | if (page < 1) { |
KaifK | 25:467d8fd0fec4 | 125 | page = 1; |
KaifK | 25:467d8fd0fec4 | 126 | } |
KaifK | 18:100e7d3509b5 | 127 | instruction.set_page(page); |
KaifK | 28:215e8327d4e6 | 128 | instruction.display(); //display page |
KaifK | 18:100e7d3509b5 | 129 | wait(0.2); |
KaifK | 16:1f196a0e12be | 130 | } |
KaifK | 16:1f196a0e12be | 131 | void display_settings() { |
KaifK | 25:467d8fd0fec4 | 132 | lcd.printString("Settings", 20, 0); |
KaifK | 25:467d8fd0fec4 | 133 | lcd.printString("Set Contrast", 0, 1); |
KaifK | 25:467d8fd0fec4 | 134 | lcd.printString("using Pot 1", 0, 2); |
KaifK | 25:467d8fd0fec4 | 135 | lcd.printString("Hit B to Exit", 0, 5); |
KaifK | 16:1f196a0e12be | 136 | lcd.drawRect(0, 24, 84, 8, FILL_TRANSPARENT); |
KaifK | 28:215e8327d4e6 | 137 | float pot_1_val = pad.read_pot1(); // read pot 1 value |
KaifK | 28:215e8327d4e6 | 138 | //printf("POT 1 = %.2f \n", pot_1_val); |
KaifK | 28:215e8327d4e6 | 139 | //fill bar proportionally to pot 1 value |
KaifK | 28:215e8327d4e6 | 140 | lcd.drawRect(0, 24, (int)(84 * pot_1_val), 8, FILL_BLACK); |
KaifK | 28:215e8327d4e6 | 141 | lcd.setContrast(pot_1_val); //set contrast using pot 1 value |
KaifK | 16:1f196a0e12be | 142 | lcd.refresh(); |
KaifK | 16:1f196a0e12be | 143 | wait_ms(100); |
KaifK | 16:1f196a0e12be | 144 | lcd.clear(); |
KaifK | 25:467d8fd0fec4 | 145 | } |