1
/***************************************************************************
2
* KBlocks, a falling blocks game for KDE *
3
* Copyright (C) 2010 University Freiburg *
5
* This program is free software; you can redistribute it and/or modify *
6
* it under the terms of the GNU General Public License as published by *
7
* the Free Software Foundation; either version 2 of the License, or *
8
* (at your option) any later version. *
9
***************************************************************************/
10
#ifndef KBLOCKSAIFEATURE_H
11
#define KBLOCKSAIFEATURE_H
13
#include "KBlocksAITypeDefine.h"
14
#include "EvaluationInterface.h"
16
#include "../KBlocksField.h"
17
#include "../KBlocksPiece.h"
19
/*******************************************************
20
**** Feature List ********************************
21
*******************************************************/
23
enum FeatureEnumeration
27
FEATURE_CLOSED_HOLES_COUNT,
29
FEATURE_AVERAGE_HEIGHT,
30
FEATURE_AVERAGE_HEIGHT_DIFFERENT,
31
FEATURE_MAX_HEIGHT_DIFFERENT,
33
FEATURE_MAX_KONTUR_LENGTH,
35
FEATURE_BLOCKS_OVER_HOLES_COUNT,
36
FEATURE_WEIGHTED_BLOCKS_COUNT,
37
FEATURE_ROW_TRANSITION_COUNT,
38
FEATURE_COLUMN_TRANSITION_COUNT,
39
FEATURE_MAX_WELL_DEPTH,
41
FEATURE_PREDICTION_COUNT,
45
enum SpecialFeatureEnumeration
48
FEATURE_LANDING_HEIGHT
51
double getFeature(const FeatureEnumeration, KBlocksField*);
52
const char * getFeatureName(const FeatureEnumeration);
53
double getSpecialFeature(const SpecialFeatureEnumeration, KBlocksField*, KBlocksField*, KBlocksPiece*);
54
void update_board_signature(KBlocksField * field);
55
void set_ground_line(int);
57
/*******************************************************
58
**** Feature ************************************
59
*******************************************************/
60
class Evaluation_Max_Height: public EvaluationInterface
63
double evaluate(KBlocksField*);
64
static Evaluation_Max_Height* instance()
68
_instance = new Evaluation_Max_Height();
72
CLASSNAME(Evaluation_Max_Height)
74
Evaluation_Max_Height(){}
75
~Evaluation_Max_Height(){}
76
static Evaluation_Max_Height* _instance;
78
//------------------------------------------------------
79
class Evaluation_Holes_Count: public EvaluationInterface
82
double evaluate(KBlocksField*);
83
static Evaluation_Holes_Count* instance()
87
_instance = new Evaluation_Holes_Count();
91
CLASSNAME(Evaluation_Holes_Count)
93
Evaluation_Holes_Count(){}
94
~Evaluation_Holes_Count(){}
95
static Evaluation_Holes_Count* _instance;
97
//------------------------------------------------------
98
class Evaluation_Average_Height: public EvaluationInterface
101
double evaluate(KBlocksField*);
102
static Evaluation_Average_Height* instance()
106
_instance = new Evaluation_Average_Height();
110
CLASSNAME(Evaluation_Average_Height)
112
Evaluation_Average_Height(){}
113
~Evaluation_Average_Height(){}
114
static Evaluation_Average_Height* _instance;
116
//------------------------------------------------------
117
class Evaluation_Max_Height_Difference: public EvaluationInterface
120
double evaluate(KBlocksField*);
121
static Evaluation_Max_Height_Difference* instance()
125
_instance = new Evaluation_Max_Height_Difference();
129
CLASSNAME(Evaluation_Max_Height_Difference)
131
Evaluation_Max_Height_Difference(){}
132
~Evaluation_Max_Height_Difference(){}
133
static Evaluation_Max_Height_Difference* _instance;
135
//------------------------------------------------------
136
class Evaluation_Average_Height_Difference: public EvaluationInterface
139
double evaluate(KBlocksField*);
140
static Evaluation_Average_Height_Difference* instance()
144
_instance = new Evaluation_Average_Height_Difference();
148
CLASSNAME(Evaluation_Average_Height_Difference)
150
Evaluation_Average_Height_Difference(){}
151
~Evaluation_Average_Height_Difference(){}
152
static Evaluation_Average_Height_Difference* _instance;
154
//------------------------------------------------------
155
class Evaluation_Kontur_Count: public EvaluationInterface
158
double evaluate(KBlocksField*);
159
static Evaluation_Kontur_Count* instance()
163
_instance = new Evaluation_Kontur_Count();
167
CLASSNAME(Evaluation_Kontur_Count)
169
Evaluation_Kontur_Count(){}
170
~Evaluation_Kontur_Count(){}
171
static Evaluation_Kontur_Count* _instance;
173
//------------------------------------------------------
174
class Evaluation_Max_Kontur_Length: public EvaluationInterface
177
double evaluate(KBlocksField*);
178
static Evaluation_Max_Kontur_Length* instance()
182
_instance = new Evaluation_Max_Kontur_Length();
186
CLASSNAME(Evaluation_Max_Kontur_Length)
188
Evaluation_Max_Kontur_Length(){}
189
~Evaluation_Max_Kontur_Length(){}
190
static Evaluation_Max_Kontur_Length* _instance;
192
//------------------------------------------------------
193
class Evaluation_Closed_Holes_Count: public EvaluationInterface
196
double evaluate(KBlocksField*);
197
static Evaluation_Closed_Holes_Count* instance()
201
_instance = new Evaluation_Closed_Holes_Count();
205
CLASSNAME(Evaluation_Closed_Holes_Count)
207
Evaluation_Closed_Holes_Count(){}
208
~Evaluation_Closed_Holes_Count(){}
209
static Evaluation_Closed_Holes_Count* _instance;
211
//------------------------------------------------------
212
class Evaluation_Wells_Count: public EvaluationInterface
215
double evaluate(KBlocksField*);
216
static Evaluation_Wells_Count* instance()
220
_instance = new Evaluation_Wells_Count();
224
CLASSNAME(Evaluation_Wells_Count)
226
Evaluation_Wells_Count(){}
227
~Evaluation_Wells_Count(){}
228
static Evaluation_Wells_Count* _instance;
230
//------------------------------------------------------
231
class Evaluation_Blocks_Count: public EvaluationInterface
234
double evaluate(KBlocksField*);
235
static Evaluation_Blocks_Count* instance()
239
_instance = new Evaluation_Blocks_Count();
243
CLASSNAME(Evaluation_Blocks_Count)
245
Evaluation_Blocks_Count(){}
246
~Evaluation_Blocks_Count(){}
247
static Evaluation_Blocks_Count* _instance;
249
//------------------------------------------------------
250
class Evaluation_Blocks_Over_Holes_Count: public EvaluationInterface
253
double evaluate(KBlocksField*);
254
static Evaluation_Blocks_Over_Holes_Count* instance()
258
_instance = new Evaluation_Blocks_Over_Holes_Count();
262
CLASSNAME(Evaluation_Blocks_Over_Holes_Count)
264
Evaluation_Blocks_Over_Holes_Count(){}
265
~Evaluation_Blocks_Over_Holes_Count(){}
266
static Evaluation_Blocks_Over_Holes_Count* _instance;
268
//------------------------------------------------------
269
class Evaluation_Weighted_Blocks_Count:public EvaluationInterface
272
double evaluate(KBlocksField*);
273
static Evaluation_Weighted_Blocks_Count* instance()
277
_instance = new Evaluation_Weighted_Blocks_Count();
281
CLASSNAME(Evaluation_Weighted_Blocks_Count)
283
Evaluation_Weighted_Blocks_Count(){}
284
~Evaluation_Weighted_Blocks_Count(){}
285
static Evaluation_Weighted_Blocks_Count* _instance;
287
//------------------------------------------------------
288
class Evaluation_Row_Transition_Count:public EvaluationInterface
291
double evaluate(KBlocksField*);
292
static Evaluation_Row_Transition_Count* instance()
296
_instance = new Evaluation_Row_Transition_Count();
300
CLASSNAME(Evaluation_Row_Transition_Count)
302
Evaluation_Row_Transition_Count(){}
303
~Evaluation_Row_Transition_Count(){}
304
static Evaluation_Row_Transition_Count* _instance;
306
//------------------------------------------------------
307
class Evaluation_Column_Transition_Count:public EvaluationInterface
310
double evaluate(KBlocksField*);
311
static Evaluation_Column_Transition_Count* instance()
315
_instance = new Evaluation_Column_Transition_Count();
319
CLASSNAME(Evaluation_Column_Transition_Count)
321
Evaluation_Column_Transition_Count(){}
322
~Evaluation_Column_Transition_Count(){}
323
static Evaluation_Column_Transition_Count* _instance;
325
//------------------------------------------------------
326
class Evaluation_Narrow_Count:public EvaluationInterface
329
double evaluate(KBlocksField*);
330
static Evaluation_Narrow_Count* instance()
334
_instance = new Evaluation_Narrow_Count();
338
CLASSNAME(Evaluation_Narrow_Count)
340
Evaluation_Narrow_Count(){}
341
~Evaluation_Narrow_Count(){}
342
static Evaluation_Narrow_Count* _instance;
344
//------------------------------------------------------
345
class Evaluation_Prediction_Count:public EvaluationInterface
348
double evaluate(KBlocksField*);
349
static Evaluation_Prediction_Count* instance()
353
_instance = new Evaluation_Prediction_Count();
357
CLASSNAME(Evaluation_Prediction_Count)
359
Evaluation_Prediction_Count(){}
360
~Evaluation_Prediction_Count(){}
361
static Evaluation_Prediction_Count* _instance;
363
//------------------------------------------------------
364
class Evaluation_Max_Well_Depth:public EvaluationInterface
367
double evaluate(KBlocksField*);
368
static Evaluation_Max_Well_Depth* instance()
372
_instance = new Evaluation_Max_Well_Depth();
376
CLASSNAME(Evaluation_Max_Well_Depth)
378
Evaluation_Max_Well_Depth(){}
379
~Evaluation_Max_Well_Depth(){}
380
static Evaluation_Max_Well_Depth* _instance;
383
//# SPECIAL FEATURE #######################################
384
class Evaluation_Remove_Lines:public SpecialEvaluationInterface
387
double evaluate(KBlocksField*);
388
static Evaluation_Remove_Lines* instance()
392
_instance = new Evaluation_Remove_Lines();
396
CLASSNAME(Evaluation_Remove_Lines)
398
Evaluation_Remove_Lines(){}
399
~Evaluation_Remove_Lines(){}
400
static Evaluation_Remove_Lines* _instance;
402
//------------------------------------------------------
403
class Evaluation_Landing_Height:public SpecialEvaluationInterface
406
double evaluate(KBlocksField*);
407
static Evaluation_Landing_Height* instance()
411
_instance = new Evaluation_Landing_Height();
415
CLASSNAME(Evaluation_Landing_Height)
417
Evaluation_Landing_Height(){}
418
~Evaluation_Landing_Height(){}
419
static Evaluation_Landing_Height* _instance;
422
#endif //KBLOCKSAIFEATURE_H