summaryrefslogtreecommitdiffstats
path: root/kbackgammon/kbgstatus.h
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitc90c389a8a8d9d8661e9772ec4144c5cf2039f23 (patch)
tree6d8391395bce9eaea4ad78958617edb20c6a7573 /kbackgammon/kbgstatus.h
downloadtdegames-c90c389a8a8d9d8661e9772ec4144c5cf2039f23.tar.gz
tdegames-c90c389a8a8d9d8661e9772ec4144c5cf2039f23.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegames@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kbackgammon/kbgstatus.h')
-rw-r--r--kbackgammon/kbgstatus.h310
1 files changed, 310 insertions, 0 deletions
diff --git a/kbackgammon/kbgstatus.h b/kbackgammon/kbgstatus.h
new file mode 100644
index 00000000..5543e1ca
--- /dev/null
+++ b/kbackgammon/kbgstatus.h
@@ -0,0 +1,310 @@
+/*
+ Copyright (C) 2001 Jens Hoefkens
+ jens@hoefkens.com
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ $Id$
+
+*/
+
+#ifndef KBGSTATUS_H
+#define KBGSTATUS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qobject.h>
+
+
+/**
+ * This is a the fundamental class of the KBg* hierarchy. It represents
+ * the state of backgammon games.
+ *
+ * The game states can be initialized in a variety of information and
+ * are meant to be passed to the board. In addition to that, the class
+ * has several utility functions that are helpful for engines that
+ * maintain a local state.
+ *
+ * @short The backgammon status object
+ * @author Jens Hoefkens <jens@hoefkens.com>
+ * @version $Id$
+ */
+class KBgStatus : public QObject
+{
+
+ Q_OBJECT
+
+ public:
+
+ /**
+ * These numbers are used to distinguish the two players. The
+ * notion of US and THEM is a leftover from ancient times.
+ */
+ enum {NONE = -1, US = 0, THEM = 1, BOTH = 2};
+
+ /**
+ * The names are just to distinguish the two different colors.
+ */
+ enum {Black = -1, White = +1};
+
+ /**
+ * The default constructor initializes the status to an "empty"
+ * state. The board and dice are empty and the cube shows 1.
+ */
+ KBgStatus();
+
+ /**
+ * Constructor from a FIBS rawboard string
+ */
+ KBgStatus(const QString &rawboard);
+
+ /**
+ * Copy constructor
+ */
+ KBgStatus(const KBgStatus &rhs);
+
+ /**
+ * Assignment operator
+ */
+ KBgStatus& operator=(const KBgStatus &rhs);
+
+ /**
+ * Destructor
+ */
+ virtual ~KBgStatus();
+
+
+ /*
+ * The absolute value of the return value is the number of
+ * checkers on the i-th field (or zero if i is out of
+ * bounds). If the return value has the same sign as the
+ * current color of US, it belongs to US, otherwise it belongs
+ * to THEM.
+ */
+ int board(const int &i) const;
+
+ /*
+ * The absolute value of the return value is the number of
+ * checkers on the home of player w (or zero if i is out of
+ * bounds). If the return value has the same sign as the
+ * current color of US, it belongs to US, otherwise it belongs
+ * to THEM.
+ *
+ * The encoding of the color is slighly redundant. See also board(...).
+ */
+ int home(const int &w = US) const;
+
+ /*
+ * The absolute value of the return value is the number of
+ * checkers on the bar of player w (or zero if i is out of
+ * bounds). If the return value has the same sign as the
+ * current color of US, it belongs to US, otherwise it belongs
+ * to THEM.
+ *
+ * The encoding of the color is slighly redundant. See also board(...).
+ */
+ int bar(const int &w = US) const;
+
+ /*
+ * Return the current color of player w. If w is invalid, the
+ * color of US is returned. The return value will be either
+ * Black or White.
+ */
+ int color(const int& w = US) const;
+
+ /*
+ * Returns the current direction of the game. It is -1 if US
+ * plays from 24 to 1 and +1 if US plays from 1 to 24.
+ */
+ int direction() const;
+
+ /*
+ * Returns the n-th dice of player w. If w is invalid or if n
+ * is out of bounds, return zero. Also, if the dice haven't
+ * been set, zero is returned.
+ */
+ int dice(const int &w, const int &n) const;
+
+ /*
+ * Returns the value of the cube. If w can double, the return
+ * value is positive, if w may not double, the negative value
+ * of the cube is returned. If w is not legal, zero is
+ * returned.
+ */
+ int cube(const int &w = US) const;
+
+ /*
+ * Return the points of w in th ecurrent game. Negative values
+ * indicate that either w was not a legal player ID or that
+ * the engine doesn't have any information on points.
+ */
+ int points(const int &w) const;
+
+ /*
+ * Return the name of player w. If w is out of bounds or if
+ * the player names have not been set, QString::null is
+ * returned.
+ */
+ QString player(const int &w = US) const;
+
+ /*
+ * Return the length of the game. Negative values should be used to
+ * indicate that the game is over. Zero indicates that the game is
+ * unlimited.
+ */
+ int length() const;
+
+ /*
+ * Return whose turn it is. The possible return values are US,
+ * THEM, and NONE.
+ */
+ int turn() const;
+
+ /*
+ * Return true if the cube has just been offered. If this
+ * information is not available or if this is not the case,
+ * return false.
+ */
+ bool doubled() const;
+
+ /*
+ * Set the number of checkers of player w on the i-th field to
+ * the absolute value of v. If either i or w are out of bound,
+ * nothing is done.
+ *
+ * Internally, positive numbers are stored for US and negative
+ * ones for THEM. While this coding is redundant, it is
+ * consistent with the storing of board positions.
+ */
+ void setBoard(const int &i, const int &w, const int &v);
+
+ /*
+ * Set the number of checkers on the home of player w to the
+ * absolute value of v. If w is out of bound, nothing is done.
+ *
+ * Internally, positive numbers are stored for US and negative
+ * ones for THEM. While this coding is redundant, it is
+ * consistent with the storing of board positions. See also
+ * setBoard(...).
+ */
+ void setHome(const int &w = US, const int &v = 0);
+
+ /*
+ * Set the number of checkers on the bar of player w to the
+ * absolute value of v. If w is out of bound, nothing is done.
+ *
+ * Internally, positive numbers are stored for US and negative
+ * ones for THEM. While this coding is redundant, it is
+ * consistent with the storing of board positions. See also
+ * setBoard(...).
+ */
+ void setBar(const int &w = US, const int &v = 0);
+
+ /*
+ * This function sets the color of player w to c. Negative
+ * values of c translate to Black for US (and White for
+ * THEM). Non-negative values for c translate to White for US
+ * and Black for THEM.
+ */
+ void setColor(const int& col, const int& w = US);
+
+ /*
+ * Set the direction of the game. If dir is negative, US plays
+ * from 24 to 1. If dir is positive, US plays from 1 to 24.
+ */
+ void setDirection(const int &dir);
+
+ /*
+ * Set the n-th dice of player w to v. Nothing is done if w is
+ * invalid or if n is out of bounds. If v is invalid, the
+ * value zero is assigned (i.e., the dice is invalidated).
+ */
+ void setDice(const int &w, const int &n, const int &v);
+
+ /*
+ * Set the cube to c us indicates if US can double, them
+ * indicates if THEM can double.
+ *
+ * This function is depreciated.
+ */
+ void setCube(const int &c, const bool &us, const bool &them);
+
+ /*
+ * Set the cube to c, which must be a legal value (i.e., a
+ * power of 2). w indicates who can double. Legal values are
+ * NONE, US, THEM, and BOTH.
+ */
+ void setCube(const int &c, const int &w);
+
+ /*
+ * Set the points of w in the current game to p. Nothing is
+ * done if w is illegal.
+ */
+ void setPoints(const int &w, const int &p);
+
+ /*
+ * Set the name of player w to name. If w is out of bound,
+ * nothing is done.
+ */
+ void setPlayer(const int &w, const QString &name);
+
+ /*
+ * Set the length of the game. Negative values should be used to
+ * indicate that the game is over. Zero indicates that the game
+ * is unlimited.
+ */
+ void setLength(const int &l);
+
+ /*
+ * Set the turn to w. Legal values for w are US, THEM, and
+ * NONE (which should indicate that the game is over).
+ */
+ void setTurn(const int &w);
+
+ /*
+ * Return the number of possible moves basesd on the current
+ * dice, checkers, etc.
+ */
+ int moves() const;
+
+ private:
+
+ /*
+ * Determine if there is any possibility to move a steps
+ * anywhere starting from start or later into direction
+ * dir in the game given by sc.
+ */
+ bool movePossible(KBgStatus &sc, int a, int start, int dir) const;
+
+ /*
+ * Copy constr. and assignment share a lot of code.
+ */
+ void copy(const KBgStatus &rhs);
+
+ /*
+ * Private variables with self-expalanatory names.
+ */
+ QString player_[2];
+
+ int board_[26], home_[2], bar_[2], dice_[2][2], points_[2];
+ int color_, direction_, cube_, length_, turn_;
+ int doubled_;
+
+ bool maydouble_[2];
+};
+
+#endif // KBGSTATUS_H