Added check for rubbish move multipliers
[progcomp2012.git] / judge / manager / stratego.cpp
index 410b70a..7894378 100644 (file)
@@ -14,12 +14,9 @@ int Piece::maxUnits[] = {0,0,1,1,8,5,4,4,4,3,2,1,1,6,0};
 
 
 
-
+#ifdef BUILD_GRAPHICS
 Piece::TextureManager Piece::textures;
 
-
-
-
 Piece::TextureManager::~TextureManager()
 {
        Array<Texture*>::Iterator i(*this);
@@ -41,7 +38,7 @@ Texture & Piece::TextureManager::operator[](const LUint & at)
        }
        return *(Array<Texture*>::operator[](at));
 }
-
+#endif //BUILD_GRAPHICS
 
 /**
  * Gets the type of a piece, based off a character token
@@ -60,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
@@ -197,7 +215,7 @@ void Board::PrintPretty(FILE * stream, const Piece::Colour & reveal)
 }
 
 
-
+#ifdef BUILD_GRAPHICS
 /**
  * Draw the board state to graphics
  * @param reveal - Pieces matching this colour will be revealed. If Piece::BOTH, all pieces will be revealed
@@ -206,6 +224,7 @@ void Board::PrintPretty(FILE * stream, const Piece::Colour & reveal)
  */
 void Board::Draw(const Piece::Colour & reveal, bool showRevealed)
 {
+
        if (!Graphics::Initialised())
        {
                fprintf(stderr, "ERROR - Board::Draw called whilst graphics disabled!!!\n");
@@ -256,6 +275,7 @@ void Board::Draw(const Piece::Colour & reveal, bool showRevealed)
        Graphics::UpdateScreen();
        
 }
+#endif //BUILD_GRAPHICS
 
 /**
  * Adds a piece to the board
@@ -323,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.
@@ -376,7 +398,7 @@ MovementResult Board::MovePiece(int x, int y, const Direction & direction, int m
                if (defender->type == Piece::FLAG)
                {
                        winner = target->colour;
-                       return MovementResult(MovementResult::VICTORY);
+                       return MovementResult(MovementResult::VICTORY_FLAG);
                }
                else if (defender->type == Piece::BOMB)
                {

UCC git Repository :: git.ucc.asn.au