在蛇游戏中,我在单独的文件中定义了两个类:Snake
和Map
(游戏地图,而不是通常的容器)。
这是简化的Map
实现:
#include "Snake.hpp"
using Coordinates = std::pair<std::size_t, std::size_t>;
class Map
{
public:
Map(Coordinates dimensions);
void generateFruit(const Snake &);
private:
friend class Snake;
const Coordinates m_dimensions;
std::unordered_set<Coordinates, boost::hash<Coordinates>> m_fruit_positions;
};
generateFruit
在地图上的任意位置生成一个水果,并且不能将水果放置在蛇所在的位置,这意味着它需要知道蛇在哪里,因此自变量{{1} }。
这是简化的Snake
实现:
Snake
#include "Map.hpp"
class Snake
{
public:
enum class Orientation
{
Up,
Down,
Left,
Right
};
Snake(const Map &);
bool isAlive(const Map &) const;
void move(Map &);
void turn(Orientation);
private:
std::deque<Coordinates> s_snake;
Orientation s_orientation;
};
中的大多数方法都需要Snake
来进行边界检查。
解决这种依赖性的最佳方法是什么?
编辑: 转发声明任何类会导致不完整的类型错误。