30 lines
655 B
C++
30 lines
655 B
C++
#ifndef GAME_HPP
|
|
#define GAME_HPP
|
|
|
|
#include <exception>
|
|
|
|
#include "data.hpp"
|
|
|
|
namespace game::error
|
|
{
|
|
struct invalid_move : std::exception
|
|
{};
|
|
}
|
|
|
|
namespace game::logic
|
|
{
|
|
auto play(const data::Board&, const data::Coordinate&, data::Player) -> data::Boards;
|
|
auto spread(const data::Board&) noexcept -> data::Boards;
|
|
auto winner(const data::Board&) noexcept -> data::Player;
|
|
|
|
static inline auto square_capacity(const data::Board& b,
|
|
const data::Coordinate& c) noexcept -> int
|
|
{
|
|
if (b.is_corner(c)) return 1;
|
|
if (b.is_side(c)) return 2;
|
|
return 3;
|
|
}
|
|
}
|
|
|
|
#endif
|