start implementi difficulty level, but needs some balancements
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
#include "paddle.h"
|
||||
|
||||
void Paddle::move_pad_up() {
|
||||
if (_position > 0) {
|
||||
_position -= 1;
|
||||
if (_pos_y > 0) {
|
||||
_pos_y -= 1;
|
||||
}
|
||||
}
|
||||
void Paddle::move_pad_down() {
|
||||
if (_position + _height < MATRIX_HEIGHT) {
|
||||
_position += 1;
|
||||
if (_pos_y + _height < MATRIX_HEIGHT) {
|
||||
_pos_y += 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ void run_paddle() {
|
||||
}
|
||||
|
||||
uint8_t Paddle::get_position() {
|
||||
return _position;
|
||||
return _pos_y;
|
||||
}
|
||||
|
||||
bool Paddle::is_human() {
|
||||
@@ -43,6 +43,9 @@ bool Paddle::check_pad_movement(Ball &ball) {
|
||||
// redefine me
|
||||
return false;
|
||||
}
|
||||
uint8_t Paddle::get_skills() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool HumanPaddle::check_pad_movement() {
|
||||
bool need_refresh= false;
|
||||
@@ -58,14 +61,41 @@ bool HumanPaddle::check_pad_movement() {
|
||||
}
|
||||
|
||||
bool BotPaddle::check_pad_movement(Ball &ball) {
|
||||
uint8_t y= ball.get_y();
|
||||
uint8_t ball_y= ball.get_y();
|
||||
int8_t ball_dir= ball.get_direction_x();
|
||||
|
||||
// ball is moving left and pad is on right, do not move
|
||||
if (ball_dir < 0 && _pos_x > MATRIX_WIDTH / 2) return false;
|
||||
// ball is moving right and pad is on left, do not move
|
||||
else if (ball_dir > 0 && _pos_x < MATRIX_WIDTH / 2) return false;
|
||||
|
||||
uint8_t ball_x= ball.get_x();
|
||||
int8_t ball_distance= ball_x - _pos_x;
|
||||
if (ball_distance < 0) ball_distance *= -1;
|
||||
switch (this -> get_skills()) {
|
||||
case 1:
|
||||
if (ball_distance > MATRIX_WIDTH / 2 - 2) return false;
|
||||
break;
|
||||
case 2:
|
||||
if (ball_distance > MATRIX_WIDTH / 2 - 1) return false;
|
||||
break;
|
||||
case 3:
|
||||
if (ball_distance > MATRIX_WIDTH / 2) return false;
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO BotPaddle movement logics
|
||||
// on higher difficult level i could also check the ball direction
|
||||
// or at lover difficulty level i could also check the distance from the pad and move only when the ball si near
|
||||
for (uint8_t _py= _position; _py < _position+PADDLE_LENGTH; _py++) {
|
||||
|
||||
for (uint8_t py= _pos_y; py < _pos_y+PADDLE_LENGTH; py++) {
|
||||
// don't move if ball is already centered to the pad
|
||||
if (_py == y) continue;
|
||||
else if (_position - y >= 0) this -> move_pad_up();
|
||||
if (py == ball_y) continue;
|
||||
else if (_pos_y - ball_y >= 0) this -> move_pad_up();
|
||||
else this -> move_pad_down();
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t BotPaddle::get_skills() {
|
||||
return _skills;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user