/* * Copyright (c) 2020, the SerenityOS developers. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include class Game final { public: Game(size_t board_size, size_t target_tile = 0); Game(const Game&) = default; enum class MoveOutcome { OK, InvalidMove, GameOver, Won, }; enum class Direction { Up, Down, Left, Right, }; MoveOutcome attempt_move(Direction); size_t score() const { return m_score; } size_t turns() const { return m_turns; } u32 target_tile() const { return m_target_tile; } u32 largest_tile() const; using Board = Vector>; const Board& board() const { return m_board; } static size_t max_power_for_board(size_t size) { if (size >= 6) return 31; return size * size + 1; } private: void add_random_tile(); size_t m_grid_size { 0 }; u32 m_target_tile { 0 }; Board m_board; size_t m_score { 0 }; size_t m_turns { 0 }; };