Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
source/bola.h@2:292e47672dbe, 2020-05-17 (annotated)
- Committer:
- immou
- Date:
- Sun May 17 02:41:51 2020 +0000
- Revision:
- 2:292e47672dbe
- Parent:
- 1:2c86b5fb793a
- Child:
- 3:39316d8caa86
some more changes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
immou | 1:2c86b5fb793a | 1 | #ifndef BOLA_H_ |
immou | 1:2c86b5fb793a | 2 | #define BOLA_H_ |
immou | 1:2c86b5fb793a | 3 | |
immou | 1:2c86b5fb793a | 4 | #include <math.h> |
immou | 1:2c86b5fb793a | 5 | #include "../globals.h" |
immou | 1:2c86b5fb793a | 6 | #include "pala.h" |
immou | 1:2c86b5fb793a | 7 | |
immou | 1:2c86b5fb793a | 8 | #ifndef M_PI |
immou | 1:2c86b5fb793a | 9 | #define M_PI 3.14159265358979323846 |
immou | 1:2c86b5fb793a | 10 | #endif |
immou | 1:2c86b5fb793a | 11 | |
immou | 1:2c86b5fb793a | 12 | using namespace std; |
immou | 1:2c86b5fb793a | 13 | |
immou | 1:2c86b5fb793a | 14 | class Bola |
immou | 1:2c86b5fb793a | 15 | { |
immou | 1:2c86b5fb793a | 16 | public: |
immou | 1:2c86b5fb793a | 17 | int x, y, w, h, speed; |
immou | 1:2c86b5fb793a | 18 | float dirx, diry; |
immou | 1:2c86b5fb793a | 19 | Bola(int x, int y, int w, int h, int speed) : x(x), y(y), w(w), h(h), speed(speed) |
immou | 1:2c86b5fb793a | 20 | { |
immou | 1:2c86b5fb793a | 21 | reset(); |
immou | 1:2c86b5fb793a | 22 | }; |
immou | 1:2c86b5fb793a | 23 | ~Bola() {}; |
immou | 1:2c86b5fb793a | 24 | void update(); |
immou | 1:2c86b5fb793a | 25 | void bordes(int *score); |
immou | 1:2c86b5fb793a | 26 | void reset(); |
immou | 1:2c86b5fb793a | 27 | void checkPalaLeft(Pala *p); |
immou | 1:2c86b5fb793a | 28 | void checkPalaRight(Pala *p); |
immou | 1:2c86b5fb793a | 29 | }; |
immou | 1:2c86b5fb793a | 30 | |
immou | 1:2c86b5fb793a | 31 | void Bola::update() |
immou | 1:2c86b5fb793a | 32 | { |
immou | 1:2c86b5fb793a | 33 | x += dirx; |
immou | 1:2c86b5fb793a | 34 | y += diry; |
immou | 1:2c86b5fb793a | 35 | } |
immou | 1:2c86b5fb793a | 36 | |
immou | 1:2c86b5fb793a | 37 | void Bola::bordes(int *score) |
immou | 1:2c86b5fb793a | 38 | { |
immou | 1:2c86b5fb793a | 39 | // condicion para el borde superior y el inferior |
immou | 1:2c86b5fb793a | 40 | if (y < 1 || y > MAP_HEIGHT - 1) { |
immou | 1:2c86b5fb793a | 41 | diry *= -1; |
immou | 1:2c86b5fb793a | 42 | } |
immou | 1:2c86b5fb793a | 43 | |
immou | 1:2c86b5fb793a | 44 | // condicion para el borde derecho |
immou | 1:2c86b5fb793a | 45 | if (x > MAP_WIDTH -1 ) { |
immou | 1:2c86b5fb793a | 46 | score[0]++; |
immou | 1:2c86b5fb793a | 47 | reset(); |
immou | 1:2c86b5fb793a | 48 | } |
immou | 1:2c86b5fb793a | 49 | |
immou | 1:2c86b5fb793a | 50 | // condicion para el borde izquierdo |
immou | 1:2c86b5fb793a | 51 | if (x < 1) { |
immou | 1:2c86b5fb793a | 52 | score[1]++; |
immou | 1:2c86b5fb793a | 53 | reset(); |
immou | 1:2c86b5fb793a | 54 | } |
immou | 1:2c86b5fb793a | 55 | } |
immou | 1:2c86b5fb793a | 56 | |
immou | 1:2c86b5fb793a | 57 | void Bola::reset() |
immou | 1:2c86b5fb793a | 58 | { |
immou | 1:2c86b5fb793a | 59 | float r = fmod(rand(), (3.14159 / 4)); |
immou | 1:2c86b5fb793a | 60 | float angulo = ((rand() % 2) + 1) > 1 ? r : -r; |
immou | 1:2c86b5fb793a | 61 | //float angulo = fmod(rand(), (3.14159 / 4) + (-3.14159 / 4)); |
immou | 1:2c86b5fb793a | 62 | x = MAP_WIDTH / 2; |
immou | 1:2c86b5fb793a | 63 | y = MAP_HEIGHT / 2; |
immou | 1:2c86b5fb793a | 64 | |
immou | 1:2c86b5fb793a | 65 | //angle = 0; |
immou | 1:2c86b5fb793a | 66 | dirx = speed * cos(angulo); |
immou | 1:2c86b5fb793a | 67 | diry = speed * sin(angulo); |
immou | 1:2c86b5fb793a | 68 | |
immou | 1:2c86b5fb793a | 69 | // hace que 50% de veces vaya a la der. o a la izq. |
immou | 1:2c86b5fb793a | 70 | if (((rand() % 2) + 1) > 1) { |
immou | 1:2c86b5fb793a | 71 | dirx *= -1; |
immou | 1:2c86b5fb793a | 72 | } |
immou | 1:2c86b5fb793a | 73 | } |
immou | 1:2c86b5fb793a | 74 | |
immou | 1:2c86b5fb793a | 75 | void Bola::checkPalaLeft(Pala *p) |
immou | 1:2c86b5fb793a | 76 | { |
immou | 1:2c86b5fb793a | 77 | if ( |
immou | 1:2c86b5fb793a | 78 | y < p->y + p->h && |
immou | 1:2c86b5fb793a | 79 | y > p->y - p->h && |
immou | 1:2c86b5fb793a | 80 | x < p->x + p->w) { |
immou | 1:2c86b5fb793a | 81 | if (x > p->x) { |
immou | 1:2c86b5fb793a | 82 | float diff = y - (p->y - p->h); |
immou | 1:2c86b5fb793a | 83 | float rad = 45 * M_PI / 180; |
immou | 1:2c86b5fb793a | 84 | //float angle = map(diff, 0, p->h, -rad, rad); |
immou | 1:2c86b5fb793a | 85 | //float angle = -rad + (rad - (-rad)) * (diff / p->h); |
immou | 1:2c86b5fb793a | 86 | float angle = (diff/p->h) * (-rad + rad) + (-rad); |
immou | 1:2c86b5fb793a | 87 | |
immou | 1:2c86b5fb793a | 88 | dirx = speed * cos(angle); |
immou | 1:2c86b5fb793a | 89 | diry = speed * sin(angle); |
immou | 1:2c86b5fb793a | 90 | x = p->x + p->w; |
immou | 1:2c86b5fb793a | 91 | //xspeed *= -1; |
immou | 1:2c86b5fb793a | 92 | } |
immou | 1:2c86b5fb793a | 93 | } |
immou | 1:2c86b5fb793a | 94 | } |
immou | 1:2c86b5fb793a | 95 | |
immou | 1:2c86b5fb793a | 96 | void Bola::checkPalaRight(Pala *p) |
immou | 1:2c86b5fb793a | 97 | { |
immou | 1:2c86b5fb793a | 98 | float xpi = M_PI / 180; |
immou | 1:2c86b5fb793a | 99 | if (y < p->y + p->h && |
immou | 1:2c86b5fb793a | 100 | y > p->y - p->h && |
immou | 1:2c86b5fb793a | 101 | x > p->x - p->w) { |
immou | 1:2c86b5fb793a | 102 | if (x < p->x) { |
immou | 1:2c86b5fb793a | 103 | //xspeed *= -1; |
immou | 1:2c86b5fb793a | 104 | float diff = y - (p->y - p->h); |
immou | 1:2c86b5fb793a | 105 | //float angle = map(diff, 0, p->h, 255 * M_PI / 180, 135 * M_PI / 180); |
immou | 1:2c86b5fb793a | 106 | //float angle = (225 * xpi) + ((135 * xpi) - (225 * xpi)) * (diff / p->h); |
immou | 2:292e47672dbe | 107 | float angle = (diff / p->h) * (225*xpi - 135*xpi) + 135*xpi; |
immou | 1:2c86b5fb793a | 108 | |
immou | 1:2c86b5fb793a | 109 | dirx = speed * cos(angle); |
immou | 1:2c86b5fb793a | 110 | diry = speed * sin(angle); |
immou | 1:2c86b5fb793a | 111 | x = p->x - p->w; |
immou | 1:2c86b5fb793a | 112 | } |
immou | 1:2c86b5fb793a | 113 | } |
immou | 1:2c86b5fb793a | 114 | } |
immou | 1:2c86b5fb793a | 115 | |
immou | 1:2c86b5fb793a | 116 | #endif |