Skip to content

Commit

Permalink
Fixed my erroneous use of the const keyword
Browse files Browse the repository at this point in the history
  • Loading branch information
mbluemer committed Apr 19, 2017
1 parent 668b0ed commit 8ca9a64
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 39 deletions.
30 changes: 15 additions & 15 deletions include/BitBoard.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ class BitBoard

// These are basic 32 bit rotation functions
// Details here: http://stackoverflow.com/questions/776508/best-practices-for-circular-shift-rotate-operations-in-c
uint32_t const rotl32 (uint32_t n, unsigned int c) const;
uint32_t const rotr32 (uint32_t n, unsigned int c) const;
uint32_t rotl32 (uint32_t n, unsigned int c) const;
uint32_t rotr32 (uint32_t n, unsigned int c) const;

const uint32_t playerPieces() const;

Expand All @@ -73,25 +73,25 @@ class BitBoard
int h9() const;
int h10() const;

int const getIndex(uint32_t piece);
int getIndex(uint32_t piece) const;

void addJumps(std::vector<Move> &moves);
void addNormalMoves(std::vector<Move> &moves);
void generateAllJumps(BitBoard board, Move move, uint32_t piece, std::vector<Move> &moves);
BitBoard boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo);
std::vector<uint32_t> generateImmediateJumps(BitBoard &board, uint32_t piece);
void addNewMove(uint32_t start, uint32_t end, std::vector<Move> &moves);
std::string pieceToString(int piece);
void addJumps(std::vector<Move> &moves) const;
void addNormalMoves(std::vector<Move> &moves) const;
void generateAllJumps(BitBoard board, Move move, uint32_t piece, std::vector<Move> &moves) const;
BitBoard boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo) const;
std::vector<uint32_t> generateImmediateJumps(BitBoard &board, uint32_t piece) const;
void addNewMove(uint32_t start, uint32_t end, std::vector<Move> &moves) const;
std::string pieceToString(int piece) const;

public:
BitBoard();
BitBoard(uint32_t black, uint32_t white, uint32_t kings);

std::string const player();
std::vector<Move> const actions();
BitBoard const result(Move move);
double utility(std::string player);
void const printState();
std::string player() const;
std::vector<Move> actions() const;
BitBoard result(Move move) const;
double utility(std::string player) const;
void printState() const;
};

#endif
8 changes: 4 additions & 4 deletions include/MinimaxSearch.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
class MinimaxSearch
{
private:
static const int maxDepth = 5;
static const int maxDepth = 9;

double minValue(BitBoard board, int currentDepth);
double maxValue(BitBoard board, int currentDepth);
double minValue(const BitBoard &board, int currentDepth) const;
double maxValue(const BitBoard &board, int currentDepth) const;

public:
Move minimaxDecision(BitBoard &board);
Move minimaxDecision(const BitBoard &board) const;

};

Expand Down
30 changes: 15 additions & 15 deletions src/BitBoard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@

// These are basic 32 bit rotation functions
// Details here: http://stackoverflow.com/questions/776508/best-practices-for-circular-shift-rotate-operations-in-c
uint32_t const BitBoard::rotl32 (uint32_t n, unsigned int c) const
uint32_t BitBoard::rotl32 (uint32_t n, unsigned int c) const
{
const unsigned int mask = (CHAR_BIT*sizeof(n)-1);

c &= mask; // avoid undef behaviour with NDEBUG. 0 overhead for most types / compilers
return (n<<c) | (n>>( (-c)&mask ));
}

uint32_t const BitBoard::rotr32 (uint32_t n, unsigned int c) const
uint32_t BitBoard::rotr32 (uint32_t n, unsigned int c) const
{
const unsigned int mask = (CHAR_BIT*sizeof(n)-1);

Expand All @@ -28,12 +28,12 @@ uint32_t const BitBoard::rotr32 (uint32_t n, unsigned int c) const
}

// Given a piece represented by a binary value return it's index
int const BitBoard::getIndex(uint32_t piece)
int BitBoard::getIndex(uint32_t piece) const
{
return (int)std::log2(piece);
}

void BitBoard::addJumps(std::vector<Move> &moves)
void BitBoard::addJumps(std::vector<Move> &moves) const
{
uint32_t notOcc = ~(m_whitePieces|m_blackPieces);
for (int i = 0; i < 32; ++i) {
Expand All @@ -45,7 +45,7 @@ void BitBoard::addJumps(std::vector<Move> &moves)
}
}

void BitBoard::addNormalMoves(std::vector<Move> &moves)
void BitBoard::addNormalMoves(std::vector<Move> &moves) const
{
uint32_t notOcc = ~(m_whitePieces|m_blackPieces);
for (int i = 0; i < 32; ++i) {
Expand Down Expand Up @@ -78,7 +78,7 @@ void BitBoard::addNormalMoves(std::vector<Move> &moves)
}
}

void BitBoard::generateAllJumps(BitBoard board, Move move, uint32_t piece, std::vector<Move> &moves)
void BitBoard::generateAllJumps(BitBoard board, Move move, uint32_t piece, std::vector<Move> &moves) const
{
if (move.isEmpty()) move.addMove(getIndex(piece)); // Add start position
std::vector<uint32_t> immediateJumps = generateImmediateJumps(board, piece);
Expand All @@ -93,7 +93,7 @@ void BitBoard::generateAllJumps(BitBoard board, Move move, uint32_t piece, std::
}
}

BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo)
BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo) const
{
// Constructor needs black, white, and kings locations so just derive those and instantiate new board object
uint32_t white = board.m_whitePieces;
Expand Down Expand Up @@ -124,7 +124,7 @@ BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo)
return BitBoard(black, white, kings);
}

std::vector<uint32_t> BitBoard::generateImmediateJumps(BitBoard &board, uint32_t piece)
std::vector<uint32_t> BitBoard::generateImmediateJumps(BitBoard &board, uint32_t piece) const
{
std::vector<uint32_t> moves;
uint32_t notOcc = ~(board.m_whitePieces|board.m_blackPieces);
Expand Down Expand Up @@ -164,14 +164,14 @@ std::vector<uint32_t> BitBoard::generateImmediateJumps(BitBoard &board, uint32_t
return moves;
}

void BitBoard::addNewMove(uint32_t start, uint32_t end, std::vector<Move> &moves)
void BitBoard::addNewMove(uint32_t start, uint32_t end, std::vector<Move> &moves) const
{
Move newMove(getIndex(start));
newMove.addMove(getIndex(end));
moves.push_back(newMove);
}

std::string BitBoard::pieceToString(int piece)
std::string BitBoard::pieceToString(int piece) const
{
uint32_t pieceLoc = 1<<piece;
if (pieceLoc & m_blackPieces)
Expand All @@ -191,12 +191,12 @@ BitBoard::BitBoard(uint32_t black, uint32_t white, uint32_t kings) :
m_isBlacksTurn = true;
}

std::string const BitBoard::player()
std::string BitBoard::player() const
{
return m_isBlacksTurn ? "black" : "white";
}

std::vector<Move> const BitBoard::actions()
std::vector<Move> BitBoard::actions() const
{
std::vector<Move> moves;
addJumps(moves);
Expand All @@ -207,7 +207,7 @@ std::vector<Move> const BitBoard::actions()
return moves;
}

BitBoard const BitBoard::result(Move move)
BitBoard BitBoard::result(Move move) const
{
BitBoard currBoard = *this;
int start{-1};
Expand All @@ -224,13 +224,13 @@ BitBoard const BitBoard::result(Move move)
return currBoard;
}

double BitBoard::utility(std::string player)
double BitBoard::utility(std::string player) const
{
// TODO: Do something useful here
return 0.0;
}

void const BitBoard::printState()
void BitBoard::printState() const
{
std::cout<<"-"<<pieceToString(11)<<"-"<<pieceToString(5)<<"-"<<pieceToString(31)<<"-"<<pieceToString(25)<<std::endl;
std::cout<<pieceToString(10)<<"-"<<pieceToString(4)<<"-"<<pieceToString(30)<<"-"<<pieceToString(24)<<"-"<<std::endl;
Expand Down
11 changes: 6 additions & 5 deletions src/MinimaxSearch.cpp
Original file line number Diff line number Diff line change
@@ -1,35 +1,36 @@
#include <string>
#include <limits>
#include <algorithm>
#include <iostream>
#include "BitBoard.h"
#include "Move.h"
#include "MinimaxSearch.h"

/* Private Functions */

double MinimaxSearch::minValue(BitBoard board, int currentDepth)
double MinimaxSearch::minValue(const BitBoard &board, int currentDepth) const
{
if (currentDepth == maxDepth) return board.utility(board.player());
double v = std::numeric_limits<double>::lowest();
for (Move move : board.actions()) {
v = std::min(v, maxValue(board.result(move), ++currentDepth));
v = std::min(v, maxValue(board.result(move), currentDepth + 1));
}
return v;
}

double MinimaxSearch::maxValue(BitBoard board, int currentDepth)
double MinimaxSearch::maxValue(const BitBoard &board, int currentDepth) const
{
if (currentDepth == maxDepth) return board.utility(board.player());
double v = std::numeric_limits<double>::max();
for (Move move : board.actions()) {
v = std::max(v, minValue(board.result(move), ++currentDepth));
v = std::max(v, minValue(board.result(move), currentDepth + 1));
}
return v;
}

/* Public Functions */

Move MinimaxSearch::minimaxDecision(BitBoard &board)
Move MinimaxSearch::minimaxDecision(const BitBoard &board) const
{
Move bestMove;
double bestMoveValue{0.0};
Expand Down

0 comments on commit 8ca9a64

Please sign in to comment.