File: aiboard.h

package info (click to toggle)
kfourinline 4:18.04.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 6,784 kB
  • sloc: cpp: 7,339; sh: 8; makefile: 5
file content (185 lines) | stat: -rw-r--r-- 4,754 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#ifndef AIBOARD_H
#define AIBOARD_H
/*
   This file is part of the KDE games kwin4 program
   Copyright (c) 2006 Martin Heni <kde@heni-online.de>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/


// Qt includes
#include <QDataStream>
#include <QHash>

#include "kwin4global.h"


/** Store the values of the cached positions for s set of levels.
  */
class AIValue
{
  /** Support streaming.
    * @param s The stream
    * @param v The value to stream
    * @return The stream.
    */
  friend QDataStream &operator<<(QDataStream& s, const AIValue& v);

  /** Support streaming.
    * @param s The stream
    * @param v The value to stream
    * @return The stream.
    */
  friend QDataStream &operator>>(QDataStream& s, AIValue& v);

  public:
     /** Constructur.
       */
     AIValue();

     /** Set a value for the given level.
       * @param level The level
       * @param value The value
       */
     void setValue(int level, long value);

     /** Get the value for a given level.
       * @param level The level
       * @return The value.
       */
     long value(int level) const;

     /** Checks whether a value is set for the given level.
       * @param level The level
       * @return True if it is set.
       */
     bool isSet(int level) const;

     /** How many levels do we support.
       */
     const static int NO_OF_LEVELS = 5;

   private:
     // Store the level values
     long mValue[NO_OF_LEVELS];
};

/** Support streaming.
  * @param s The stream
  * @param v The value to stream
  * @return The stream.
  */

QDataStream &operator<<(QDataStream& s, const AIValue& value);

/** Support streaming.
  * @param s The stream
  * @param v The value to stream
  * @return The stream.
  */
QDataStream &operator>>(QDataStream& s, AIValue& value);


/**
 * Store an AI field in a compressed structure. One row of pieces
 * is stored as bit sequence with two bits for each field. The bits
 * corresond to the colors (Nobody, Yellow, Red, unusued).
 */
class AIBoard 
{ 
  /** Support streaming.
    * @param s The stream
    * @param v The value to stream
    * @return The stream.
    */
  friend QDataStream &operator<<(QDataStream&, const AIBoard&);

  /** Support streaming.
    * @param s The stream
    * @param v The value to stream
    * @return The stream.
    */
  friend QDataStream &operator>>(QDataStream&, AIBoard&);

  /** Qt Hast function.
    * @param board The board to hash.
    * @return The hash values.
    */
  friend uint qHash(const AIBoard& board);

  public:
    /** Construct an object
      */
    AIBoard();

    /** Construct board from AI field structure 
      * @param current The current mover's color
      * @param field The game field
      */
    AIBoard(uchar current, const char field[][7]);

    /** Compare to boards.
      * @param other The other board
      * @return True if the boards are equal.
      */
    bool operator==(const AIBoard& other) const;
    
    /** Retrieve a mirrored board. The original is not
      * changed.
      * @param The mirrored board.
      */
    AIBoard mirror() const;

    /** Debug function to print out a board to the console.
      */
    void print() const;
    
    /** Convert an AI field to the board structure.
      * @param current The current mover's color
      * @param mirror Mirror the board?
      * @param field The game field
      */
    void fromField(uchar current, bool mirror, const char field[][7]);

  private:
    // Store board pieces per row
    ushort mBoard[6];
    // Mover's color
    uchar mCurrent; 
};

/** Support streaming.
  * @param s The stream
  * @param v The value to stream
  * @return The stream.
  */
QDataStream &operator<<(QDataStream& s, const AIBoard& board);

/** Support streaming.
  * @param s The stream
  * @param v The value to stream
  * @return The stream.
  */
QDataStream &operator>>(QDataStream& s, AIBoard& board);

/** Qt Hast function.
  * @param board The board to hash.
  * @return The hash values.
  */
uint qHash(const AIBoard& key);
#endif