#include "Car.h" Car::Car(double x, double y, BitmapStore::Image image, Maze::Direction facing) :GameObject(x,y,image,facing), _speed(_baseSpeed) { } double Car::speed() const { return _speed; } void Car::move(const Maze& maze) { double targetX = 0; double targetY = 0; int checkX = 0; int checkY = 0; switch(_facing) { case Maze::UP: targetX = MazeMath::round(_x); targetY = _y - _speed; checkX = floor(targetX); checkY = floor(targetY); break; case Maze::DOWN: targetX = MazeMath::round(_x); targetY = _y + _speed; checkX = floor(targetX); checkY = ceil(targetY); break; case Maze::LEFT: targetX = _x - _speed; targetY = MazeMath::round(_y); checkX = floor(targetX); checkY = floor(targetY); break; case Maze::RIGHT: targetX = _x + _speed; targetY = MazeMath::round(_y); checkX = ceil(targetX); checkY = floor(targetY); break; } if (!maze.getSolid(checkX, checkY)) { //can move that way _x = targetX; _y = targetY; } else { //can not move to targetX and targetY, but move to the edge of current block switch(_facing) { case Maze::UP: _y = floor(_y); break; case Maze::DOWN: _y = ceil(_y); break; case Maze::LEFT: _x = floor(_x); break; case Maze::RIGHT: _x = ceil(_x); break; } } }