diff --git a/ai.h b/ai.h index ae992ba..94bd428 100644 --- a/ai.h +++ b/ai.h @@ -2,6 +2,16 @@ // #define AI_DEBUG +#define AI_NAIVE 1 +#define AI_NOT_NAIVE 0 +int AI_NAIVE_MODE = ; // switches 'naive mode' + +#define AI_DEPTH_EASY 3 +#define AI_DEPTH_MEDIUM 3 +#define AI_DEPTH_HARD 5 +#define AI_DEPTH_SUPERHARD 9 +int AI_DEPTH = 3; + int miniMaxHandler(struct GAME* game, int turn, int maxDepth) { struct GAME game_copy = *game; @@ -122,9 +132,12 @@ int miniMaxField(struct FIELD field, int turn, int maxDepth, int curDepth, int* } } - if (FCheckFieldDraw(&field) && FCheckFieldWin(&field) == 0) + if (!NAIVE_MODE) { - return 0; + if (FCheckFieldDraw(&field) && FCheckFieldWin(&field) == 0) + { + return 0; + } } return peakScore; @@ -136,7 +149,7 @@ int AIMakeMove(struct GAME* game) { int retX, retY; miniMaxField(game->gameMap.FMap[game->lockedX][game->lockedY], - game->turn, 9, 1, &retX, &retY); + game->turn, AI_DEPTH, &retX, &retY); GMakeMove(game, game->lockedX, game->lockedY, retX, retY, game->turn); } diff --git a/glUI.h b/glUI.h index 80ffc7d..c9ace56 100644 --- a/glUI.h +++ b/glUI.h @@ -356,6 +356,32 @@ void settingsClickHandler(float x, float y) { SettingDifLevel = EASY; } + + switch (SettingDifLevel) + { + case EASY: + AI_NAIVE_MODE = AI_NAIVE; + AI_DEPTH = AI_DEPTH_MEDIUM; + break; + + case MEDIUM: + AI_NAIVE_MODE = AI_NAIVE; + AI_DEPTH = AI_DEPTH_MEDIUM; + break; + + case HARD: + AI_NAIVE_MODE = AI_NOT_NAIVE; + AI_DEPTH = AI_DEPTH_HARD; + break; + + case SUPERHARD: + AI_NAIVE_MODE = AI_NOT_NAIVE; + AI_DEPTH = AI_DEPTH_SUPERHARD; + break; + + default: + break; + } } } } \ No newline at end of file diff --git a/main.c b/main.c index ef59ae7..64779df 100644 --- a/main.c +++ b/main.c @@ -139,7 +139,10 @@ int main(int argc, char **argv) ScreenState = STATE_MAIN_MENU; SettingFirst = FIRST_CROSS; - SettingDifLevel = EASY; + SettingDifLevel = MEDIUM; + AI_DEPTH = AI_DEPTH_MEDIUM; + AI_NAIVE_MODE = AI_NAIVE; + initMenuButton(0.6, 0.95, 0.0, 0.85, &moveBtn); initMenuButton(0.6, 0.8, 0.0, 0.7, &difBtn);