X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=judge%2Fmanager%2Fstratego.cpp;h=7894378e01981ff103023646e2b4c7bc75cd8222;hp=5acfaa38250b07152732069bda41c636894eb230;hb=037a4b52ab76fe90955d671604238e02f3e4f5a2;hpb=e1153eebe8cfd0c881cef2ff8fca63f130e736b3 diff --git a/judge/manager/stratego.cpp b/judge/manager/stratego.cpp index 5acfaa3..7894378 100644 --- a/judge/manager/stratego.cpp +++ b/judge/manager/stratego.cpp @@ -57,6 +57,27 @@ Piece::Type Piece::GetType(char fromToken) return Piece::BOULDER; } +/** + * Gets the opposite to the indicated colour + */ +Piece::Colour Piece::OppositeColour(const Colour & colour) +{ + switch (colour) + { + case Piece::RED: + return Piece::BLUE; + break; + case Piece::BLUE: + return Piece::RED; + break; + case Piece::BOTH: + return Piece::BOTH; + break; + case Piece::NONE: + return Piece::NONE; + } +} + /** * Construct a new, empty board * @param newWidth - the width of the board @@ -322,6 +343,8 @@ MovementResult Board::MovePiece(int x, int y, const Direction & direction, int m { return MovementResult(MovementResult::IMMOBILE_UNIT); } + if (multiplier < 1) + return MovementResult(MovementResult::INVALID_DIRECTION); //Don't allow moves that don't actually move forward if (multiplier > 1 && target->type != Piece::SCOUT) { return MovementResult(MovementResult::INVALID_DIRECTION); //Can only move a scout multiple times.