Adventure game written for ECE2035 at the Georgia Institute of Technology

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
trmontgomery
Date:
Tue May 22 19:13:03 2018 +0000
Revision:
4:cdc54191ff07
Parent:
2:0876296d9473
Child:
5:93a4c396c1af
Menu class complete

Who changed what in which revision?

UserRevisionLine numberNew 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 4:cdc54191ff07 23 /*This initializes the menu. i.e. this is the first drawing on the screen.*/
trmontgomery 4:cdc54191ff07 24 Menu::Menu(int num_options){
trmontgomery 2:0876296d9473 25
trmontgomery 4:cdc54191ff07 26 this->num_options = num_options;
trmontgomery 4:cdc54191ff07 27 this->start = 0;
trmontgomery 4:cdc54191ff07 28 this->quit = 0;
trmontgomery 2:0876296d9473 29 uLCD.locate(1,2);
trmontgomery 2:0876296d9473 30 //draw pink rectangle on whole screen
trmontgomery 2:0876296d9473 31 uLCD.filled_rectangle(0, 127, 127, 0, PINK1);
trmontgomery 2:0876296d9473 32 // write title
trmontgomery 2:0876296d9473 33 uLCD.textbackground_color(YELLOW);
trmontgomery 2:0876296d9473 34 uLCD.color(BLACK);
trmontgomery 4:cdc54191ff07 35 uLCD.printf("Issa Quest");
trmontgomery 2:0876296d9473 36
trmontgomery 2:0876296d9473 37 if (current_item%3 == 0){
trmontgomery 2:0876296d9473 38 start_color = GREEN;
trmontgomery 2:0876296d9473 39 } else if (current_item%3 == 1){
trmontgomery 2:0876296d9473 40 quit_color = GREEN;
trmontgomery 2:0876296d9473 41 } else{
trmontgomery 2:0876296d9473 42 third_color = GREEN;
trmontgomery 2:0876296d9473 43 }
trmontgomery 2:0876296d9473 44
trmontgomery 2:0876296d9473 45 uLCD.locate(1,4);
trmontgomery 2:0876296d9473 46 uLCD.color(start_color);
trmontgomery 4:cdc54191ff07 47 uLCD.printf("Start da game");
trmontgomery 2:0876296d9473 48
trmontgomery 2:0876296d9473 49 uLCD.locate(1,6);
trmontgomery 2:0876296d9473 50 uLCD.color(quit_color);
trmontgomery 4:cdc54191ff07 51 uLCD.printf("Quit?");
trmontgomery 2:0876296d9473 52
trmontgomery 2:0876296d9473 53 uLCD.locate(1,8);
trmontgomery 2:0876296d9473 54 uLCD.color(third_color);
trmontgomery 4:cdc54191ff07 55 uLCD.printf("Instructions");
trmontgomery 4:cdc54191ff07 56 }
trmontgomery 4:cdc54191ff07 57
trmontgomery 4:cdc54191ff07 58 //Option Definition//
trmontgomery 4:cdc54191ff07 59 int Menu::o_instructions(){
trmontgomery 4:cdc54191ff07 60 uLCD.filled_rectangle(0, 128, 128, 80, PINK1);
trmontgomery 4:cdc54191ff07 61 uLCD.locate(1,4);
trmontgomery 4:cdc54191ff07 62 uLCD.textbackground_color(YELLOW);
trmontgomery 4:cdc54191ff07 63 uLCD.color(BLACK);
trmontgomery 2:0876296d9473 64
trmontgomery 4:cdc54191ff07 65 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 66
trmontgomery 4:cdc54191ff07 67 uLCD.locate(10,15);
trmontgomery 4:cdc54191ff07 68 uLCD.color(GREEN);
trmontgomery 4:cdc54191ff07 69 uLCD.printf("Back");
trmontgomery 2:0876296d9473 70
trmontgomery 4:cdc54191ff07 71 GameInputs inp = read_inputs();
trmontgomery 4:cdc54191ff07 72 while(1){
trmontgomery 4:cdc54191ff07 73 if(!inp.b2){
trmontgomery 4:cdc54191ff07 74 uLCD.filled_rectangle(0, 128, 128, 30, PINK1); //erase option
trmontgomery 4:cdc54191ff07 75 wait(1);
trmontgomery 4:cdc54191ff07 76 return 0;
trmontgomery 4:cdc54191ff07 77 }
trmontgomery 4:cdc54191ff07 78 inp = read_inputs();
trmontgomery 4:cdc54191ff07 79 wait(1);
trmontgomery 4:cdc54191ff07 80 }
trmontgomery 4:cdc54191ff07 81 }
trmontgomery 4:cdc54191ff07 82
trmontgomery 4:cdc54191ff07 83 int Menu::get_action(GameInputs inputs){
trmontgomery 4:cdc54191ff07 84 if(!inputs.b1){
trmontgomery 4:cdc54191ff07 85 uLCD.locate(1,2);
trmontgomery 4:cdc54191ff07 86 char but[5];
trmontgomery 4:cdc54191ff07 87 sprintf(but, "%d: %d\n", !inputs.b1, inputs.b1);
trmontgomery 4:cdc54191ff07 88 uLCD.printf(but);
trmontgomery 4:cdc54191ff07 89 return 1;
trmontgomery 4:cdc54191ff07 90 }
trmontgomery 4:cdc54191ff07 91 if(!inputs.b2){
trmontgomery 4:cdc54191ff07 92 return 2;
trmontgomery 4:cdc54191ff07 93 }
trmontgomery 4:cdc54191ff07 94 if (!inputs.b3){
trmontgomery 4:cdc54191ff07 95 return BUTTON3;
trmontgomery 4:cdc54191ff07 96 }
trmontgomery 4:cdc54191ff07 97 return NO_ACTION;
trmontgomery 2:0876296d9473 98 }
trmontgomery 2:0876296d9473 99
trmontgomery 4:cdc54191ff07 100 int Menu::update(int action){ //this might need to rewritten
trmontgomery 4:cdc54191ff07 101
trmontgomery 4:cdc54191ff07 102 switch(action)
trmontgomery 4:cdc54191ff07 103 {
trmontgomery 4:cdc54191ff07 104 case 1:
trmontgomery 4:cdc54191ff07 105 //if button 1 pressed move to next menu item
trmontgomery 4:cdc54191ff07 106 current_item = current_item++;
trmontgomery 4:cdc54191ff07 107 break;
trmontgomery 4:cdc54191ff07 108 case 2:
trmontgomery 4:cdc54191ff07 109 //if button 2 pressed select menu item
trmontgomery 4:cdc54191ff07 110 //b2presses++;
trmontgomery 4:cdc54191ff07 111 if (current_item > 0 && current_item%this->num_options == 0) {//Start game
trmontgomery 4:cdc54191ff07 112 start = true;
trmontgomery 4:cdc54191ff07 113 } else if (current_item%this->num_options == 1){ //Quit (screen cut to black)
trmontgomery 4:cdc54191ff07 114 quit = true;
trmontgomery 4:cdc54191ff07 115 } else { //screen go white
trmontgomery 4:cdc54191ff07 116 o_instructions();
trmontgomery 4:cdc54191ff07 117 }
trmontgomery 4:cdc54191ff07 118 break;
trmontgomery 4:cdc54191ff07 119 case MENU_BUTTON:
trmontgomery 4:cdc54191ff07 120 break;
trmontgomery 4:cdc54191ff07 121 default: break;
trmontgomery 4:cdc54191ff07 122 }
trmontgomery 4:cdc54191ff07 123 return NO_RESULT;
trmontgomery 4:cdc54191ff07 124 }
trmontgomery 4:cdc54191ff07 125
trmontgomery 4:cdc54191ff07 126 void Menu::draw(int init){
trmontgomery 4:cdc54191ff07 127 if (current_item%this->num_options == 0){
trmontgomery 4:cdc54191ff07 128 start_color = GREEN;
trmontgomery 4:cdc54191ff07 129 } else if (current_item%this->num_options == 1){
trmontgomery 4:cdc54191ff07 130 quit_color = GREEN;
trmontgomery 4:cdc54191ff07 131 } else{
trmontgomery 4:cdc54191ff07 132 third_color = GREEN;
trmontgomery 4:cdc54191ff07 133 }
trmontgomery 4:cdc54191ff07 134
trmontgomery 4:cdc54191ff07 135 uLCD.locate(1,4);
trmontgomery 4:cdc54191ff07 136 uLCD.color(start_color);
trmontgomery 4:cdc54191ff07 137 uLCD.printf("Start da game");
trmontgomery 4:cdc54191ff07 138
trmontgomery 4:cdc54191ff07 139 uLCD.locate(1,6);
trmontgomery 4:cdc54191ff07 140 uLCD.color(quit_color);
trmontgomery 4:cdc54191ff07 141 uLCD.printf("Quit?");
trmontgomery 4:cdc54191ff07 142
trmontgomery 4:cdc54191ff07 143 uLCD.locate(1,8);
trmontgomery 4:cdc54191ff07 144 uLCD.color(third_color);
trmontgomery 4:cdc54191ff07 145 uLCD.printf("Instructions");
trmontgomery 4:cdc54191ff07 146
trmontgomery 4:cdc54191ff07 147 start_color = BLACK;
trmontgomery 4:cdc54191ff07 148 quit_color = BLACK;
trmontgomery 4:cdc54191ff07 149 third_color = BLACK;
trmontgomery 4:cdc54191ff07 150 }
trmontgomery 4:cdc54191ff07 151
trmontgomery 4:cdc54191ff07 152 int Menu::display(){
trmontgomery 2:0876296d9473 153 ASSERT_P(hardware_init() == ERROR_NONE, "Hardware init failed!");
trmontgomery 4:cdc54191ff07 154 // Menu loop
trmontgomery 2:0876296d9473 155 while(1)
trmontgomery 2:0876296d9473 156 {
trmontgomery 2:0876296d9473 157 // Timer to measure game update speed
trmontgomery 2:0876296d9473 158 Timer t; t.start();
trmontgomery 2:0876296d9473 159
trmontgomery 2:0876296d9473 160 // Actually do the game update:
trmontgomery 2:0876296d9473 161 // 1. Read inputs
trmontgomery 2:0876296d9473 162 GameInputs in = read_inputs();
trmontgomery 2:0876296d9473 163 // 2. Determine action (get_action)
trmontgomery 4:cdc54191ff07 164 int a = this->get_action(in);
trmontgomery 4:cdc54191ff07 165 char act[5];
trmontgomery 4:cdc54191ff07 166 sprintf(act, "%d", a);
trmontgomery 4:cdc54191ff07 167 uLCD.printf(act);
trmontgomery 2:0876296d9473 168 // 3. Update game (update_game)
trmontgomery 4:cdc54191ff07 169 int u = this->update(a);
trmontgomery 2:0876296d9473 170
trmontgomery 2:0876296d9473 171 // 4. Draw frame (draw_game)
trmontgomery 4:cdc54191ff07 172 this->draw(u);
trmontgomery 2:0876296d9473 173
trmontgomery 2:0876296d9473 174 //check for start
trmontgomery 2:0876296d9473 175 if (start){
trmontgomery 4:cdc54191ff07 176 uLCD.filled_rectangle(0, 127, 127, 0, 0x000000);
trmontgomery 2:0876296d9473 177 return start;
trmontgomery 2:0876296d9473 178 }
trmontgomery 2:0876296d9473 179
trmontgomery 2:0876296d9473 180 // 5. Frame delay
trmontgomery 2:0876296d9473 181 t.stop();
trmontgomery 2:0876296d9473 182 int dt = t.read_ms();
trmontgomery 2:0876296d9473 183 if (dt < 500) wait_ms(500 - dt);
trmontgomery 2:0876296d9473 184 }
trmontgomery 2:0876296d9473 185 }
trmontgomery 4:cdc54191ff07 186
trmontgomery 4:cdc54191ff07 187