Mohsin Riaz / Mbed 2 deprecated Pong-MiP

Dependencies:   mbed tsi_sensor

Committer:
immou
Date:
Sun May 17 02:58:07 2020 +0000
Revision:
3:39316d8caa86
Parent:
2:292e47672dbe
changes;

Who changed what in which revision?

UserRevisionLine numberNew 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 3:39316d8caa86 79 y > p->y &&
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 3:39316d8caa86 100 y > p->y &&
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