[refactor] Renamed all single letter variables to more meaningfull names.

This commit is contained in:
2026-03-07 11:30:14 +01:00
parent 6c8802509f
commit 8edfda2b21
2 changed files with 67 additions and 57 deletions
+10
View File
@@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}
+54 -54
View File
@@ -190,74 +190,74 @@ bool isBoardFull()
int8_t scanBoard() int8_t scanBoard()
{ {
memset(winMask, 0, sizeof(winMask)); memset(winMask, 0, sizeof(winMask));
auto check = [&](int c, int r, int dc, int dr) auto check = [&](int column, int row, int columnOffset, int rowOffset)
{ {
int8_t p = board[c][r]; int8_t postion = board[column][row];
if (p != 0 && board[c + dc][r + dr] == p && board[c + 2 * dc][r + 2 * dr] == p && board[c + 3 * dc][r + 3 * dr] == p) if (postion != 0 && board[column + columnOffset][row + rowOffset] == postion && board[column + 2 * columnOffset][row + 2 * rowOffset] == postion && board[column + 3 * columnOffset][row + 3 * rowOffset] == postion)
{ {
for (int i = 0; i < 4; i++) for (int index = 0; index < 4; index++)
winMask[getIdx(c + i * dc, 7 - (r + i * dr))] = true; winMask[getIdx(column + index * columnOffset, 7 - (row + index * rowOffset))] = true;
return p; return postion;
} }
return (int8_t)0; return (int8_t)0;
}; };
for (int r = 0; r < 6; r++) for (int row = 0; row < 6; row++)
for (int c = 0; c < 4; c++) for (int column = 0; column < 4; column++)
{ {
int8_t res = check(c, r, 1, 0); int8_t res = check(column, row, 1, 0);
if (res) if (res)
return res; return res;
} }
for (int r = 0; r < 3; r++) for (int row = 0; row < 3; row++)
for (int c = 0; c < 7; c++) for (int column = 0; column < 7; column++)
{ {
int8_t res = check(c, r, 0, 1); int8_t res = check(column, row, 0, 1);
if (res) if (res)
return res; return res;
} }
for (int r = 0; r < 3; r++) for (int row = 0; row < 3; row++)
for (int c = 0; c < 4; c++) for (int column = 0; column < 4; column++)
{ {
int8_t res = check(c, r, 1, 1); int8_t res = check(column, row, 1, 1);
if (res) if (res)
return res; return res;
} }
for (int r = 3; r < 6; r++) for (int row = 3; row < 6; row++)
for (int c = 0; c < 4; c++) for (int column = 0; column < 4; column++)
{ {
int8_t res = check(c, r, 1, -1); int8_t res = check(column, row, 1, -1);
if (res) if (res)
return res; return res;
} }
return 0; return 0;
} }
int minimax(int depth, int alpha, int beta, bool isMax, int8_t aiP, int8_t huP, int8_t rootCol) int minimax(int depth, int alpha, int beta, bool isMax, int8_t aiPlayer, int8_t humanPlayer, int8_t rootCol)
{ {
if (depth >= current_look_ahead - 1) if (depth >= current_look_ahead - 1)
updateThinkingVisuals(aiP, rootCol); updateThinkingVisuals(aiPlayer, rootCol);
else else
yield(); yield();
// Check for wins within minimax // Check for wins within minimax
int8_t win = scanBoard(); int8_t win = scanBoard();
if (win == aiP) if (win == aiPlayer)
return 1000 + depth; return 1000 + depth;
if (win == huP) if (win == humanPlayer)
return -1000 - depth; return -1000 - depth;
if (depth == 0 || isBoardFull()) if (depth == 0 || isBoardFull())
return 0; return 0;
int order[] = {3, 2, 4, 1, 5, 0, 6}; int order[] = {3, 2, 4, 1, 5, 0, 6};
int best = isMax ? -2000 : 2000; int best = isMax ? -2000 : 2000;
for (int c : order) for (int column : order)
{ {
int r = getFirstEmptyRow(c); int row = getFirstEmptyRow(column);
if (r != -1) if (row != -1)
{ {
board[c][r] = isMax ? aiP : huP; board[column][row] = isMax ? aiPlayer : humanPlayer;
int val = minimax(depth - 1, alpha, beta, !isMax, aiP, huP, (depth == current_look_ahead ? c : rootCol)); int val = minimax(depth - 1, alpha, beta, !isMax, aiPlayer, humanPlayer, (depth == current_look_ahead ? column : rootCol));
board[c][r] = 0; board[column][row] = 0;
if (isMax) if (isMax)
{ {
best = max(best, val); best = max(best, val);
@@ -275,48 +275,48 @@ int minimax(int depth, int alpha, int beta, bool isMax, int8_t aiP, int8_t huP,
return best; return best;
} }
void performAiMove(int8_t aiP) void performAiMove(int8_t aiPlayer)
{ {
int huP = (aiP == 1) ? 2 : 1; int humanPlayer = (aiPlayer == 1) ? 2 : 1;
int bestScore = -30000; int bestScore = -30000;
int bestCol = 3; int bestCol = 3;
int originalPly = current_look_ahead; int originalPly = current_look_ahead;
current_look_ahead = (gameState == DEMO) ? demoPly : getDynamicPly(); current_look_ahead = (gameState == DEMO) ? demoPly : getDynamicPly();
for (int c = 0; c < COLS; c++) for (int column = 0; column < COLS; column++)
{ {
int r = getFirstEmptyRow(c); int row = getFirstEmptyRow(column);
if (r != -1) if (row != -1)
{ {
board[c][r] = aiP; board[column][row] = aiPlayer;
if (scanBoard() == aiP) if (scanBoard() == aiPlayer)
{ {
board[c][r] = 0; board[column][row] = 0;
bestCol = c; bestCol = column;
goto finalize; goto finalize;
} }
board[c][r] = huP; board[column][row] = humanPlayer;
if (current_look_ahead >= 2 && scanBoard() == huP) if (current_look_ahead >= 2 && scanBoard() == humanPlayer)
{ {
board[c][r] = 0; board[column][row] = 0;
bestCol = c; bestCol = column;
goto finalize; goto finalize;
} }
board[c][r] = 0; board[column][row] = 0;
} }
} }
for (int c : {3, 2, 4, 1, 5, 0, 6}) for (int column : {3, 2, 4, 1, 5, 0, 6})
{ {
int r = getFirstEmptyRow(c); int row = getFirstEmptyRow(column);
if (r != -1) if (row != -1)
{ {
board[c][r] = aiP; board[column][row] = aiPlayer;
int score = minimax(current_look_ahead, -30000, 30000, false, aiP, huP, c); int score = minimax(current_look_ahead, -30000, 30000, false, aiPlayer, humanPlayer, column);
board[c][r] = 0; board[column][row] = 0;
if (score > bestScore) if (score > bestScore)
{ {
bestScore = score; bestScore = score;
bestCol = c; bestCol = column;
} }
} }
} }
@@ -328,9 +328,9 @@ void performAiMove(int8_t aiP)
} }
finalize: finalize:
current_look_ahead = originalPly; current_look_ahead = originalPly;
moveDiscToCol(activeCol, bestCol, aiP, 100); moveDiscToCol(activeCol, bestCol, aiPlayer, 100);
delay(450); delay(450);
animateDrop(bestCol, aiP); animateDrop(bestCol, aiPlayer);
} }
// --- Web Portal --- // --- Web Portal ---
@@ -446,7 +446,7 @@ void loop()
{ {
if (gameState >= 2 || gameState == DEMO) if (gameState >= 2 || gameState == DEMO)
{ {
for (int i = 0; i < 10; i++) for (int index = 0; index < 10; index++)
{ {
fadeToBlackBy(leds, NUM_LEDS, 32); fadeToBlackBy(leds, NUM_LEDS, 32);
FastLED.show(); FastLED.show();
@@ -528,8 +528,8 @@ void loop()
{ {
if (menuMode < 2) if (menuMode < 2)
{ {
int8_t aiP = (menuMode == 0) ? 2 : 1; int8_t aiPlayer = (menuMode == 0) ? 2 : 1;
performAiMove(aiP); performAiMove(aiPlayer);
winnerPlayer = scanBoard(); winnerPlayer = scanBoard();
if (winnerPlayer != 0) if (winnerPlayer != 0)
{ {