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 4:cdc54191ff07 1 // Project includes
trmontgomery 4:cdc54191ff07 2 #include "globals.h"
trmontgomery 4:cdc54191ff07 3 #include "hardware.h"
trmontgomery 4:cdc54191ff07 4 #include "map.h"
trmontgomery 4:cdc54191ff07 5 #include "graphics.h"
trmontgomery 4:cdc54191ff07 6 #include "speech.h"
trmontgomery 4:cdc54191ff07 7
trmontgomery 4:cdc54191ff07 8 // Functions in this file
trmontgomery 4:cdc54191ff07 9 int get_screen_action (GameInputs inputs);
trmontgomery 4:cdc54191ff07 10 int update_screen (int action);
trmontgomery 4:cdc54191ff07 11 void draw_screen (int init);
trmontgomery 4:cdc54191ff07 12 void init_screen ();
trmontgomery 4:cdc54191ff07 13 int gameover();
trmontgomery 4:cdc54191ff07 14
trmontgomery 4:cdc54191ff07 15 //global variables
trmontgomery 4:cdc54191ff07 16 int yes;
trmontgomery 4:cdc54191ff07 17 int no;
trmontgomery 4:cdc54191ff07 18 int yes_color;
trmontgomery 4:cdc54191ff07 19 int no_color;
trmontgomery 4:cdc54191ff07 20 int current_item2 = 0;
trmontgomery 4:cdc54191ff07 21
trmontgomery 4:cdc54191ff07 22
trmontgomery 4:cdc54191ff07 23 /**
trmontgomery 4:cdc54191ff07 24 * Given the game inputs, determine what kind of update needs to happen.
trmontgomery 4:cdc54191ff07 25 * Possbile return values are defined below.
trmontgomery 4:cdc54191ff07 26 */
trmontgomery 4:cdc54191ff07 27 #define NO_ACTION 0
trmontgomery 4:cdc54191ff07 28 #define CHANGE_OPTION 1
trmontgomery 4:cdc54191ff07 29 #define SELECT 2
trmontgomery 4:cdc54191ff07 30
trmontgomery 4:cdc54191ff07 31 int get_screen_action(GameInputs inputs)
trmontgomery 4:cdc54191ff07 32 {
trmontgomery 4:cdc54191ff07 33 if (!inputs.b1){
trmontgomery 4:cdc54191ff07 34 return CHANGE_OPTION;
trmontgomery 4:cdc54191ff07 35 } if (!inputs.b2){
trmontgomery 4:cdc54191ff07 36 return SELECT;
trmontgomery 4:cdc54191ff07 37 }
trmontgomery 4:cdc54191ff07 38 return NO_ACTION;
trmontgomery 4:cdc54191ff07 39 }
trmontgomery 4:cdc54191ff07 40
trmontgomery 4:cdc54191ff07 41
trmontgomery 4:cdc54191ff07 42 #define NO_RESULT 0
trmontgomery 4:cdc54191ff07 43 #define FULL_DRAW 2
trmontgomery 4:cdc54191ff07 44 int update_screen(int action)
trmontgomery 4:cdc54191ff07 45 {
trmontgomery 4:cdc54191ff07 46 switch(action)
trmontgomery 4:cdc54191ff07 47 {
trmontgomery 4:cdc54191ff07 48 case CHANGE_OPTION:
trmontgomery 4:cdc54191ff07 49 //if button 1 pressed move to next menu item
trmontgomery 4:cdc54191ff07 50 current_item2 = current_item2++;
trmontgomery 4:cdc54191ff07 51 break;
trmontgomery 4:cdc54191ff07 52 case SELECT:
trmontgomery 4:cdc54191ff07 53 if (current_item2%2 == 0) {//Start game
trmontgomery 4:cdc54191ff07 54 yes = true;
trmontgomery 4:cdc54191ff07 55 } else if (current_item2%2 == 1){ //Quit (screen cut to black)
trmontgomery 4:cdc54191ff07 56 no = true;
trmontgomery 4:cdc54191ff07 57 }
trmontgomery 4:cdc54191ff07 58 break;
trmontgomery 4:cdc54191ff07 59 }
trmontgomery 4:cdc54191ff07 60 return NO_RESULT;
trmontgomery 4:cdc54191ff07 61 }
trmontgomery 4:cdc54191ff07 62
trmontgomery 4:cdc54191ff07 63 /**
trmontgomery 4:cdc54191ff07 64 * Entry point for frame drawing. This should be called once per iteration of
trmontgomery 4:cdc54191ff07 65 * the game loop. This draws all tiles on the screen, followed by the status
trmontgomery 4:cdc54191ff07 66 * bars. Unless init is nonzero, this function will optimize drawing by only
trmontgomery 4:cdc54191ff07 67 * drawing tiles that have changed from the previous frame.
trmontgomery 4:cdc54191ff07 68 */
trmontgomery 4:cdc54191ff07 69 void draw_screen(int init)
trmontgomery 4:cdc54191ff07 70 {
trmontgomery 4:cdc54191ff07 71
trmontgomery 4:cdc54191ff07 72 if (current_item2%2 == 0){
trmontgomery 4:cdc54191ff07 73 yes_color = GREEN;
trmontgomery 4:cdc54191ff07 74 } else if (current_item2%2 == 1){
trmontgomery 4:cdc54191ff07 75 no_color = GREEN;
trmontgomery 4:cdc54191ff07 76 }
trmontgomery 4:cdc54191ff07 77
trmontgomery 4:cdc54191ff07 78 uLCD.locate(1,9);
trmontgomery 4:cdc54191ff07 79 uLCD.color(yes_color);
trmontgomery 4:cdc54191ff07 80 uLCD.printf("YES");
trmontgomery 4:cdc54191ff07 81
trmontgomery 4:cdc54191ff07 82 uLCD.locate(1,10);
trmontgomery 4:cdc54191ff07 83 uLCD.color(no_color);
trmontgomery 4:cdc54191ff07 84 uLCD.printf("NO");
trmontgomery 4:cdc54191ff07 85
trmontgomery 4:cdc54191ff07 86 yes_color = BLACK;
trmontgomery 4:cdc54191ff07 87 no_color = BLACK;
trmontgomery 4:cdc54191ff07 88 }
trmontgomery 4:cdc54191ff07 89
trmontgomery 4:cdc54191ff07 90 /**
trmontgomery 4:cdc54191ff07 91 * Initialize the main world map. Add walls around the edges, interior chambers,
trmontgomery 4:cdc54191ff07 92 * and plants in the background so you can see motion.
trmontgomery 4:cdc54191ff07 93 */
trmontgomery 4:cdc54191ff07 94 void init_screen(int lives)
trmontgomery 4:cdc54191ff07 95 {
trmontgomery 4:cdc54191ff07 96 uLCD.locate(1,5);
trmontgomery 4:cdc54191ff07 97 //draw pink rectangle on whole screen
trmontgomery 4:cdc54191ff07 98 uLCD.filled_rectangle(0, 128, 128, 80, 0xFFFFFF);
trmontgomery 4:cdc54191ff07 99 // write title
trmontgomery 4:cdc54191ff07 100 uLCD.textbackground_color(0xFFFFFF);
trmontgomery 4:cdc54191ff07 101 uLCD.color(BLACK);
trmontgomery 4:cdc54191ff07 102 uLCD.printf("GAME OVER!");
trmontgomery 4:cdc54191ff07 103
trmontgomery 4:cdc54191ff07 104 if (current_item2%2 == 0){
trmontgomery 4:cdc54191ff07 105 yes_color = RED;
trmontgomery 4:cdc54191ff07 106 } else if (current_item2%2 == 1){
trmontgomery 4:cdc54191ff07 107 no_color = RED;
trmontgomery 4:cdc54191ff07 108 }
trmontgomery 4:cdc54191ff07 109
trmontgomery 4:cdc54191ff07 110 uLCD.locate(1,7);
trmontgomery 4:cdc54191ff07 111 uLCD.printf("Continue Game?");
trmontgomery 4:cdc54191ff07 112
trmontgomery 4:cdc54191ff07 113 uLCD.locate(1,8);
trmontgomery 4:cdc54191ff07 114 char str[30];
trmontgomery 4:cdc54191ff07 115 sprintf(str, "%d lives left.", lives);
trmontgomery 4:cdc54191ff07 116 uLCD.printf(str);
trmontgomery 4:cdc54191ff07 117
trmontgomery 4:cdc54191ff07 118 uLCD.locate(1,9);
trmontgomery 4:cdc54191ff07 119 uLCD.color(yes_color);
trmontgomery 4:cdc54191ff07 120 uLCD.printf("YES");
trmontgomery 4:cdc54191ff07 121
trmontgomery 4:cdc54191ff07 122 uLCD.locate(1,10);
trmontgomery 4:cdc54191ff07 123 uLCD.color(no_color);
trmontgomery 4:cdc54191ff07 124 uLCD.printf("NO");
trmontgomery 4:cdc54191ff07 125
trmontgomery 4:cdc54191ff07 126 }
trmontgomery 4:cdc54191ff07 127
trmontgomery 4:cdc54191ff07 128 /**
trmontgomery 4:cdc54191ff07 129 * Program entry point! This is where it all begins.
trmontgomery 4:cdc54191ff07 130 * This function orchestrates all the parts of the game. Most of your
trmontgomery 4:cdc54191ff07 131 * implementation should be elsewhere - this holds the game loop, and should
trmontgomery 4:cdc54191ff07 132 * read like a road map for the rest of the code.
trmontgomery 4:cdc54191ff07 133 */
trmontgomery 4:cdc54191ff07 134 int gameover(int lives)
trmontgomery 4:cdc54191ff07 135 {
trmontgomery 4:cdc54191ff07 136 // Initialize the maps
trmontgomery 4:cdc54191ff07 137 init_screen(lives);
trmontgomery 4:cdc54191ff07 138
trmontgomery 4:cdc54191ff07 139 // Initial drawing
trmontgomery 4:cdc54191ff07 140 draw_screen(true);
trmontgomery 4:cdc54191ff07 141
trmontgomery 4:cdc54191ff07 142 // Main game loop
trmontgomery 4:cdc54191ff07 143 while(1)
trmontgomery 4:cdc54191ff07 144 {
trmontgomery 4:cdc54191ff07 145 // Timer to measure game update speed
trmontgomery 4:cdc54191ff07 146 Timer t; t.start();
trmontgomery 4:cdc54191ff07 147
trmontgomery 4:cdc54191ff07 148 // Actually do the game update:
trmontgomery 4:cdc54191ff07 149 // 1. Read inputs
trmontgomery 4:cdc54191ff07 150 GameInputs in = read_inputs();
trmontgomery 4:cdc54191ff07 151 // 2. Determine action (get_action)
trmontgomery 4:cdc54191ff07 152 int a = get_screen_action(in);
trmontgomery 4:cdc54191ff07 153 // 3. Update game (update_game)
trmontgomery 4:cdc54191ff07 154 int u = update_screen(a);
trmontgomery 4:cdc54191ff07 155 // 4. Draw frame (draw_game)
trmontgomery 4:cdc54191ff07 156 draw_screen(u);
trmontgomery 4:cdc54191ff07 157
trmontgomery 4:cdc54191ff07 158 //check for start
trmontgomery 4:cdc54191ff07 159 if (yes){
trmontgomery 4:cdc54191ff07 160 return 1;
trmontgomery 4:cdc54191ff07 161 }else if (no){
trmontgomery 4:cdc54191ff07 162 return 0;
trmontgomery 4:cdc54191ff07 163 }
trmontgomery 4:cdc54191ff07 164
trmontgomery 4:cdc54191ff07 165
trmontgomery 4:cdc54191ff07 166 // 5. Frame delay
trmontgomery 4:cdc54191ff07 167 t.stop();
trmontgomery 4:cdc54191ff07 168 int dt = t.read_ms();
trmontgomery 4:cdc54191ff07 169 if (dt < 500) wait_ms(500 - dt);
trmontgomery 4:cdc54191ff07 170 }
trmontgomery 4:cdc54191ff07 171 }