/
Ball.cpp
73 lines (61 loc) · 1.25 KB
/
Ball.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <Arduino.h>
#include "Ball.h"
int Ball::randomAngle(int row)
{
int angle = random(1, 4) * 45;
if ((row == 0 && angle < 90) ||
(row == 7 && angle > 90))
angle = 90;
return angle;
}
unsigned long Ball::accelerate(unsigned long delay)
{
if (MIN_DELAY + DELAY_STEP <= delay)
delay -= DELAY_STEP;
return delay;
}
bool Ball::move(Paddle& paddle0, Paddle& paddle1, unsigned long& delay, int &startPlayer)
{
bool carryOn = true;
if (angle_ > 0) {
col_++;
} else {
col_--;
}
if (col_ == MAX_COLUMN) {
if (paddle1.hit(row_, col_)) {
col_ = MAX_COLUMN - 2;
angle_ = -randomAngle(row_);
delay = accelerate(delay);
} else {
carryOn = false;
startPlayer = 0;
}
} else if (col_ == MIN_COLUMN) {
if (paddle0.hit(row_, col_)) {
col_ = MIN_COLUMN + 2;
angle_ = randomAngle(row_);
delay = accelerate(delay);
} else {
carryOn = false;
startPlayer = 1;
}
} else if (row_ == MIN_ROW) {
if (abs(angle_) < 90) {
angle_ *= 3;
}
} else if (row_ == MAX_ROW) {
if (abs(angle_) > 90) {
angle_ /= 3;
}
}
if (abs(angle_) > 90) {
row_++;
} else if (abs(angle_) < 90) {
row_--;
}
return carryOn;
}
// Local variables:
// mode: c++
// End: