File indexing completed on 2024-04-28 04:01:56
0001 /*************************************************************************** 0002 * KBlocks, a falling blocks game by KDE * 0003 * SPDX-FileCopyrightText: 2010 University Freiburg <squall.leonhart.cai@gmail.com> * 0004 * * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 ***************************************************************************/ 0007 #ifndef KBLOCKSAIEVALUATION_H 0008 #define KBLOCKSAIEVALUATION_H 0009 0010 #include "KBlocksAITypeDefine.h" 0011 0012 #include "EvaluationInterface.h" 0013 0014 #include "../KBlocksField.h" 0015 0016 enum DecisionFeatureEnumeration { 0017 DF_HEIGHT_MAX, 0018 DF_PEEKS_COUNT, 0019 DF_BLOCK_SCAN, 0020 DF_LAYER_SCAN, 0021 DF_CREATING_TETRIS, 0022 DF_REMOVE_TETRIS, 0023 DF_DEEP_NARROW 0024 }; 0025 0026 bool getDecisionFeature(const DecisionFeatureEnumeration, KBlocksField *); 0027 0028 /****************************************************** 0029 **** Evaluation Function ************************* 0030 *******************************************************/ 0031 class BaseEvaluation : public EvaluationInterface 0032 { 0033 public: 0034 double evaluate(KBlocksField *) override; 0035 static BaseEvaluation *instance() 0036 { 0037 if (_instance == nullptr) { 0038 _instance = new BaseEvaluation(); 0039 } 0040 return _instance; 0041 } 0042 CLASSNAME(BaseEvaluation) 0043 0044 private: 0045 BaseEvaluation() {}; 0046 ~BaseEvaluation() override {}; 0047 static BaseEvaluation *_instance; 0048 }; 0049 /*###################################################*/ 0050 class HalfBaseEvaluation : public EvaluationInterface 0051 { 0052 public: 0053 double evaluate(KBlocksField *) override; 0054 static HalfBaseEvaluation *instance() 0055 { 0056 if (_instance == nullptr) { 0057 _instance = new HalfBaseEvaluation(); 0058 } 0059 return _instance; 0060 } 0061 CLASSNAME(HalfBaseEvaluation) 0062 0063 private: 0064 HalfBaseEvaluation() {}; 0065 ~HalfBaseEvaluation() override {}; 0066 static HalfBaseEvaluation *_instance; 0067 }; 0068 /*###################################################*/ 0069 class WellsFillerEvaluation : public EvaluationInterface 0070 { 0071 public: 0072 double evaluate(KBlocksField *) override; 0073 static WellsFillerEvaluation *instance() 0074 { 0075 if (_instance == nullptr) { 0076 _instance = new WellsFillerEvaluation(); 0077 } 0078 return _instance; 0079 } 0080 CLASSNAME(WellsFillerEvaluation) 0081 0082 private: 0083 WellsFillerEvaluation() {}; 0084 ~WellsFillerEvaluation() override {}; 0085 static WellsFillerEvaluation *_instance; 0086 }; 0087 /*###################################################*/ 0088 class HeightKillerEvaluation : public EvaluationInterface 0089 { 0090 public: 0091 double evaluate(KBlocksField *) override; 0092 static HeightKillerEvaluation *instance() 0093 { 0094 if (_instance == nullptr) { 0095 _instance = new HeightKillerEvaluation(); 0096 } 0097 return _instance; 0098 } 0099 CLASSNAME(HeightKillerEvaluation) 0100 0101 private: 0102 HeightKillerEvaluation() {}; 0103 ~HeightKillerEvaluation() override {}; 0104 static HeightKillerEvaluation *_instance; 0105 }; 0106 /*###################################################*/ 0107 class BlockRemoverEvaluation : public EvaluationInterface 0108 { 0109 public: 0110 double evaluate(KBlocksField *) override; 0111 static BlockRemoverEvaluation *instance() 0112 { 0113 if (_instance == nullptr) { 0114 _instance = new BlockRemoverEvaluation(); 0115 } 0116 return _instance; 0117 } 0118 CLASSNAME(BlockRemoverEvaluation) 0119 0120 private: 0121 BlockRemoverEvaluation() {}; 0122 ~BlockRemoverEvaluation() override {}; 0123 static BlockRemoverEvaluation *_instance; 0124 }; 0125 /*###################################################*/ 0126 class DeepNarrowRemoverEvaluation : public EvaluationInterface 0127 { 0128 public: 0129 double evaluate(KBlocksField *) override; 0130 static DeepNarrowRemoverEvaluation *instance() 0131 { 0132 if (_instance == nullptr) { 0133 _instance = new DeepNarrowRemoverEvaluation(); 0134 } 0135 return _instance; 0136 } 0137 CLASSNAME(DeepNarrowRemoverEvaluation) 0138 0139 private: 0140 DeepNarrowRemoverEvaluation() {}; 0141 ~DeepNarrowRemoverEvaluation() override {}; 0142 static DeepNarrowRemoverEvaluation *_instance; 0143 }; 0144 /*###################################################*/ 0145 class TetrisPreparingEvaluation : public EvaluationInterface 0146 { 0147 public: 0148 double evaluate(KBlocksField *) override; 0149 static TetrisPreparingEvaluation *instance() 0150 { 0151 if (_instance == nullptr) { 0152 _instance = new TetrisPreparingEvaluation(); 0153 } 0154 return _instance; 0155 } 0156 CLASSNAME(TetrisPreparingEvaluation) 0157 0158 private: 0159 TetrisPreparingEvaluation() {}; 0160 ~TetrisPreparingEvaluation() override {}; 0161 static TetrisPreparingEvaluation *_instance; 0162 }; 0163 /*###################################################*/ 0164 class TetrisEliminationEvaluation : public EvaluationInterface 0165 { 0166 public: 0167 double evaluate(KBlocksField *) override; 0168 static TetrisEliminationEvaluation *instance() 0169 { 0170 if (_instance == nullptr) { 0171 _instance = new TetrisEliminationEvaluation(); 0172 } 0173 return _instance; 0174 } 0175 CLASSNAME(TetrisEliminationEvaluation) 0176 0177 private: 0178 TetrisEliminationEvaluation() {}; 0179 ~TetrisEliminationEvaluation() override {}; 0180 static TetrisEliminationEvaluation *_instance; 0181 }; 0182 /*###################################################*/ 0183 class NBSEvaluation : public SpecialEvaluationInterface 0184 { 0185 public: 0186 double evaluate(KBlocksField *) override; 0187 static NBSEvaluation *instance() 0188 { 0189 if (_instance == nullptr) { 0190 _instance = new NBSEvaluation(); 0191 } 0192 return _instance; 0193 } 0194 CLASSNAME(NBSEvaluation) 0195 0196 private: 0197 NBSEvaluation() {}; 0198 ~NBSEvaluation() override {}; 0199 static NBSEvaluation *_instance; 0200 }; 0201 /*###################################################*/ 0202 0203 #endif //KBLOCKSAIEVALUATION_H