ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Thu May 14 03:53:16 2020 +0000
Revision:
18:6be4c3c94a3d
Parent:
17:67dbdfcdcec2
Child:
19:6d9721ffc078
fixed bugs regarding car lanes, started fixing bugs regarding safety lanes

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 16:8a65cccd9685 40 void GraphicEngine::drawFirstSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 41 {
el19tb 16:8a65cccd9685 42 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lanes_one);
el19tb 16:8a65cccd9685 43 }
el19tb 16:8a65cccd9685 44
el19tb 16:8a65cccd9685 45 void GraphicEngine::drawSecondSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 46 {
el19tb 16:8a65cccd9685 47 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lane_two);
el19tb 16:8a65cccd9685 48 )
el19tb 16:8a65cccd9685 49
el19tb 15:b15bf9357cd9 50 // this is just going to be white blocks
el19tb 15:b15bf9357cd9 51 // road == '.'
el19tb 15:b15bf9357cd9 52 void GraphhicEngine::drawRoads(int row)
el19tb 15:b15bf9357cd9 53 {
el19tb 15:b15bf9357cd9 54 // draw across the screen width
el19tb 15:b15bf9357cd9 55 for(int a = 0; a < 22; a++){
el19tb 15:b15bf9357cd9 56 showEachRoad(a, row); // x pos is the value of a
el19tb 15:b15bf9357cd9 57 }
el19tb 15:b15bf9357cd9 58 }
el19tb 15:b15bf9357cd9 59
el19tb 15:b15bf9357cd9 60 void GraphicEngine::showEachRoad(int x, int row)
el19tb 15:b15bf9357cd9 61 {
el19tb 15:b15bf9357cd9 62 lcd.drawSprite(x, 48 - 4*row,4, 4, (int *)road);
el19tb 15:b15bf9357cd9 63 }
el19tb 15:b15bf9357cd9 64
el19tb 4:aae7f8d4ab78 65 void GraphicEngine::showCar(Car *car){
el19tb 5:6e3afee7eac3 66 // safety lane
el19tb 5:6e3afee7eac3 67 lcd.drawRect(0, 48 - 4, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 68 lcd.drawRect(0, 48 - 4*6, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 69
el19tb 15:b15bf9357cd9 70 // draw to screen0
el19tb 5:6e3afee7eac3 71 // create an enum to determine the vehicle type
el19tb 7:1dce07fd0867 72 for(int y = 0; y < 4; y++){
el19tb 5:6e3afee7eac3 73 showIndividualCar(&car[y]);
el19tb 5:6e3afee7eac3 74 }
el19tb 5:6e3afee7eac3 75 }
el19tb 5:6e3afee7eac3 76
el19tb 5:6e3afee7eac3 77 void GraphicEngine::showIndividualCar(Car *car){
el19tb 5:6e3afee7eac3 78 DrawCar temp_car;
el19tb 5:6e3afee7eac3 79
el19tb 5:6e3afee7eac3 80 temp_car.x = car->vehicle.x;
el19tb 5:6e3afee7eac3 81 temp_car.y = car->vehicle.y;
el19tb 5:6e3afee7eac3 82 temp_car.width = car->vehicle.width;
el19tb 5:6e3afee7eac3 83 temp_car.height = car->vehicle.height;
el19tb 5:6e3afee7eac3 84
el19tb 5:6e3afee7eac3 85 displayCar(temp_car);
el19tb 5:6e3afee7eac3 86 }
el19tb 5:6e3afee7eac3 87
el19tb 17:67dbdfcdcec2 88 void GraphicEngine::showWater(Water *water)
el19tb 17:67dbdfcdcec2 89 {
el19tb 17:67dbdfcdcec2 90 for(int i = 0; i < 22; i++)
el19tb 17:67dbdfcdcec2 91 {
el19tb 17:67dbdfcdcec2 92 showIndividualWater(&water[i]);
el19tb 17:67dbdfcdcec2 93 }
el19tb 17:67dbdfcdcec2 94 }
el19tb 17:67dbdfcdcec2 95
el19tb 17:67dbdfcdcec2 96 void GraphicEngine::showIndividualWater(Water *water)
el19tb 17:67dbdfcdcec2 97 {
el19tb 17:67dbdfcdcec2 98 // POTENTIAL BUG, add break later
el19tb 17:67dbdfcdcec2 99 switch(water->sprite){
el19tb 17:67dbdfcdcec2 100 case 'F':
el19tb 17:67dbdfcdcec2 101 displayFirstWater(water);
el19tb 17:67dbdfcdcec2 102 case 'S':
el19tb 17:67dbdfcdcec2 103 displaySecondWater(water);
el19tb 17:67dbdfcdcec2 104 case 'T':
el19tb 17:67dbdfcdcec2 105 displayThirdWater(water);
el19tb 17:67dbdfcdcec2 106 }
el19tb 17:67dbdfcdcec2 107 }
el19tb 17:67dbdfcdcec2 108
el19tb 17:67dbdfcdcec2 109 // x is the offset in the for loop, y is the row number
el19tb 17:67dbdfcdcec2 110 void GraphicEngine::displayFirstWater(Water &waterobj)
el19tb 17:67dbdfcdcec2 111 {
el19tb 17:67dbdfcdcec2 112 lcd.drawSprite(waterobj.x,48 - 4*waterobj.y, 4, 4, (int *)first_water);
el19tb 17:67dbdfcdcec2 113 }
el19tb 17:67dbdfcdcec2 114
el19tb 17:67dbdfcdcec2 115 // x is the offset in the for loop, y is the row number
el19tb 17:67dbdfcdcec2 116 void GraphicEngine::displaySecondWater(Water &waterobj)
el19tb 17:67dbdfcdcec2 117 {
el19tb 17:67dbdfcdcec2 118 lcd.drawSprite(waterobj.x,48 - 4*waterobj.y, 4, 4, (int *)second_water);
el19tb 17:67dbdfcdcec2 119 }
el19tb 17:67dbdfcdcec2 120
el19tb 17:67dbdfcdcec2 121 // x is the offset in the for loop, y is the row number
el19tb 17:67dbdfcdcec2 122 void GraphicEngine::displayThirdWater(Water &waterobj)
el19tb 17:67dbdfcdcec2 123 {
el19tb 17:67dbdfcdcec2 124 lcd.drawSprite(waterobj.x,48 - 4*waterobj.y, 4, 4, (int *)third_water);
el19tb 17:67dbdfcdcec2 125 }
el19tb 13:cd6d2f999057 126
el19tb 14:6fe667ec957e 127 void GraphicEngine::drawVehicleSprites(char obj, int x, int y, int rows, int cols)
el19tb 13:cd6d2f999057 128 {
el19tb 13:cd6d2f999057 129 switch(obj)
el19tb 13:cd6d2f999057 130 {
el19tb 13:cd6d2f999057 131 case 'L':
el19tb 13:cd6d2f999057 132 lcd.drawSprite(x, y, rows, cols, (int *)left_racer);
el19tb 13:cd6d2f999057 133
el19tb 13:cd6d2f999057 134 case 'R' :
el19tb 13:cd6d2f999057 135 lcd.drawSprite(x, y, rows, cols, (int *)right_racer);
el19tb 13:cd6d2f999057 136
el19tb 13:cd6d2f999057 137 case 'B':
el19tb 13:cd6d2f999057 138 lcd.drawSprite(x, y, rows, cols, (int *)bus);
el19tb 13:cd6d2f999057 139
el19tb 13:cd6d2f999057 140 case 'N':
el19tb 13:cd6d2f999057 141 lcd.drawSprite(x, y, rows, cols, (int *)right_normal);
el19tb 13:cd6d2f999057 142
el19tb 13:cd6d2f999057 143 case 'X':
el19tb 13:cd6d2f999057 144 lcd.drawSprite(x, y, rows, cols, (int *)left_normal);
el19tb 13:cd6d2f999057 145 }
el19tb 13:cd6d2f999057 146 }
el19tb 13:cd6d2f999057 147
el19tb 14:6fe667ec957e 148
el19tb 14:6fe667ec957e 149 // water = ','
el19tb 14:6fe667ec957e 150 void GraphicEngine::drawWater(char water, int x, int y, int row, in col)
el19tb 14:6fe667ec957e 151 {
el19tb 14:6fe667ec957e 152 int rand_water = 0;
el19tb 14:6fe667ec957e 153 rand_water = (rand() % 3) + 1;
el19tb 14:6fe667ec957e 154
el19tb 15:b15bf9357cd9 155 // for design purposes the water will have different sprites
el19tb 14:6fe667ec957e 156 switch(rand_water)
el19tb 14:6fe667ec957e 157 {
el19tb 15:b15bf9357cd9 158 case 1:
el19tb 15:b15bf9357cd9 159 lcd.drawSprite(x, y, rows, cols, (int *)first_water);
el19tb 15:b15bf9357cd9 160
el19tb 15:b15bf9357cd9 161 case 2:
el19tb 15:b15bf9357cd9 162 lcd.drawSprite(x, y, rows, cols, (int *)second_water);
el19tb 15:b15bf9357cd9 163
el19tb 15:b15bf9357cd9 164 case 3:
el19tb 15:b15bf9357cd9 165 lcd.drawSprite(x, y, rows, cols, (int *)third_water);
el19tb 15:b15bf9357cd9 166 }
el19tb 14:6fe667ec957e 167 }
el19tb 13:cd6d2f999057 168
el19tb 15:b15bf9357cd9 169 void GraphicEngine::displayCar(DrawCar &size)
el19tb 15:b15bf9357cd9 170 {
el19tb 8:52794de935b2 171 lcd.drawRect(size.x, size.y, size.width, size.height, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 172 }
el19tb 5:6e3afee7eac3 173
el19tb 18:6be4c3c94a3d 174 void GraphicEngine::getRoadObjects(const std::vector<Background>& road_lanes)
el19tb 18:6be4c3c94a3d 175 {
el19tb 18:6be4c3c94a3d 176 DrawRoad road;
el19tb 18:6be4c3c94a3d 177
el19tb 18:6be4c3c94a3d 178 for(unsigned int i = 0; i < road_lanes.size(); i++)
el19tb 18:6be4c3c94a3d 179 {
el19tb 18:6be4c3c94a3d 180 road.x = road_lanes[i].x;
el19tb 18:6be4c3c94a3d 181 road.row = road_lanes[i].row;
el19tb 18:6be4c3c94a3d 182 drawIndividualRoadObj(road);
el19tb 18:6be4c3c94a3d 183 }
el19tb 18:6be4c3c94a3d 184 }
el19tb 18:6be4c3c94a3d 185
el19tb 18:6be4c3c94a3d 186 void GraphicEngine::drawIndividualRoadObj(DrawRoad &obj)
el19tb 18:6be4c3c94a3d 187 {
el19tb 18:6be4c3c94a3d 188 lcd.drawSprite(obj.x, 48 - 4*obj.y, 4, 4, (int *) road);
el19tb 18:6be4c3c94a3d 189 }
el19tb 18:6be4c3c94a3d 190
el19tb 5:6e3afee7eac3 191 void GraphicEngine::printTest(){
el19tb 8:52794de935b2 192 lcd.printString("SQUISHED", 1, 1);
el19tb 8:52794de935b2 193 }
el19tb 8:52794de935b2 194
el19tb 8:52794de935b2 195 void GraphicEngine::print(){
el19tb 8:52794de935b2 196 lcd.printString("DROWNED",1,1);
el19tb 3:648c9d5001be 197 }
el19tb 3:648c9d5001be 198
el19tb 3:648c9d5001be 199 void GraphicEngine::contrast(){
el19tb 3:648c9d5001be 200 lcd.setContrast(0.4);
el19tb 3:648c9d5001be 201 }
el19tb 3:648c9d5001be 202
el19tb 3:648c9d5001be 203 void GraphicEngine::clear(){
el19tb 3:648c9d5001be 204 lcd.clear();
el19tb 3:648c9d5001be 205 }
el19tb 3:648c9d5001be 206
el19tb 3:648c9d5001be 207 void GraphicEngine::refresh(){
el19tb 3:648c9d5001be 208 lcd.refresh();
el19tb 3:648c9d5001be 209 }
el19tb 3:648c9d5001be 210
el19tb 3:648c9d5001be 211 void GraphicEngine::backLightOn(){
el19tb 3:648c9d5001be 212 lcd.backLightOn();
el19tb 3:648c9d5001be 213 }