Yang Meng / Mbed 2 deprecated 207_program

Dependencies:   mbed N5110

Committer:
2016110307
Date:
Sun May 05 15:54:36 2019 +0000
Revision:
5:17821d72fe85
Parent:
4:ed68b20e2075
Child:
6:13297af05b9b
add and change some information to make doxygen more clear

Who changed what in which revision?

UserRevisionLine numberNew contents of line
2016110307 0:97418ec4c37d 1 #ifndef CYLINDER_H
2016110307 0:97418ec4c37d 2 #define CYLINDER_H
2016110307 0:97418ec4c37d 3
2016110307 1:85ab0d979b57 4 #include "Bird.h"
2016110307 0:97418ec4c37d 5
2016110307 4:ed68b20e2075 6
2016110307 4:ed68b20e2075 7
2016110307 4:ed68b20e2075 8
2016110307 4:ed68b20e2075 9 /**
2016110307 4:ed68b20e2075 10 *@brief Data struct contains position data of barrier
2016110307 4:ed68b20e2075 11 */
2016110307 0:97418ec4c37d 12 struct Data {
2016110307 4:ed68b20e2075 13 int x1; /**< int for x1 value */
2016110307 4:ed68b20e2075 14 int x2; /**< int for x2 value */
2016110307 4:ed68b20e2075 15 int x3; /**< int for x3 value */
2016110307 4:ed68b20e2075 16 int height1; /**< int for height1 value */
2016110307 4:ed68b20e2075 17 int height2; /**< int for height2 value */
2016110307 4:ed68b20e2075 18 int height3; /**< int for height3 value */
2016110307 4:ed68b20e2075 19 int gap1; /**< int for gap1 value */
2016110307 4:ed68b20e2075 20 int gap2; /**< int for gap1 value */
2016110307 4:ed68b20e2075 21 int gap3; /**< int for gap3 value */
2016110307 0:97418ec4c37d 22 };
2016110307 0:97418ec4c37d 23
2016110307 4:ed68b20e2075 24
2016110307 5:17821d72fe85 25 /** Cylinder Class
2016110307 4:ed68b20e2075 26
2016110307 4:ed68b20e2075 27 *@brief Library to create the barrier
2016110307 4:ed68b20e2075 28 *@author Meng Yang
2016110307 4:ed68b20e2075 29 *@date May 2017
2016110307 4:ed68b20e2075 30
2016110307 4:ed68b20e2075 31 @code
2016110307 4:ed68b20e2075 32
2016110307 4:ed68b20e2075 33 #include "Cylinder.h"
2016110307 4:ed68b20e2075 34 #include "Bird.h"
2016110307 4:ed68b20e2075 35
2016110307 4:ed68b20e2075 36 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
2016110307 4:ed68b20e2075 37 Gamepad pad;
2016110307 4:ed68b20e2075 38 Bird bird;
2016110307 4:ed68b20e2075 39 Cylinder cylinder;
2016110307 4:ed68b20e2075 40
2016110307 4:ed68b20e2075 41 void init();
2016110307 4:ed68b20e2075 42 void welcome();
2016110307 4:ed68b20e2075 43 void play();
2016110307 4:ed68b20e2075 44 void reset();
2016110307 4:ed68b20e2075 45 void restart();
2016110307 4:ed68b20e2075 46
2016110307 4:ed68b20e2075 47 int y;
2016110307 4:ed68b20e2075 48 int a = 0;
2016110307 4:ed68b20e2075 49 int high_score;
2016110307 4:ed68b20e2075 50
2016110307 5:17821d72fe85 51 /*
2016110307 5:17821d72fe85 52 ELEC2645 Embedded Systems Project
2016110307 5:17821d72fe85 53 School of Electronic & Electrical Engineering
2016110307 5:17821d72fe85 54 University of Leeds
2016110307 5:17821d72fe85 55 Name: Mmeng Yang
2016110307 5:17821d72fe85 56 Username: el16ym@leeds.ac.uk
2016110307 5:17821d72fe85 57 Student ID Number: 201089063
2016110307 5:17821d72fe85 58 Date: 5th/May/2019
2016110307 5:17821d72fe85 59 */
2016110307 5:17821d72fe85 60
2016110307 4:ed68b20e2075 61 int main()
2016110307 4:ed68b20e2075 62 {
2016110307 4:ed68b20e2075 63
2016110307 4:ed68b20e2075 64 init();
2016110307 4:ed68b20e2075 65 welcome();
2016110307 4:ed68b20e2075 66 cylinder.select(lcd,pad);
2016110307 4:ed68b20e2075 67
2016110307 4:ed68b20e2075 68 while(1) {
2016110307 4:ed68b20e2075 69
2016110307 4:ed68b20e2075 70 play();
2016110307 4:ed68b20e2075 71
2016110307 4:ed68b20e2075 72 if(y >= 44) {
2016110307 4:ed68b20e2075 73 reset();
2016110307 4:ed68b20e2075 74 } if (y <= 2) {
2016110307 4:ed68b20e2075 75 reset();
2016110307 4:ed68b20e2075 76 }
2016110307 4:ed68b20e2075 77
2016110307 4:ed68b20e2075 78 wait(0.1);
2016110307 4:ed68b20e2075 79 }
2016110307 4:ed68b20e2075 80 }
2016110307 4:ed68b20e2075 81
2016110307 4:ed68b20e2075 82
2016110307 4:ed68b20e2075 83 void init()
2016110307 4:ed68b20e2075 84 {
2016110307 4:ed68b20e2075 85
2016110307 4:ed68b20e2075 86 lcd.init();
2016110307 4:ed68b20e2075 87 lcd.setContrast(0.5);
2016110307 4:ed68b20e2075 88 lcd.normalMode();
2016110307 4:ed68b20e2075 89 lcd.setBrightness(0.5);
2016110307 4:ed68b20e2075 90
2016110307 4:ed68b20e2075 91 pad.init();
2016110307 4:ed68b20e2075 92 bird.init();
2016110307 4:ed68b20e2075 93 cylinder.init();
2016110307 4:ed68b20e2075 94
2016110307 4:ed68b20e2075 95 }
2016110307 4:ed68b20e2075 96
2016110307 4:ed68b20e2075 97 void play()
2016110307 4:ed68b20e2075 98 {
2016110307 4:ed68b20e2075 99 lcd.clear();
2016110307 4:ed68b20e2075 100
2016110307 4:ed68b20e2075 101
2016110307 4:ed68b20e2075 102 cylinder.check();
2016110307 4:ed68b20e2075 103 cylinder.print_score(lcd);
2016110307 4:ed68b20e2075 104
2016110307 4:ed68b20e2075 105 bird.update(pad);
2016110307 4:ed68b20e2075 106 y = bird.get_y();
2016110307 4:ed68b20e2075 107
2016110307 4:ed68b20e2075 108 cylinder.draw(lcd);
2016110307 4:ed68b20e2075 109 bird.draw(lcd);
2016110307 4:ed68b20e2075 110 Data data = cylinder.get_data();
2016110307 4:ed68b20e2075 111
2016110307 4:ed68b20e2075 112 lcd.refresh();
2016110307 4:ed68b20e2075 113 if(y <= data.height1+1 | y >= data.height1 + data.gap1-4) {
2016110307 4:ed68b20e2075 114 if(data.x1 <= 4) {
2016110307 4:ed68b20e2075 115 reset();
2016110307 4:ed68b20e2075 116 }
2016110307 4:ed68b20e2075 117 }
2016110307 4:ed68b20e2075 118 if(y <= data.height2+1 | y >= data.height2 + data.gap2-4) {
2016110307 4:ed68b20e2075 119 if(data.x2 <= 4) {
2016110307 4:ed68b20e2075 120 reset();
2016110307 4:ed68b20e2075 121 }
2016110307 4:ed68b20e2075 122 }
2016110307 4:ed68b20e2075 123 if(y <= data.height3+1 | y >= data.height3 + data.gap3-4) {
2016110307 4:ed68b20e2075 124 if(data.x3 <= 4) {
2016110307 4:ed68b20e2075 125 reset();
2016110307 4:ed68b20e2075 126 }
2016110307 4:ed68b20e2075 127 }
2016110307 4:ed68b20e2075 128
2016110307 4:ed68b20e2075 129
2016110307 4:ed68b20e2075 130 cylinder.update();
2016110307 4:ed68b20e2075 131
2016110307 4:ed68b20e2075 132 wait(0.1);
2016110307 4:ed68b20e2075 133 }
2016110307 4:ed68b20e2075 134
2016110307 4:ed68b20e2075 135 void reset()
2016110307 4:ed68b20e2075 136 {
2016110307 4:ed68b20e2075 137 pad.init();
2016110307 4:ed68b20e2075 138 cylinder.init();
2016110307 4:ed68b20e2075 139 bird.init();
2016110307 4:ed68b20e2075 140 restart();
2016110307 4:ed68b20e2075 141
2016110307 4:ed68b20e2075 142 }
2016110307 4:ed68b20e2075 143
2016110307 4:ed68b20e2075 144 void welcome()
2016110307 4:ed68b20e2075 145 {
2016110307 4:ed68b20e2075 146 lcd.printString(" Flappy Bird ",0,1);
2016110307 4:ed68b20e2075 147 lcd.printString(" Press Start ",0,4);
2016110307 4:ed68b20e2075 148 lcd.refresh();
2016110307 4:ed68b20e2075 149 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
2016110307 4:ed68b20e2075 150 pad.leds_on();
2016110307 4:ed68b20e2075 151 wait(0.1);
2016110307 4:ed68b20e2075 152 pad.leds_off();
2016110307 4:ed68b20e2075 153 wait(0.1);
2016110307 4:ed68b20e2075 154 }
2016110307 4:ed68b20e2075 155 wait(0.2);
2016110307 4:ed68b20e2075 156 }
2016110307 4:ed68b20e2075 157
2016110307 4:ed68b20e2075 158 void restart()
2016110307 4:ed68b20e2075 159 {
2016110307 4:ed68b20e2075 160 bird.background(lcd);
2016110307 4:ed68b20e2075 161 lcd.clear();
2016110307 4:ed68b20e2075 162 high_score = cylinder.get_highest_score(a);
2016110307 4:ed68b20e2075 163 a = high_score;
2016110307 4:ed68b20e2075 164 cylinder.print_yourscore(lcd);
2016110307 4:ed68b20e2075 165 char buffer1[14];
2016110307 4:ed68b20e2075 166 sprintf(buffer1,"HighScore = %2d ",high_score);
2016110307 4:ed68b20e2075 167 lcd.printString(buffer1,0,0);
2016110307 4:ed68b20e2075 168 lcd.printString(" Press Start ",0,3);
2016110307 4:ed68b20e2075 169 lcd.printString(" to continue ",0,4);
2016110307 4:ed68b20e2075 170
2016110307 4:ed68b20e2075 171 lcd.refresh();
2016110307 4:ed68b20e2075 172 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
2016110307 4:ed68b20e2075 173 pad.leds_on();
2016110307 4:ed68b20e2075 174 wait(0.1);
2016110307 4:ed68b20e2075 175 pad.leds_off();
2016110307 4:ed68b20e2075 176 wait(0.1);
2016110307 4:ed68b20e2075 177 }
2016110307 4:ed68b20e2075 178 wait(0.2);
2016110307 4:ed68b20e2075 179 cylinder.select(lcd,pad);
2016110307 4:ed68b20e2075 180 }
2016110307 4:ed68b20e2075 181 @endcode
2016110307 4:ed68b20e2075 182 */
2016110307 4:ed68b20e2075 183
2016110307 0:97418ec4c37d 184 class Cylinder {
2016110307 0:97418ec4c37d 185 public:
2016110307 4:ed68b20e2075 186
2016110307 4:ed68b20e2075 187 /**
2016110307 4:ed68b20e2075 188 *@brief Initialise all the parameters of the barrier
2016110307 4:ed68b20e2075 189 */
2016110307 0:97418ec4c37d 190 void init();
2016110307 4:ed68b20e2075 191
2016110307 4:ed68b20e2075 192 /**
2016110307 4:ed68b20e2075 193 *@brief Draw two selections
2016110307 4:ed68b20e2075 194 *@param lcd, pad
2016110307 4:ed68b20e2075 195 *@details Use this method to use the functions within N5110.h and Gamepad.h file
2016110307 4:ed68b20e2075 196 */
2016110307 1:85ab0d979b57 197 void select(N5110 &lcd, Gamepad &pad);
2016110307 4:ed68b20e2075 198
2016110307 4:ed68b20e2075 199 /**
2016110307 4:ed68b20e2075 200 *@brief Draw the barriers
2016110307 4:ed68b20e2075 201 *@param lcd
2016110307 4:ed68b20e2075 202 *@details Use this method to use the functions within N5110.h file
2016110307 4:ed68b20e2075 203 */
2016110307 0:97418ec4c37d 204 void draw(N5110 &lcd);
2016110307 4:ed68b20e2075 205
2016110307 4:ed68b20e2075 206 /**
2016110307 5:17821d72fe85 207 *@brief update the position date of the barrier
2016110307 4:ed68b20e2075 208 */
2016110307 0:97418ec4c37d 209 void update();
2016110307 4:ed68b20e2075 210
2016110307 4:ed68b20e2075 211 /**
2016110307 4:ed68b20e2075 212 *@brief check the specific situation
2016110307 4:ed68b20e2075 213 */
2016110307 0:97418ec4c37d 214 void check();
2016110307 4:ed68b20e2075 215
2016110307 4:ed68b20e2075 216 /**
2016110307 4:ed68b20e2075 217 *@brief print score during playing
2016110307 4:ed68b20e2075 218 *@param lcd
2016110307 4:ed68b20e2075 219 *@details Use this method to use the functions within N5110.h file
2016110307 4:ed68b20e2075 220 */
2016110307 0:97418ec4c37d 221 void print_score(N5110 &lcd);
2016110307 4:ed68b20e2075 222
2016110307 4:ed68b20e2075 223 /**
2016110307 4:ed68b20e2075 224 *@brief print score when game over
2016110307 4:ed68b20e2075 225 *@param lcd
2016110307 4:ed68b20e2075 226 *@details Use this method to use the functions within N5110.h file
2016110307 4:ed68b20e2075 227 */
2016110307 0:97418ec4c37d 228 void print_yourscore(N5110 &lcd);
2016110307 4:ed68b20e2075 229
2016110307 4:ed68b20e2075 230 /**
2016110307 4:ed68b20e2075 231 *@brief get highest score
2016110307 4:ed68b20e2075 232 *@param high_score
2016110307 4:ed68b20e2075 233 *@returns The highest score
2016110307 4:ed68b20e2075 234 */
2016110307 0:97418ec4c37d 235 int get_highest_score(int high_score);
2016110307 4:ed68b20e2075 236
2016110307 4:ed68b20e2075 237 /**
2016110307 4:ed68b20e2075 238 *@brief get certain data of barriers
2016110307 4:ed68b20e2075 239 *@returns a struct contains position data of barriers
2016110307 4:ed68b20e2075 240 */
2016110307 0:97418ec4c37d 241 Data get_data();
2016110307 0:97418ec4c37d 242
2016110307 0:97418ec4c37d 243
2016110307 0:97418ec4c37d 244
2016110307 0:97418ec4c37d 245
2016110307 0:97418ec4c37d 246 private:
2016110307 0:97418ec4c37d 247 int _a;
2016110307 0:97418ec4c37d 248 int _b;
2016110307 0:97418ec4c37d 249 int _c;
2016110307 0:97418ec4c37d 250 int _x1;
2016110307 0:97418ec4c37d 251 int _x2;
2016110307 0:97418ec4c37d 252 int _x3;
2016110307 0:97418ec4c37d 253 int _height1;
2016110307 0:97418ec4c37d 254 int _height2;
2016110307 0:97418ec4c37d 255 int _height3;
2016110307 0:97418ec4c37d 256 int _gap1;
2016110307 0:97418ec4c37d 257 int _gap2;
2016110307 0:97418ec4c37d 258 int _gap3;
2016110307 0:97418ec4c37d 259 int _score;
2016110307 0:97418ec4c37d 260 int _yourscore;
2016110307 1:85ab0d979b57 261 int _state;
2016110307 1:85ab0d979b57 262 int _speed;
2016110307 1:85ab0d979b57 263 Bird _bird;
2016110307 0:97418ec4c37d 264 Data _data;
2016110307 0:97418ec4c37d 265
2016110307 1:85ab0d979b57 266
2016110307 0:97418ec4c37d 267 };
2016110307 0:97418ec4c37d 268
2016110307 0:97418ec4c37d 269 #endif
2016110307 0:97418ec4c37d 270
2016110307 0:97418ec4c37d 271