Board: add remove_peg(), add_peg(), move().

This commit is contained in:
Josh Holtrop 2021-02-24 22:02:59 -05:00
parent 7235cd906f
commit 22a8a3b94a

View File

@ -75,6 +75,31 @@ class Board
return peg_present(p.row, p.col);
}
void remove_peg(Position p)
{
m_pegs[peg_index(p.row, p.col)] = false;
}
void add_peg(Position p)
{
m_pegs[peg_index(p.row, p.col)] = true;
}
Board move(Position p, Direction d)
{
Position p1 = p.move(d, 1);
Position p2 = p.move(d, 2);
if (peg_present(p) && position_valid(p2) && peg_present(p1) && !peg_present(p2))
{
Board b2 = new Board(this);
b2.remove_peg(p);
b2.remove_peg(p1);
b2.add_peg(p2);
return b2;
}
return null;
}
unittest
{
Board b = new Board(5);
@ -121,5 +146,14 @@ class Board
assert(!b.position_valid(s.move(Direction.E, 2)));
assert(b.position_valid(s.move(Direction.SW, 2)));
assert(b.position_valid(s.move(Direction.SE, 2)));
Board b2;
b2 = b.move(Position(0, 0), Direction.SW);
assert(b2 is null);
b2 = b.move(Position(2, 0), Direction.NE);
assert(b2 !is null);
assert(!b2.peg_present(2, 0));
assert(!b2.peg_present(1, 0));
assert(b2.peg_present(0, 0));
}
}