File indexing completed on 2024-04-21 07:51:10

0001 /*
0002     SPDX-FileCopyrightText: 2006 Dmitry Suzdalev <dimsuz@gmail.com>
0003     SPDX-FileCopyrightText: 2013 Denis Kuplyakov <dener.kup@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef COMMONDEFS_H
0009 #define COMMONDEFS_H
0010 
0011 #include <QString>
0012 #include <KGameDifficulty>
0013 
0014 #include "preferences.h"
0015 
0016 /**
0017  * Used to indicate chip's state.
0018  */
0019 enum ChipColor {
0020     /** White state */
0021     White = 0,
0022     /** Black state */
0023     Black = 1,
0024     /** No chip (empty cell) */
0025     NoColor = 2
0026 };
0027 
0028 static const int nRows = 8;
0029 static const int nCols = 8;
0030 
0031 /**
0032  * Represents position on board.
0033  */
0034 struct KReversiPos {
0035     KReversiPos(int r = -1, int c = -1)
0036         : row(r), col(c) { }
0037 
0038     int row;
0039     int col;
0040 
0041     bool isValid() const {
0042         return (row >= 0 && col >= 0 && row < nRows && col < nCols);
0043     }
0044 };
0045 
0046 /**
0047  * Represents move of player.
0048  * It is KReversiPos + ChipColor
0049  */
0050 struct KReversiMove: public KReversiPos {
0051     KReversiMove(ChipColor col = NoColor, int r = -1, int c = -1)
0052         : KReversiPos(r, c), color(col) { }
0053 
0054     KReversiMove(ChipColor col, KReversiPos pos)
0055         : KReversiPos(pos), color(col) { }
0056 
0057     ChipColor color;
0058 
0059     bool isValid() const {
0060         return (color != NoColor
0061                 && row >= 0 && col >= 0
0062                 && row < nRows && col < nCols);
0063     }
0064 };
0065 
0066 typedef QList<KReversiMove> MoveList;
0067 
0068 /**
0069  * Indicates current color setting of user
0070  */
0071 enum ChipsPrefix {
0072     /** Show Black and White chips */
0073     BlackWhite = 0,
0074     /** Show Red and Blue chips */
0075     Colored = 1
0076 };
0077 
0078 namespace Utils
0079 {
0080 /**
0081  * Gives appropriate prefix-string by @p prefix
0082  * @return @c "chip_bw" for @c BlackWhite
0083  *         @c "chip_color" for @c Colored
0084  */
0085 QString chipPrefixToString(ChipsPrefix prefix);
0086 /**
0087  * Return opposite color for @p color
0088  * @return @c Black for @c White
0089  *         @c White for @c Black
0090  *         @c NoColor for @c NoColor
0091  */
0092 ChipColor opponentColorFor(ChipColor color);
0093 /**
0094  * @return Human-readable string representing @p color
0095  */
0096 QString colorToString(ChipColor color);
0097 /**
0098  * @return Human-readable string representing @p move
0099  */
0100 QString moveToString(KReversiMove move);
0101 /**
0102  * @return Index of current difficulty level in increasing order
0103  */
0104 int difficultyLevelToInt();
0105 /**
0106  * @return Difficulty level that in @p skill place in increasing order among
0107  *         all difficulty levels
0108  */
0109 const KGameDifficultyLevel *intToDifficultyLevel(int skill);
0110 }
0111 
0112 
0113 #endif