Move the board code out to ui as it's only for board visualisation

This commit is contained in:
Marc Di Luzio 2014-12-16 13:12:58 +00:00
parent a17a9db2ad
commit 2abd4ad832
9 changed files with 39 additions and 13 deletions

View file

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 2.8.7)
# game project
project( ui )
include_directories(
../maths
../game
)
# Set to use c++11, because we're cool like that
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11" )
# Add the sources
set( SOURCES
board.cpp
)
add_library( ui ${SOURCES} )

43
ui/board.cpp Normal file
View file

@ -0,0 +1,43 @@
#include "board.h"
// ----------------------------------------------
// Default constructor for the board
CBoard::CBoard( unsigned int c, unsigned int r )
: cols ( c )
, rows ( r )
, total ( rows * cols )
{
board.resize(total,square_empty);
}
// constructor
CBoard::CBoard( unsigned int c, unsigned int r, vunitVis_c&& b )
: cols ( c )
, rows ( r )
, total ( rows * cols )
, board ( std::move(b) )
{
board.resize(total,square_empty);
}
// print get a slot on the board
unitVis_c CBoard::get( const unsigned int c, const unsigned int r ) const
{
if ( (r >= rows) || (c >= cols) )
return square_invalid;
return board[r*c];
}
// Get a square on the board
unitVis_c CBoard::set( const unsigned int c, const unsigned int r , const unitVis_c n )
{
if ( (r >= rows) || (c >= cols) )
return square_invalid;
unitVis_c old = board[r*c];
board[r*c] = n;
return old;
}

54
ui/board.h Normal file
View file

@ -0,0 +1,54 @@
#ifndef _BOARD_H_
#define _BOARD_H_
#include "gametypes.h"
#include "basetypes.h"
#include <limits> // std::numeric_limits
#include <vector> // std::vector
typedef std::vector< unitVis_c > vunitVis_c;
// Invalid value for the board square
constexpr unitVis_c square_invalid = std::numeric_limits<unitVis_c>::max();
constexpr unitVis_c square_empty = ' ';
// Class to store simple data about a board
class CBoard
{
public:
const unsigned int cols; // Number of columns
const unsigned int rows; // Number of rows
const unsigned int total; // Total number of pieces
// constructor
CBoard( unsigned int c, unsigned int r );
// constructor
CBoard( unsigned int c, unsigned int r, vunitVis_c&& b );
// Default destructor
~CBoard() = default;
// clear the board
inline void clear() { fill(square_empty); }
// fill the board
inline void fill(unitVis_c v) { std::fill(board.begin(),board.end(),v); };
// Get a square on the board
unitVis_c get( const unsigned int c, const unsigned int r ) const;
// Get the full board
inline const vunitVis_c& get() const { return board; };
// Get a square on the board
unitVis_c set( const unsigned int c, const unsigned int r , const unitVis_c n );
private:
vunitVis_c board; // Board data storage
};
#endif //_BOARD_H_