Adventure game written for ECE2035 at the Georgia Institute of Technology

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
trmontgomery
Date:
Sat Oct 26 15:44:26 2019 +0000
Revision:
5:93a4c396c1af
Parent:
4:cdc54191ff07
test

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 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