ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Thu May 14 05:52:50 2020 +0000
Revision:
19:6d9721ffc078
Parent:
18:6be4c3c94a3d
Child:
22:17ea297c19b5
fixed bugs for water, safety, and and car lanes, made the water mvoe, improved design

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19tb 3:648c9d5001be 1 #include "GraphicEngine.h"
el19tb 3:648c9d5001be 2
el19tb 3:648c9d5001be 3 N5110 lcd;
el19tb 3:648c9d5001be 4
el19tb 4:aae7f8d4ab78 5 // TO DO:
el19tb 4:aae7f8d4ab78 6 // -> make multiple lanes of cars (first manually then automatically)
el19tb 4:aae7f8d4ab78 7 // -> make one lane go other direction
el19tb 4:aae7f8d4ab78 8 // -> make a safety lane
el19tb 4:aae7f8d4ab78 9 // -> make a logs
el19tb 4:aae7f8d4ab78 10 // -> make turtles
el19tb 4:aae7f8d4ab78 11 // -> make the ocean (if collision with ocean then dead)
el19tb 4:aae7f8d4ab78 12 // -> make multiple lives
el19tb 4:aae7f8d4ab78 13 // -> point system
el19tb 4:aae7f8d4ab78 14 // -> make the sprite images
el19tb 4:aae7f8d4ab78 15 // -> make background object (sprite of entire screen)
el19tb 4:aae7f8d4ab78 16 // -> make menu screen
el19tb 4:aae7f8d4ab78 17 // -> collision
el19tb 4:aae7f8d4ab78 18 // -> make sprite of safety lanes
el19tb 4:aae7f8d4ab78 19 // -> make snake object
el19tb 5:6e3afee7eac3 20 // -> make turtles disappear after a certain time
el19tb 4:aae7f8d4ab78 21 // BONUS:
el19tb 4:aae7f8d4ab78 22 // --> make multiple levels
el19tb 4:aae7f8d4ab78 23 // --> time constraint
el19tb 5:6e3afee7eac3 24 // -> crocodile (level 3) only (jump on body)
el19tb 5:6e3afee7eac3 25 // -> snake on log (level 3)
el19tb 5:6e3afee7eac3 26
el19tb 5:6e3afee7eac3 27 GraphicEngine::GraphicEngine(Chicken *chicken){
el19tb 5:6e3afee7eac3 28 this->chick = chicken;
el19tb 5:6e3afee7eac3 29 }
el19tb 5:6e3afee7eac3 30
el19tb 5:6e3afee7eac3 31 void GraphicEngine::init(){
el19tb 5:6e3afee7eac3 32 lcd.init();
el19tb 5:6e3afee7eac3 33 }
el19tb 5:6e3afee7eac3 34
el19tb 5:6e3afee7eac3 35 void GraphicEngine::showChicken(){
el19tb 5:6e3afee7eac3 36 //fill the chicken with black color
el19tb 5:6e3afee7eac3 37 lcd.drawRect(chick->x, chick->y, chick->width, chick->width, FILL_BLACK);
el19tb 5:6e3afee7eac3 38 }
el19tb 4:aae7f8d4ab78 39
el19tb 19:6d9721ffc078 40 void GraphicEngine::createSafetyLanes(const std::vector<Safety>& safety_lane)
el19tb 19:6d9721ffc078 41 {
el19tb 19:6d9721ffc078 42 Safety temp;
el19tb 19:6d9721ffc078 43 for(unsigned int i = 0; i < safety_lane.size(); i++){
el19tb 19:6d9721ffc078 44 temp.x = safety_lane[i].x;
el19tb 19:6d9721ffc078 45 temp.row = safety_lane[i].row;
el19tb 19:6d9721ffc078 46 temp.c = safety_lane[i].c;
el19tb 19:6d9721ffc078 47
el19tb 19:6d9721ffc078 48 drawIndividualSafety(temp);
el19tb 19:6d9721ffc078 49 }
el19tb 19:6d9721ffc078 50 }
el19tb 19:6d9721ffc078 51
el19tb 19:6d9721ffc078 52 void GraphicEngine::drawIndividualSafety(&Safety lane_obj)
el19tb 19:6d9721ffc078 53 {
el19tb 19:6d9721ffc078 54 switch(lane_obj.c)
el19tb 19:6d9721ffc078 55 {
el19tb 19:6d9721ffc078 56 case 'K':
el19tb 19:6d9721ffc078 57 lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_one);
el19tb 19:6d9721ffc078 58 break;
el19tb 19:6d9721ffc078 59 case 'K':
el19tb 19:6d9721ffc078 60 lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_two);
el19tb 19:6d9721ffc078 61 break;
el19tb 19:6d9721ffc078 62 }
el19tb 19:6d9721ffc078 63 }
el19tb 19:6d9721ffc078 64
el19tb 16:8a65cccd9685 65 void GraphicEngine::drawFirstSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 66 {
el19tb 16:8a65cccd9685 67 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lanes_one);
el19tb 16:8a65cccd9685 68 }
el19tb 16:8a65cccd9685 69
el19tb 16:8a65cccd9685 70 void GraphicEngine::drawSecondSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 71 {
el19tb 16:8a65cccd9685 72 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lane_two);
el19tb 16:8a65cccd9685 73 )
el19tb 16:8a65cccd9685 74
el19tb 15:b15bf9357cd9 75 // this is just going to be white blocks
el19tb 15:b15bf9357cd9 76 // road == '.'
el19tb 15:b15bf9357cd9 77 void GraphhicEngine::drawRoads(int row)
el19tb 15:b15bf9357cd9 78 {
el19tb 15:b15bf9357cd9 79 // draw across the screen width
el19tb 15:b15bf9357cd9 80 for(int a = 0; a < 22; a++){
el19tb 15:b15bf9357cd9 81 showEachRoad(a, row); // x pos is the value of a
el19tb 15:b15bf9357cd9 82 }
el19tb 15:b15bf9357cd9 83 }
el19tb 15:b15bf9357cd9 84
el19tb 15:b15bf9357cd9 85 void GraphicEngine::showEachRoad(int x, int row)
el19tb 15:b15bf9357cd9 86 {
el19tb 15:b15bf9357cd9 87 lcd.drawSprite(x, 48 - 4*row,4, 4, (int *)road);
el19tb 15:b15bf9357cd9 88 }
el19tb 15:b15bf9357cd9 89
el19tb 4:aae7f8d4ab78 90 void GraphicEngine::showCar(Car *car){
el19tb 5:6e3afee7eac3 91 // safety lane
el19tb 5:6e3afee7eac3 92 lcd.drawRect(0, 48 - 4, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 93 lcd.drawRect(0, 48 - 4*6, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 94
el19tb 15:b15bf9357cd9 95 // draw to screen0
el19tb 5:6e3afee7eac3 96 // create an enum to determine the vehicle type
el19tb 7:1dce07fd0867 97 for(int y = 0; y < 4; y++){
el19tb 5:6e3afee7eac3 98 showIndividualCar(&car[y]);
el19tb 5:6e3afee7eac3 99 }
el19tb 5:6e3afee7eac3 100 }
el19tb 5:6e3afee7eac3 101
el19tb 5:6e3afee7eac3 102 void GraphicEngine::showIndividualCar(Car *car){
el19tb 5:6e3afee7eac3 103 DrawCar temp_car;
el19tb 5:6e3afee7eac3 104
el19tb 5:6e3afee7eac3 105 temp_car.x = car->vehicle.x;
el19tb 5:6e3afee7eac3 106 temp_car.y = car->vehicle.y;
el19tb 5:6e3afee7eac3 107 temp_car.width = car->vehicle.width;
el19tb 5:6e3afee7eac3 108 temp_car.height = car->vehicle.height;
el19tb 5:6e3afee7eac3 109
el19tb 5:6e3afee7eac3 110 displayCar(temp_car);
el19tb 5:6e3afee7eac3 111 }
el19tb 5:6e3afee7eac3 112
el19tb 17:67dbdfcdcec2 113 void GraphicEngine::showWater(Water *water)
el19tb 17:67dbdfcdcec2 114 {
el19tb 17:67dbdfcdcec2 115 for(int i = 0; i < 22; i++)
el19tb 17:67dbdfcdcec2 116 {
el19tb 17:67dbdfcdcec2 117 showIndividualWater(&water[i]);
el19tb 17:67dbdfcdcec2 118 }
el19tb 17:67dbdfcdcec2 119 }
el19tb 17:67dbdfcdcec2 120
el19tb 17:67dbdfcdcec2 121 void GraphicEngine::showIndividualWater(Water *water)
el19tb 17:67dbdfcdcec2 122 {
el19tb 17:67dbdfcdcec2 123 // POTENTIAL BUG, add break later
el19tb 17:67dbdfcdcec2 124 switch(water->sprite){
el19tb 17:67dbdfcdcec2 125 case 'F':
el19tb 17:67dbdfcdcec2 126 displayFirstWater(water);
el19tb 17:67dbdfcdcec2 127 case 'S':
el19tb 17:67dbdfcdcec2 128 displaySecondWater(water);
el19tb 17:67dbdfcdcec2 129 case 'T':
el19tb 17:67dbdfcdcec2 130 displayThirdWater(water);
el19tb 17:67dbdfcdcec2 131 }
el19tb 17:67dbdfcdcec2 132 }
el19tb 17:67dbdfcdcec2 133
el19tb 19:6d9721ffc078 134 void GraphicEngine::drawWater(std::vector<Water> &water_lane)
el19tb 17:67dbdfcdcec2 135 {
el19tb 19:6d9721ffc078 136 Water temp;
el19tb 19:6d9721ffc078 137 for(unsigned int i = 0; i < water_lane.size(); i++)
el19tb 19:6d9721ffc078 138 {
el19tb 19:6d9721ffc078 139 temp.x = water_lane[i].x;
el19tb 19:6d9721ffc078 140 temp.row = water_lane[i].row;
el19tb 19:6d9721ffc078 141 temp.char = water_lane[i].c;
el19tb 19:6d9721ffc078 142
el19tb 19:6d9721ffc078 143 drawIndividualWater(&temp);
el19tb 19:6d9721ffc078 144 }
el19tb 17:67dbdfcdcec2 145 }
el19tb 17:67dbdfcdcec2 146
el19tb 19:6d9721ffc078 147 void GraphicEngine::showIndividualWater(Water &temp)
el19tb 17:67dbdfcdcec2 148 {
el19tb 19:6d9721ffc078 149 switch(temp.c)
el19tb 19:6d9721ffc078 150 {
el19tb 19:6d9721ffc078 151 case 'F':
el19tb 19:6d9721ffc078 152 lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)first_water);
el19tb 19:6d9721ffc078 153 break;
el19tb 19:6d9721ffc078 154 case 'S':
el19tb 19:6d9721ffc078 155 lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)second_water);
el19tb 19:6d9721ffc078 156 break;
el19tb 19:6d9721ffc078 157 case 'T':
el19tb 19:6d9721ffc078 158 lcd.drawSprite(temp.x, 48 - 4*temp.y, 4, 4, (int *)third_water);
el19tb 19:6d9721ffc078 159 break;
el19tb 19:6d9721ffc078 160 }
el19tb 17:67dbdfcdcec2 161 }
el19tb 13:cd6d2f999057 162
el19tb 14:6fe667ec957e 163 void GraphicEngine::drawVehicleSprites(char obj, int x, int y, int rows, int cols)
el19tb 13:cd6d2f999057 164 {
el19tb 13:cd6d2f999057 165 switch(obj)
el19tb 13:cd6d2f999057 166 {
el19tb 13:cd6d2f999057 167 case 'L':
el19tb 13:cd6d2f999057 168 lcd.drawSprite(x, y, rows, cols, (int *)left_racer);
el19tb 13:cd6d2f999057 169
el19tb 13:cd6d2f999057 170 case 'R' :
el19tb 13:cd6d2f999057 171 lcd.drawSprite(x, y, rows, cols, (int *)right_racer);
el19tb 13:cd6d2f999057 172
el19tb 13:cd6d2f999057 173 case 'B':
el19tb 13:cd6d2f999057 174 lcd.drawSprite(x, y, rows, cols, (int *)bus);
el19tb 13:cd6d2f999057 175
el19tb 13:cd6d2f999057 176 case 'N':
el19tb 13:cd6d2f999057 177 lcd.drawSprite(x, y, rows, cols, (int *)right_normal);
el19tb 13:cd6d2f999057 178
el19tb 13:cd6d2f999057 179 case 'X':
el19tb 13:cd6d2f999057 180 lcd.drawSprite(x, y, rows, cols, (int *)left_normal);
el19tb 13:cd6d2f999057 181 }
el19tb 13:cd6d2f999057 182 }
el19tb 13:cd6d2f999057 183
el19tb 14:6fe667ec957e 184
el19tb 14:6fe667ec957e 185 // water = ','
el19tb 14:6fe667ec957e 186 void GraphicEngine::drawWater(char water, int x, int y, int row, in col)
el19tb 14:6fe667ec957e 187 {
el19tb 14:6fe667ec957e 188 int rand_water = 0;
el19tb 14:6fe667ec957e 189 rand_water = (rand() % 3) + 1;
el19tb 14:6fe667ec957e 190
el19tb 15:b15bf9357cd9 191 // for design purposes the water will have different sprites
el19tb 14:6fe667ec957e 192 switch(rand_water)
el19tb 14:6fe667ec957e 193 {
el19tb 15:b15bf9357cd9 194 case 1:
el19tb 15:b15bf9357cd9 195 lcd.drawSprite(x, y, rows, cols, (int *)first_water);
el19tb 15:b15bf9357cd9 196
el19tb 15:b15bf9357cd9 197 case 2:
el19tb 15:b15bf9357cd9 198 lcd.drawSprite(x, y, rows, cols, (int *)second_water);
el19tb 15:b15bf9357cd9 199
el19tb 15:b15bf9357cd9 200 case 3:
el19tb 15:b15bf9357cd9 201 lcd.drawSprite(x, y, rows, cols, (int *)third_water);
el19tb 15:b15bf9357cd9 202 }
el19tb 14:6fe667ec957e 203 }
el19tb 13:cd6d2f999057 204
el19tb 15:b15bf9357cd9 205 void GraphicEngine::displayCar(DrawCar &size)
el19tb 15:b15bf9357cd9 206 {
el19tb 8:52794de935b2 207 lcd.drawRect(size.x, size.y, size.width, size.height, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 208 }
el19tb 5:6e3afee7eac3 209
el19tb 18:6be4c3c94a3d 210 void GraphicEngine::getRoadObjects(const std::vector<Background>& road_lanes)
el19tb 18:6be4c3c94a3d 211 {
el19tb 18:6be4c3c94a3d 212 DrawRoad road;
el19tb 18:6be4c3c94a3d 213
el19tb 18:6be4c3c94a3d 214 for(unsigned int i = 0; i < road_lanes.size(); i++)
el19tb 18:6be4c3c94a3d 215 {
el19tb 18:6be4c3c94a3d 216 road.x = road_lanes[i].x;
el19tb 18:6be4c3c94a3d 217 road.row = road_lanes[i].row;
el19tb 18:6be4c3c94a3d 218 drawIndividualRoadObj(road);
el19tb 18:6be4c3c94a3d 219 }
el19tb 18:6be4c3c94a3d 220 }
el19tb 18:6be4c3c94a3d 221
el19tb 18:6be4c3c94a3d 222 void GraphicEngine::drawIndividualRoadObj(DrawRoad &obj)
el19tb 18:6be4c3c94a3d 223 {
el19tb 18:6be4c3c94a3d 224 lcd.drawSprite(obj.x, 48 - 4*obj.y, 4, 4, (int *) road);
el19tb 18:6be4c3c94a3d 225 }
el19tb 18:6be4c3c94a3d 226
el19tb 5:6e3afee7eac3 227 void GraphicEngine::printTest(){
el19tb 8:52794de935b2 228 lcd.printString("SQUISHED", 1, 1);
el19tb 8:52794de935b2 229 }
el19tb 8:52794de935b2 230
el19tb 8:52794de935b2 231 void GraphicEngine::print(){
el19tb 8:52794de935b2 232 lcd.printString("DROWNED",1,1);
el19tb 3:648c9d5001be 233 }
el19tb 3:648c9d5001be 234
el19tb 3:648c9d5001be 235 void GraphicEngine::contrast(){
el19tb 3:648c9d5001be 236 lcd.setContrast(0.4);
el19tb 3:648c9d5001be 237 }
el19tb 3:648c9d5001be 238
el19tb 3:648c9d5001be 239 void GraphicEngine::clear(){
el19tb 3:648c9d5001be 240 lcd.clear();
el19tb 3:648c9d5001be 241 }
el19tb 3:648c9d5001be 242
el19tb 3:648c9d5001be 243 void GraphicEngine::refresh(){
el19tb 3:648c9d5001be 244 lcd.refresh();
el19tb 3:648c9d5001be 245 }
el19tb 3:648c9d5001be 246
el19tb 3:648c9d5001be 247 void GraphicEngine::backLightOn(){
el19tb 3:648c9d5001be 248 lcd.backLightOn();
el19tb 3:648c9d5001be 249 }