Add "naive mode " Algorithm

master
German Fidarov 2022-10-19 18:08:51 -07:00
parent 909d9bc0c7
commit d190e3e12e
3 changed files with 46 additions and 4 deletions

15
ai.h
View File

@ -2,6 +2,16 @@
// #define AI_DEBUG // #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) int miniMaxHandler(struct GAME* game, int turn, int maxDepth)
{ {
struct GAME game_copy = *game; struct GAME game_copy = *game;
@ -122,10 +132,13 @@ int miniMaxField(struct FIELD field, int turn, int maxDepth, int curDepth, int*
} }
} }
if (!NAIVE_MODE)
{
if (FCheckFieldDraw(&field) && FCheckFieldWin(&field) == 0) if (FCheckFieldDraw(&field) && FCheckFieldWin(&field) == 0)
{ {
return 0; return 0;
} }
}
return peakScore; return peakScore;
} }
@ -136,7 +149,7 @@ int AIMakeMove(struct GAME* game)
{ {
int retX, retY; int retX, retY;
miniMaxField(game->gameMap.FMap[game->lockedX][game->lockedY], 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); GMakeMove(game, game->lockedX, game->lockedY, retX, retY, game->turn);
} }

26
glUI.h
View File

@ -356,6 +356,32 @@ void settingsClickHandler(float x, float y)
{ {
SettingDifLevel = EASY; 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;
}
} }
} }
} }

5
main.c
View File

@ -139,7 +139,10 @@ int main(int argc, char **argv)
ScreenState = STATE_MAIN_MENU; ScreenState = STATE_MAIN_MENU;
SettingFirst = FIRST_CROSS; 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.95, 0.0, 0.85, &moveBtn);
initMenuButton(0.6, 0.8, 0.0, 0.7, &difBtn); initMenuButton(0.6, 0.8, 0.0, 0.7, &difBtn);