Kaif Kutchwala 201267448 ELEC2645 Project

Dependencies:   mbed

Committer:
KaifK
Date:
Mon May 25 19:52:37 2020 +0000
Revision:
27:1a3504a9d1b9
Parent:
25:467d8fd0fec4
Child:
28:215e8327d4e6
Shoot! 1.0 Final; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KaifK 0:e47aa16004e6 1 /*
KaifK 4:08a0ff6668df 2 Shoot
KaifK 0:e47aa16004e6 3 ELEC2645 Project
KaifK 0:e47aa16004e6 4 EL18KK
KaifK 0:e47aa16004e6 5 201267448
KaifK 0:e47aa16004e6 6 */
KaifK 0:e47aa16004e6 7
KaifK 0:e47aa16004e6 8 #include "mbed.h"
KaifK 0:e47aa16004e6 9 #include "Gamepad.h"
KaifK 0:e47aa16004e6 10 #include "N5110.h"
KaifK 3:f86c1cf90d0d 11 #include "Ball.h"
KaifK 3:f86c1cf90d0d 12 #include "Splash.h"
KaifK 4:08a0ff6668df 13 #include "Game.h"
KaifK 21:d5b1160f349f 14 #include "test.h"
KaifK 18:100e7d3509b5 15 #include "Instructions.h"
KaifK 18:100e7d3509b5 16 #include "Sprites.h"
KaifK 0:e47aa16004e6 17
KaifK 4:08a0ff6668df 18 //objects
KaifK 0:e47aa16004e6 19 Gamepad pad;
KaifK 0:e47aa16004e6 20 N5110 lcd;
KaifK 9:e6566d09f087 21 Ball ball(lcd);
KaifK 9:e6566d09f087 22 Splash splash(lcd, ball);
KaifK 9:e6566d09f087 23 Game game(lcd, pad, ball);
KaifK 18:100e7d3509b5 24 Instructions instruction(lcd, pad, ball, game);
KaifK 25:467d8fd0fec4 25
KaifK 5:ed71996c0534 26 //functions
KaifK 16:1f196a0e12be 27 void init();
KaifK 5:ed71996c0534 28 void display_menu();
KaifK 17:2fbe40177b9c 29 void game_loop();
KaifK 16:1f196a0e12be 30 void how_to();
KaifK 16:1f196a0e12be 31 void display_settings();
KaifK 25:467d8fd0fec4 32
KaifK 4:08a0ff6668df 33 //variables
KaifK 18:100e7d3509b5 34 int page = 1;
KaifK 2:21973e665a32 35
KaifK 18:100e7d3509b5 36 int main() {
KaifK 16:1f196a0e12be 37 init();
KaifK 18:100e7d3509b5 38 while (1) {
KaifK 11:59119247dd68 39 //ball.level_loop();
KaifK 4:08a0ff6668df 40 display_menu();
KaifK 27:1a3504a9d1b9 41 page = 1;
KaifK 4:08a0ff6668df 42 if (pad.A_pressed()) {
KaifK 17:2fbe40177b9c 43 game_loop();
KaifK 18:100e7d3509b5 44 } else if (pad.B_pressed()) {
KaifK 25:467d8fd0fec4 45 wait(0.3); //debounce
KaifK 25:467d8fd0fec4 46 while (!pad.B_pressed()) { how_to(); }
KaifK 25:467d8fd0fec4 47 wait(0.3);
KaifK 18:100e7d3509b5 48 pad.reset_buttons();
KaifK 18:100e7d3509b5 49 } else if (pad.X_pressed()) {
KaifK 25:467d8fd0fec4 50 while (!pad.B_pressed()) { display_settings(); }
KaifK 25:467d8fd0fec4 51 wait(0.3);
KaifK 21:d5b1160f349f 52 pad.reset_buttons();
KaifK 18:100e7d3509b5 53 } else if (pad.Y_pressed()) {
KaifK 6:09a555c0d997 54 lcd.turnOff();
KaifK 6:09a555c0d997 55 pad.leds(0.0);
KaifK 6:09a555c0d997 56 }
KaifK 4:08a0ff6668df 57 }
KaifK 4:08a0ff6668df 58 }
KaifK 16:1f196a0e12be 59 void init() {
KaifK 21:d5b1160f349f 60 run_all_tests();
KaifK 16:1f196a0e12be 61 lcd.init();
KaifK 22:76bb0f52be8b 62 pad.init();
KaifK 16:1f196a0e12be 63 lcd.setContrast(0.5);
KaifK 16:1f196a0e12be 64 lcd.backLightOn();
KaifK 18:100e7d3509b5 65 splash.displayInfo();
KaifK 18:100e7d3509b5 66 splash.playIntro();
KaifK 22:76bb0f52be8b 67 game.init();
KaifK 25:467d8fd0fec4 68 }
KaifK 18:100e7d3509b5 69 void display_menu() {
KaifK 9:e6566d09f087 70 splash.drawLogo(13, 0);
KaifK 4:08a0ff6668df 71 lcd.printString("Play", 2, 2);
KaifK 4:08a0ff6668df 72 lcd.printString("How-To?", 2, 3);
KaifK 4:08a0ff6668df 73 lcd.printString("Settings", 2, 4);
KaifK 4:08a0ff6668df 74 lcd.printString("Exit", 2, 5);
KaifK 25:467d8fd0fec4 75 lcd.drawSprite(28, 15, 9, 9, (int * ) a_button);
KaifK 25:467d8fd0fec4 76 lcd.drawSprite(45, 23, 9, 9, (int * ) b_button);
KaifK 25:467d8fd0fec4 77 lcd.drawSprite(52, 31, 9, 9, (int * ) x_button);
KaifK 25:467d8fd0fec4 78 lcd.drawSprite(28, 39, 9, 9, (int * ) y_button);
KaifK 16:1f196a0e12be 79 //highscore
KaifK 25:467d8fd0fec4 80 lcd.drawSprite(65, 21, 9, 15, (int * ) highscore_icon);
KaifK 16:1f196a0e12be 81 lcd.drawRect(65, 30, 15, 12, FILL_TRANSPARENT);
KaifK 16:1f196a0e12be 82 int highscore = game.get_highscore();
KaifK 16:1f196a0e12be 83 char buffer[12];
KaifK 25:467d8fd0fec4 84 sprintf(buffer, "%d", highscore);
KaifK 25:467d8fd0fec4 85 lcd.printString(buffer, 67, 4);
KaifK 15:5bf3f951d337 86 lcd.refresh();
KaifK 15:5bf3f951d337 87 wait(0.1);
KaifK 16:1f196a0e12be 88 lcd.clear();
KaifK 16:1f196a0e12be 89 }
KaifK 17:2fbe40177b9c 90 void game_loop() {
KaifK 23:ad9ac069e751 91 game.init();
KaifK 17:2fbe40177b9c 92 wait(0.2); //debounce
KaifK 17:2fbe40177b9c 93 game.play();
KaifK 17:2fbe40177b9c 94 lcd.clear();
KaifK 25:467d8fd0fec4 95 lcd.printString("GAME OVER", 15, 2);
KaifK 17:2fbe40177b9c 96 lcd.refresh();
KaifK 20:c697902b844f 97 game.playGoalSound(3);
KaifK 17:2fbe40177b9c 98 wait(2);
KaifK 17:2fbe40177b9c 99 pad.reset_buttons(); //to ensure no accidental selection on menu
KaifK 17:2fbe40177b9c 100 }
KaifK 16:1f196a0e12be 101 void how_to() {
KaifK 20:c697902b844f 102 pad.leds(0.0);
KaifK 25:467d8fd0fec4 103 if (pad.get_direction() == N) {
KaifK 25:467d8fd0fec4 104 page--;
KaifK 25:467d8fd0fec4 105 } else if (pad.get_direction() == S || page == 3 || page == 4) {
KaifK 25:467d8fd0fec4 106 page++;
KaifK 25:467d8fd0fec4 107 }
KaifK 25:467d8fd0fec4 108 if (page > 7) {
KaifK 25:467d8fd0fec4 109 page = 7;
KaifK 25:467d8fd0fec4 110 }
KaifK 25:467d8fd0fec4 111 if (page < 1) {
KaifK 25:467d8fd0fec4 112 page = 1;
KaifK 25:467d8fd0fec4 113 }
KaifK 18:100e7d3509b5 114 instruction.set_page(page);
KaifK 18:100e7d3509b5 115 instruction.display();
KaifK 18:100e7d3509b5 116 wait(0.2);
KaifK 16:1f196a0e12be 117 }
KaifK 16:1f196a0e12be 118 void display_settings() {
KaifK 25:467d8fd0fec4 119 lcd.printString("Settings", 20, 0);
KaifK 25:467d8fd0fec4 120 lcd.printString("Set Contrast", 0, 1);
KaifK 25:467d8fd0fec4 121 lcd.printString("using Pot 1", 0, 2);
KaifK 25:467d8fd0fec4 122 lcd.printString("Hit B to Exit", 0, 5);
KaifK 16:1f196a0e12be 123 lcd.drawRect(0, 24, 84, 8, FILL_TRANSPARENT);
KaifK 16:1f196a0e12be 124 float pot_1_val = pad.read_pot1();
KaifK 25:467d8fd0fec4 125 printf("POT 1 = %.2f \n", pot_1_val);
KaifK 25:467d8fd0fec4 126 lcd.drawRect(0, 24, (int)(84 * pot_1_val), 8, FILL_BLACK);
KaifK 16:1f196a0e12be 127 lcd.setContrast(pot_1_val);
KaifK 16:1f196a0e12be 128 lcd.refresh();
KaifK 16:1f196a0e12be 129 wait_ms(100);
KaifK 16:1f196a0e12be 130 lcd.clear();
KaifK 25:467d8fd0fec4 131 }