Adventure game written for ECE2035 at the Georgia Institute of Technology
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
startmenu.cpp@5:93a4c396c1af, 2019-10-26 (annotated)
- Committer:
- trmontgomery
- Date:
- Sat Oct 26 15:44:26 2019 +0000
- Revision:
- 5:93a4c396c1af
- Parent:
- 4:cdc54191ff07
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
trmontgomery | 2:0876296d9473 | 1 | #include "globals.h" |
trmontgomery | 2:0876296d9473 | 2 | #include "hardware.h" |
trmontgomery | 2:0876296d9473 | 3 | #include "map.h" |
trmontgomery | 2:0876296d9473 | 4 | #include "graphics.h" |
trmontgomery | 2:0876296d9473 | 5 | #include "speech.h" |
trmontgomery | 4:cdc54191ff07 | 6 | #include "startmenu.h" |
trmontgomery | 4:cdc54191ff07 | 7 | #include <vector> |
trmontgomery | 2:0876296d9473 | 8 | |
trmontgomery | 4:cdc54191ff07 | 9 | //note when you define stuff up here like this the methods of the class cant see it I think |
trmontgomery | 2:0876296d9473 | 10 | #define NO_ACTION 0 |
trmontgomery | 2:0876296d9473 | 11 | #define BUTTON1 1 |
trmontgomery | 2:0876296d9473 | 12 | #define BUTTON2 2 |
trmontgomery | 2:0876296d9473 | 13 | #define BUTTON3 3 |
trmontgomery | 2:0876296d9473 | 14 | #define MENU_BUTTON 4 |
trmontgomery | 2:0876296d9473 | 15 | #define GO_LEFT 5 |
trmontgomery | 2:0876296d9473 | 16 | #define GO_RIGHT 6 |
trmontgomery | 2:0876296d9473 | 17 | #define GO_UP 7 |
trmontgomery | 2:0876296d9473 | 18 | #define GO_DOWN 8 |
trmontgomery | 4:cdc54191ff07 | 19 | #define NO_RESULT 9 |
trmontgomery | 4:cdc54191ff07 | 20 | #define GAME_OVER 10 |
trmontgomery | 4:cdc54191ff07 | 21 | #define FULL_DRAW 11 |
trmontgomery | 2:0876296d9473 | 22 | |
trmontgomery | 5:93a4c396c1af | 23 | |
trmontgomery | 5:93a4c396c1af | 24 | int Menu::get_action(GameInputs inputs){ |
trmontgomery | 5:93a4c396c1af | 25 | if(!inputs.b1){ |
trmontgomery | 5:93a4c396c1af | 26 | return 1; |
trmontgomery | 5:93a4c396c1af | 27 | } |
trmontgomery | 5:93a4c396c1af | 28 | if(!inputs.b2){ |
trmontgomery | 5:93a4c396c1af | 29 | return 2; |
trmontgomery | 5:93a4c396c1af | 30 | } |
trmontgomery | 5:93a4c396c1af | 31 | if (!inputs.b3){ |
trmontgomery | 5:93a4c396c1af | 32 | return BUTTON3; |
trmontgomery | 5:93a4c396c1af | 33 | } |
trmontgomery | 5:93a4c396c1af | 34 | return NO_ACTION; |
trmontgomery | 5:93a4c396c1af | 35 | } |
trmontgomery | 5:93a4c396c1af | 36 | |
trmontgomery | 5:93a4c396c1af | 37 | |
trmontgomery | 5:93a4c396c1af | 38 | int Menu::display(){ |
trmontgomery | 5:93a4c396c1af | 39 | ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!"); |
trmontgomery | 5:93a4c396c1af | 40 | // Menu loop |
trmontgomery | 5:93a4c396c1af | 41 | while(1) |
trmontgomery | 5:93a4c396c1af | 42 | { |
trmontgomery | 5:93a4c396c1af | 43 | // Timer to measure game update speed |
trmontgomery | 5:93a4c396c1af | 44 | Timer t; t.start(); |
trmontgomery | 5:93a4c396c1af | 45 | |
trmontgomery | 5:93a4c396c1af | 46 | // Actually do the game update: |
trmontgomery | 5:93a4c396c1af | 47 | // 1. Read inputs |
trmontgomery | 5:93a4c396c1af | 48 | GameInputs in = read_inputs(); |
trmontgomery | 5:93a4c396c1af | 49 | // 2. Determine action (get_action) |
trmontgomery | 5:93a4c396c1af | 50 | int a = this->get_action(in); |
trmontgomery | 5:93a4c396c1af | 51 | // 3. Update game (update_game) |
trmontgomery | 5:93a4c396c1af | 52 | int u = this->update(a); |
trmontgomery | 5:93a4c396c1af | 53 | |
trmontgomery | 5:93a4c396c1af | 54 | // 4. Draw frame (draw_game) |
trmontgomery | 5:93a4c396c1af | 55 | this->draw(u); |
trmontgomery | 5:93a4c396c1af | 56 | |
trmontgomery | 5:93a4c396c1af | 57 | //check for start |
trmontgomery | 5:93a4c396c1af | 58 | if (terminate){ |
trmontgomery | 5:93a4c396c1af | 59 | uLCD.filled_rectangle(0, 127, 127, 0, 0x000000); |
trmontgomery | 5:93a4c396c1af | 60 | return terminate; |
trmontgomery | 5:93a4c396c1af | 61 | } |
trmontgomery | 5:93a4c396c1af | 62 | |
trmontgomery | 5:93a4c396c1af | 63 | // 5. Frame delay |
trmontgomery | 5:93a4c396c1af | 64 | t.stop(); |
trmontgomery | 5:93a4c396c1af | 65 | int dt = t.read_ms(); |
trmontgomery | 5:93a4c396c1af | 66 | if (dt < 500) wait_ms(500 - dt); |
trmontgomery | 5:93a4c396c1af | 67 | } |
trmontgomery | 5:93a4c396c1af | 68 | } |
trmontgomery | 5:93a4c396c1af | 69 | |
trmontgomery | 5:93a4c396c1af | 70 | StartMenu::StartMenu() : start(0), quit(0), start_color(BLACK), quit_color(BLACK), third_color(BLACK){ |
trmontgomery | 5:93a4c396c1af | 71 | |
trmontgomery | 2:0876296d9473 | 72 | //draw pink rectangle on whole screen |
trmontgomery | 2:0876296d9473 | 73 | uLCD.filled_rectangle(0, 127, 127, 0, PINK1); |
trmontgomery | 5:93a4c396c1af | 74 | |
trmontgomery | 2:0876296d9473 | 75 | // write title |
trmontgomery | 5:93a4c396c1af | 76 | uLCD.locate(1,2); |
trmontgomery | 2:0876296d9473 | 77 | uLCD.textbackground_color(YELLOW); |
trmontgomery | 2:0876296d9473 | 78 | uLCD.color(BLACK); |
trmontgomery | 4:cdc54191ff07 | 79 | uLCD.printf("Issa Quest"); |
trmontgomery | 2:0876296d9473 | 80 | |
trmontgomery | 5:93a4c396c1af | 81 | } |
trmontgomery | 5:93a4c396c1af | 82 | |
trmontgomery | 5:93a4c396c1af | 83 | |
trmontgomery | 5:93a4c396c1af | 84 | int StartMenu::update(int action){ //this might need to rewritten |
trmontgomery | 5:93a4c396c1af | 85 | |
trmontgomery | 5:93a4c396c1af | 86 | switch(action) |
trmontgomery | 5:93a4c396c1af | 87 | { |
trmontgomery | 5:93a4c396c1af | 88 | case 1: |
trmontgomery | 5:93a4c396c1af | 89 | //if button 1 pressed move to next menu item |
trmontgomery | 5:93a4c396c1af | 90 | button_presses = button_presses++; |
trmontgomery | 5:93a4c396c1af | 91 | break; |
trmontgomery | 5:93a4c396c1af | 92 | case 2: |
trmontgomery | 5:93a4c396c1af | 93 | //if button 2 pressed select menu item |
trmontgomery | 5:93a4c396c1af | 94 | if (button_presses > 0 && button_presses%3 == 0) { //Start game |
trmontgomery | 5:93a4c396c1af | 95 | start = true; |
trmontgomery | 5:93a4c396c1af | 96 | terminate = true; |
trmontgomery | 5:93a4c396c1af | 97 | } else if (button_presses%3 == 1){ //Quit (screen cut to black) |
trmontgomery | 5:93a4c396c1af | 98 | quit = true; |
trmontgomery | 5:93a4c396c1af | 99 | } else { |
trmontgomery | 5:93a4c396c1af | 100 | o_instructions(); |
trmontgomery | 5:93a4c396c1af | 101 | } |
trmontgomery | 5:93a4c396c1af | 102 | break; |
trmontgomery | 5:93a4c396c1af | 103 | } |
trmontgomery | 5:93a4c396c1af | 104 | return NO_RESULT; |
trmontgomery | 5:93a4c396c1af | 105 | } |
trmontgomery | 5:93a4c396c1af | 106 | |
trmontgomery | 5:93a4c396c1af | 107 | void StartMenu::draw(int init){ |
trmontgomery | 5:93a4c396c1af | 108 | |
trmontgomery | 5:93a4c396c1af | 109 | //if statement selects which option will be highlighted |
trmontgomery | 5:93a4c396c1af | 110 | if (button_presses%3 == 0){ |
trmontgomery | 2:0876296d9473 | 111 | start_color = GREEN; |
trmontgomery | 5:93a4c396c1af | 112 | } else if (button_presses%3 == 1){ |
trmontgomery | 2:0876296d9473 | 113 | quit_color = GREEN; |
trmontgomery | 2:0876296d9473 | 114 | } else{ |
trmontgomery | 2:0876296d9473 | 115 | third_color = GREEN; |
trmontgomery | 2:0876296d9473 | 116 | } |
trmontgomery | 2:0876296d9473 | 117 | |
trmontgomery | 5:93a4c396c1af | 118 | //draws the options on the screen |
trmontgomery | 2:0876296d9473 | 119 | uLCD.locate(1,4); |
trmontgomery | 2:0876296d9473 | 120 | uLCD.color(start_color); |
trmontgomery | 4:cdc54191ff07 | 121 | uLCD.printf("Start da game"); |
trmontgomery | 2:0876296d9473 | 122 | |
trmontgomery | 2:0876296d9473 | 123 | uLCD.locate(1,6); |
trmontgomery | 2:0876296d9473 | 124 | uLCD.color(quit_color); |
trmontgomery | 4:cdc54191ff07 | 125 | uLCD.printf("Quit?"); |
trmontgomery | 2:0876296d9473 | 126 | |
trmontgomery | 2:0876296d9473 | 127 | uLCD.locate(1,8); |
trmontgomery | 2:0876296d9473 | 128 | uLCD.color(third_color); |
trmontgomery | 4:cdc54191ff07 | 129 | uLCD.printf("Instructions"); |
trmontgomery | 5:93a4c396c1af | 130 | |
trmontgomery | 5:93a4c396c1af | 131 | start_color = BLACK; |
trmontgomery | 5:93a4c396c1af | 132 | quit_color = BLACK; |
trmontgomery | 5:93a4c396c1af | 133 | third_color = BLACK; |
trmontgomery | 4:cdc54191ff07 | 134 | } |
trmontgomery | 4:cdc54191ff07 | 135 | |
trmontgomery | 5:93a4c396c1af | 136 | |
trmontgomery | 4:cdc54191ff07 | 137 | //Option Definition// |
trmontgomery | 5:93a4c396c1af | 138 | int StartMenu::o_instructions(){ |
trmontgomery | 4:cdc54191ff07 | 139 | uLCD.filled_rectangle(0, 128, 128, 80, PINK1); |
trmontgomery | 4:cdc54191ff07 | 140 | uLCD.locate(1,4); |
trmontgomery | 4:cdc54191ff07 | 141 | uLCD.textbackground_color(YELLOW); |
trmontgomery | 4:cdc54191ff07 | 142 | uLCD.color(BLACK); |
trmontgomery | 2:0876296d9473 | 143 | |
trmontgomery | 4:cdc54191ff07 | 144 | uLCD.printf("Go into the house and talk to the red man to start your quest. Be careful not to step on the spikes."); |
trmontgomery | 4:cdc54191ff07 | 145 | |
trmontgomery | 4:cdc54191ff07 | 146 | uLCD.locate(10,15); |
trmontgomery | 4:cdc54191ff07 | 147 | uLCD.color(GREEN); |
trmontgomery | 4:cdc54191ff07 | 148 | uLCD.printf("Back"); |
trmontgomery | 2:0876296d9473 | 149 | |
trmontgomery | 4:cdc54191ff07 | 150 | GameInputs inp = read_inputs(); |
trmontgomery | 4:cdc54191ff07 | 151 | while(1){ |
trmontgomery | 4:cdc54191ff07 | 152 | if(!inp.b2){ |
trmontgomery | 4:cdc54191ff07 | 153 | uLCD.filled_rectangle(0, 128, 128, 30, PINK1); //erase option |
trmontgomery | 4:cdc54191ff07 | 154 | wait(1); |
trmontgomery | 4:cdc54191ff07 | 155 | return 0; |
trmontgomery | 4:cdc54191ff07 | 156 | } |
trmontgomery | 4:cdc54191ff07 | 157 | inp = read_inputs(); |
trmontgomery | 4:cdc54191ff07 | 158 | wait(1); |
trmontgomery | 4:cdc54191ff07 | 159 | } |
trmontgomery | 4:cdc54191ff07 | 160 | } |
trmontgomery | 4:cdc54191ff07 | 161 | |
trmontgomery | 5:93a4c396c1af | 162 | int StartMenu::display(){ |
trmontgomery | 5:93a4c396c1af | 163 | int result = Menu::display(); |
trmontgomery | 5:93a4c396c1af | 164 | return result; |
trmontgomery | 4:cdc54191ff07 | 165 | } |
trmontgomery | 4:cdc54191ff07 | 166 |