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 74 75 76 77 78 79 80
|
//-----------------------------------------------------------------------------
/** @file libpentobi_base/StartingPoints.h
@author Markus Enzenberger
@copyright GNU General Public License version 3 or later */
//-----------------------------------------------------------------------------
#ifndef LIBPENTOBI_BASE_STARTING_POINTS_H
#define LIBPENTOBI_BASE_STARTING_POINTS_H
#include "ColorMap.h"
#include "Geometry.h"
#include "Grid.h"
#include "Variant.h"
#include "libboardgame_base/ArrayList.h"
namespace libpentobi_base {
using libboardgame_base::ArrayList;
//-----------------------------------------------------------------------------
class StartingPoints
{
public:
static constexpr unsigned max_starting_points = 16;
void init(Variant variant, const Geometry& geo);
bool is_colored_starting_point(Point p) const;
bool is_colorless_starting_point(Point p) const;
Color get_starting_point_color(Point p) const;
const ArrayList<Point,StartingPoints::max_starting_points>&
get_starting_points(Color c) const;
private:
Grid<bool> m_is_colored_starting_point;
Grid<bool> m_is_colorless_starting_point;
Grid<Color> m_starting_point_color;
ColorMap<ArrayList<Point,max_starting_points>> m_starting_points;
void add_colored_starting_point(const Geometry& geo, unsigned x,
unsigned y, Color c);
void add_colorless_starting_point(const Geometry& geo, unsigned x,
unsigned y);
};
inline Color StartingPoints::get_starting_point_color(Point p) const
{
LIBBOARDGAME_ASSERT(m_is_colored_starting_point[p]);
return m_starting_point_color[p];
}
inline const ArrayList<Point,StartingPoints::max_starting_points>&
StartingPoints::get_starting_points(Color c) const
{
return m_starting_points[c];
}
inline bool StartingPoints::is_colored_starting_point(Point p) const
{
return m_is_colored_starting_point[p];
}
inline bool StartingPoints::is_colorless_starting_point(Point p) const
{
return m_is_colorless_starting_point[p];
}
//-----------------------------------------------------------------------------
} // namespace libpentobi_base
#endif // LIBPENTOBI_BASE_STARTING_POINTS_H
|