]> git.draconx.ca Git - rrace.git/blobdiff - src/game.h
Avoid uninitialized value error in help output.
[rrace.git] / src / game.h
index d17eb992f7fd3d86d19d521b537588c4e1dbe2c5..6a02a428551db68e5cee0c4909901ccc95737c84 100644 (file)
@@ -32,7 +32,9 @@ enum {
        TILE_MAX
 };
 
-enum { GOAL_SHIFT = 6 };
+#define GOAL_SHIFT 6
+#define GOAL_MASK 0x739c0ul
+
 struct board {
        /*
         * Bit planes representing the current game area.
@@ -45,8 +47,9 @@ struct board {
         *   game[0] - least significant bit of the tile's colour.
         *   game[1] - tile colour.
         *   game[2] - most significant bit of the tile's colour.
-        *   game[3] - the board mask, all bits set except one indicating the
-        *             absense of a tile at this position.
+        *   game[3] - No internal meaning.  The game_reset function will clear
+        *             the bit at the empty position and set all others, and
+        *             game_do_move will adjust it.
         */
        uint_least32_t game[4];
 
@@ -110,6 +113,46 @@ static inline uint_fast32_t board_mask_v(int x, int y0, int y1)
        return (col << 5*y1) & (col >> 5*(4-y0));
 }
 
+/*
+ * Return the board bitmap setting locations on or above row y.
+ */
+static inline uint_fast32_t board_above(int y)
+{
+       uint_fast32_t val = board_row(y);
+
+       return val | (val-1);
+}
+
+/*
+ * Return the board bitmap setting locations on or below row y.
+ */
+static inline uint_fast32_t board_below(int y)
+{
+       uint_fast32_t val = board_row(y);
+
+       return val | (~val + 1);
+}
+
+/*
+ * Return the board bitmap setting locations on or left of column x.
+ */
+static inline uint_fast32_t board_left(int x)
+{
+       uint_fast32_t val = board_column(x);
+
+       return val | (val - 0x108421);
+}
+
+/*
+ * Return the board bitmap setting locations on or right of column x.
+ */
+static inline uint_fast32_t board_right(int x)
+{
+       uint_fast32_t val = board_column(x);
+
+       return ~val + 0x108421;
+}
+
 /*
  * Move the bits in the game bitmaps according to a move at position (x, y),
  * and update the location of the empty position which, if the move was valid