Uses accompanying Basket, Objects and Fruit libraries to create Fruit Basket game. If an object is caught, points are added; if an object in missed, a 'life' is lost.

Dependents:   Game_Controller_Project

Committer:
Nathanj94
Date:
Tue Apr 18 14:28:15 2017 +0000
Revision:
10:6605cd9d374b
Parent:
9:902b67101cdc
Child:
11:68e7c942f67b
changes based on changes in Objects

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathanj94 0:8d02400f792a 1 #include "Catch_Model.h"
Nathanj94 0:8d02400f792a 2
Nathanj94 0:8d02400f792a 3 Catch_Model::Catch_Model()
Nathanj94 0:8d02400f792a 4 {
Nathanj94 0:8d02400f792a 5
Nathanj94 0:8d02400f792a 6 }
Nathanj94 0:8d02400f792a 7
Nathanj94 0:8d02400f792a 8 Catch_Model::~Catch_Model()
Nathanj94 0:8d02400f792a 9 {
Nathanj94 0:8d02400f792a 10
Nathanj94 0:8d02400f792a 11 }
Nathanj94 0:8d02400f792a 12
Nathanj94 4:84e29254b988 13 void Catch_Model::init(int basket_y, int basket_width, int objects_speed, int lives)
Nathanj94 0:8d02400f792a 14 {
Nathanj94 0:8d02400f792a 15 _basket_y = basket_y;
Nathanj94 0:8d02400f792a 16 _basket_width = basket_width;
Nathanj94 1:43fbcc3584d6 17 _objects_speed = objects_speed;
Nathanj94 4:84e29254b988 18 _lives = lives;
Nathanj94 7:ec6dc66ee196 19 _delay = 1;
Nathanj94 1:43fbcc3584d6 20
Nathanj94 4:84e29254b988 21 basket.init(_basket_y, _basket_width);
Nathanj94 4:84e29254b988 22 objects.init(_objects_speed);
Nathanj94 0:8d02400f792a 23 }
Nathanj94 0:8d02400f792a 24
Nathanj94 0:8d02400f792a 25 void Catch_Model::input(Gamepad &pad)
Nathanj94 0:8d02400f792a 26 {
Nathanj94 0:8d02400f792a 27 _d = pad.get_direction();
Nathanj94 0:8d02400f792a 28 _mag = pad.get_mag();
Nathanj94 0:8d02400f792a 29 }
Nathanj94 0:8d02400f792a 30
Nathanj94 3:fc9133faec7a 31 void Catch_Model::update(N5110 &lcd, Gamepad &pad)
Nathanj94 0:8d02400f792a 32 {
Nathanj94 3:fc9133faec7a 33 check_basket_catch(lcd, pad);
Nathanj94 3:fc9133faec7a 34 check_basket_miss(lcd, pad);
Nathanj94 3:fc9133faec7a 35
Nathanj94 10:6605cd9d374b 36 basket.move_stick(_d, _mag);
Nathanj94 10:6605cd9d374b 37 basket.move_LR(pad);
Nathanj94 10:6605cd9d374b 38 objects.speed_select(pad);
Nathanj94 10:6605cd9d374b 39 objects.move();
Nathanj94 0:8d02400f792a 40 }
Nathanj94 0:8d02400f792a 41
Nathanj94 0:8d02400f792a 42 void Catch_Model::draw(N5110 &lcd)
Nathanj94 0:8d02400f792a 43 {
Nathanj94 4:84e29254b988 44 basket.draw(lcd);
Nathanj94 4:84e29254b988 45 objects.draw(lcd);
Nathanj94 4:84e29254b988 46 print_score(lcd);
Nathanj94 4:84e29254b988 47 print_lives(lcd);
Nathanj94 8:db24c475f64f 48 print_delay(lcd);
Nathanj94 2:8410e09b77aa 49 }
Nathanj94 2:8410e09b77aa 50
Nathanj94 3:fc9133faec7a 51 void Catch_Model::check_basket_catch(N5110 &lcd, Gamepad &pad)
Nathanj94 2:8410e09b77aa 52 {
Nathanj94 4:84e29254b988 53 int b_x_pos = basket.get_x();
Nathanj94 4:84e29254b988 54 int b_y_pos = basket.get_y();
Nathanj94 4:84e29254b988 55 int o_x_pos = objects.get_x();
Nathanj94 4:84e29254b988 56 int o_y_pos = objects.get_y();
Nathanj94 2:8410e09b77aa 57
Nathanj94 3:fc9133faec7a 58 if(
Nathanj94 3:fc9133faec7a 59 (o_y_pos >= b_y_pos) &&
Nathanj94 9:902b67101cdc 60 (o_x_pos >= b_x_pos) &&
Nathanj94 9:902b67101cdc 61 (o_x_pos <= (b_x_pos + 6))
Nathanj94 3:fc9133faec7a 62 ) {
Nathanj94 8:db24c475f64f 63 pad.tone(1000, 0.2);
Nathanj94 4:84e29254b988 64 objects.undraw(lcd);
Nathanj94 5:7db3e43e5aca 65 add_score();
Nathanj94 4:84e29254b988 66 objects.init(_objects_speed);
Nathanj94 3:fc9133faec7a 67 }
Nathanj94 2:8410e09b77aa 68 }
Nathanj94 2:8410e09b77aa 69
Nathanj94 3:fc9133faec7a 70 void Catch_Model::check_basket_miss(N5110 &lcd, Gamepad &pad)
Nathanj94 2:8410e09b77aa 71 {
Nathanj94 4:84e29254b988 72 int b_y_pos = basket.get_y();
Nathanj94 4:84e29254b988 73 int o_y_pos = objects.get_y();
Nathanj94 3:fc9133faec7a 74
Nathanj94 6:61bcf98e0a88 75 int score_var;
Nathanj94 6:61bcf98e0a88 76 score_var = objects.get_score_var();
Nathanj94 6:61bcf98e0a88 77
Nathanj94 3:fc9133faec7a 78 if (o_y_pos > b_y_pos) {
Nathanj94 4:84e29254b988 79 objects.undraw(lcd);
Nathanj94 6:61bcf98e0a88 80 if (score_var != 5) {
Nathanj94 6:61bcf98e0a88 81 _lives--;
Nathanj94 9:902b67101cdc 82 }
Nathanj94 8:db24c475f64f 83 pad.tone(100, 0.2);
Nathanj94 8:db24c475f64f 84 objects.init(_objects_speed);
Nathanj94 9:902b67101cdc 85 }
Nathanj94 3:fc9133faec7a 86 }
Nathanj94 3:fc9133faec7a 87
Nathanj94 8:db24c475f64f 88 void Catch_Model::check_a(N5110 &lcd, Gamepad &pad)
Nathanj94 7:ec6dc66ee196 89 {
Nathanj94 7:ec6dc66ee196 90 if (
Nathanj94 7:ec6dc66ee196 91 (pad.check_event(Gamepad::A_PRESSED) == true) &&
Nathanj94 7:ec6dc66ee196 92 (_delay == 1)
Nathanj94 7:ec6dc66ee196 93 ) {
Nathanj94 9:902b67101cdc 94 objects.undraw(lcd);
Nathanj94 9:902b67101cdc 95 objects.init(_objects_speed);
Nathanj94 7:ec6dc66ee196 96
Nathanj94 9:902b67101cdc 97 _delay = 0;
Nathanj94 9:902b67101cdc 98 timeout.attach(this, &Catch_Model::set_delay, 10.0);
Nathanj94 8:db24c475f64f 99 }
Nathanj94 8:db24c475f64f 100
Nathanj94 8:db24c475f64f 101 }
Nathanj94 8:db24c475f64f 102
Nathanj94 8:db24c475f64f 103 void Catch_Model::check_b(N5110 &lcd, Gamepad &pad)
Nathanj94 8:db24c475f64f 104 {
Nathanj94 8:db24c475f64f 105 if (
Nathanj94 8:db24c475f64f 106 (pad.check_event(Gamepad::B_PRESSED) == true) &&
Nathanj94 8:db24c475f64f 107 (_delay == 1)
Nathanj94 8:db24c475f64f 108 ) {
Nathanj94 9:902b67101cdc 109 _lives++;
Nathanj94 8:db24c475f64f 110
Nathanj94 9:902b67101cdc 111 _delay = 0;
Nathanj94 9:902b67101cdc 112 timeout.attach(this, &Catch_Model::set_delay, 10.0);
Nathanj94 7:ec6dc66ee196 113 }
Nathanj94 7:ec6dc66ee196 114
Nathanj94 7:ec6dc66ee196 115 }
Nathanj94 7:ec6dc66ee196 116
Nathanj94 9:902b67101cdc 117 void Catch_Model::check_x(N5110 &lcd, Gamepad &pad)
Nathanj94 9:902b67101cdc 118 {
Nathanj94 9:902b67101cdc 119 if (
Nathanj94 9:902b67101cdc 120 (pad.check_event(Gamepad::X_PRESSED) == true) &&
Nathanj94 9:902b67101cdc 121 (_delay == 1)
Nathanj94 10:6605cd9d374b 122 ) {
Nathanj94 9:902b67101cdc 123 _delay = 0;
Nathanj94 9:902b67101cdc 124 timeout.attach(this, &Catch_Model::set_delay, 10.0);
Nathanj94 9:902b67101cdc 125 }
Nathanj94 9:902b67101cdc 126
Nathanj94 9:902b67101cdc 127 }
Nathanj94 9:902b67101cdc 128
Nathanj94 7:ec6dc66ee196 129 void Catch_Model::set_delay()
Nathanj94 7:ec6dc66ee196 130 {
Nathanj94 7:ec6dc66ee196 131 _delay = 1;
Nathanj94 7:ec6dc66ee196 132 }
Nathanj94 8:db24c475f64f 133
Nathanj94 5:7db3e43e5aca 134 void Catch_Model::add_score()
Nathanj94 5:7db3e43e5aca 135 {
Nathanj94 5:7db3e43e5aca 136 int score_var;
Nathanj94 5:7db3e43e5aca 137 score_var = objects.get_score_var();
Nathanj94 5:7db3e43e5aca 138
Nathanj94 5:7db3e43e5aca 139 if (score_var == 1) {
Nathanj94 5:7db3e43e5aca 140 basket.add_score_1();
Nathanj94 5:7db3e43e5aca 141 } else if (score_var == 2) {
Nathanj94 5:7db3e43e5aca 142 basket.add_score_2();
Nathanj94 5:7db3e43e5aca 143 } else if (score_var == 3) {
Nathanj94 5:7db3e43e5aca 144 basket.add_score_5();
Nathanj94 6:61bcf98e0a88 145 } else if (score_var == 4) {
Nathanj94 6:61bcf98e0a88 146 basket.add_score_10();
Nathanj94 5:7db3e43e5aca 147 } else {
Nathanj94 6:61bcf98e0a88 148 _lives--;
Nathanj94 5:7db3e43e5aca 149 }
Nathanj94 5:7db3e43e5aca 150 }
Nathanj94 5:7db3e43e5aca 151
Nathanj94 4:84e29254b988 152 int Catch_Model::get_lives()
Nathanj94 4:84e29254b988 153 {
Nathanj94 4:84e29254b988 154 return _lives;
Nathanj94 4:84e29254b988 155 }
Nathanj94 4:84e29254b988 156
Nathanj94 4:84e29254b988 157 void Catch_Model::print_lives(N5110 &lcd)
Nathanj94 4:84e29254b988 158 {
Nathanj94 4:84e29254b988 159 char buffer[14];
Nathanj94 4:84e29254b988 160 int lives = get_lives();
Nathanj94 4:84e29254b988 161
Nathanj94 4:84e29254b988 162 int print_lives = sprintf(buffer, "LIVES:%d", lives);
Nathanj94 4:84e29254b988 163 if (print_lives <= 14) {
Nathanj94 4:84e29254b988 164 lcd.printString(buffer,0,0);
Nathanj94 4:84e29254b988 165 lcd.refresh();
Nathanj94 4:84e29254b988 166 }
Nathanj94 4:84e29254b988 167 }
Nathanj94 4:84e29254b988 168
Nathanj94 3:fc9133faec7a 169 void Catch_Model::print_score(N5110 &lcd)
Nathanj94 3:fc9133faec7a 170 {
Nathanj94 3:fc9133faec7a 171 char buffer[14];
Nathanj94 4:84e29254b988 172 int score = basket.get_score();
Nathanj94 2:8410e09b77aa 173
Nathanj94 4:84e29254b988 174 int print_score;
Nathanj94 4:84e29254b988 175
Nathanj94 4:84e29254b988 176 if ((score == 0)||(score <= 9)) {
Nathanj94 4:84e29254b988 177 print_score = sprintf(buffer, "000%d", score);
Nathanj94 4:84e29254b988 178 } else if (score <= 99) {
Nathanj94 4:84e29254b988 179 print_score = sprintf(buffer, "00%2d", score);
Nathanj94 4:84e29254b988 180 } else if (score <= 999 ) {
Nathanj94 4:84e29254b988 181 print_score = sprintf(buffer, "0%3d", score);
Nathanj94 4:84e29254b988 182 } else {
Nathanj94 4:84e29254b988 183 print_score = sprintf(buffer, "%4d", score);
Nathanj94 4:84e29254b988 184 }
Nathanj94 4:84e29254b988 185
Nathanj94 3:fc9133faec7a 186 if (print_score <= 14) {
Nathanj94 4:84e29254b988 187 lcd.printString(buffer,59,0);
Nathanj94 3:fc9133faec7a 188 lcd.refresh();
Nathanj94 3:fc9133faec7a 189 }
Nathanj94 3:fc9133faec7a 190 }
Nathanj94 8:db24c475f64f 191
Nathanj94 8:db24c475f64f 192 void Catch_Model::print_delay(N5110 &lcd)
Nathanj94 8:db24c475f64f 193 {
Nathanj94 8:db24c475f64f 194 if (_delay == 1) {
Nathanj94 8:db24c475f64f 195 lcd.drawLine(46,4,50,8,1);
Nathanj94 8:db24c475f64f 196 lcd.drawLine(50,8,54,0,1);
Nathanj94 8:db24c475f64f 197 } else {
Nathanj94 8:db24c475f64f 198 lcd.drawLine(46,0,54,8,1);
Nathanj94 8:db24c475f64f 199 lcd.drawLine(46,8,54,0,1);
Nathanj94 8:db24c475f64f 200 }
Nathanj94 8:db24c475f64f 201 }