[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()
{
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];
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)
int8_t postion = board[column][row];
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++)
winMask[getIdx(c + i * dc, 7 - (r + i * dr))] = true;
return p;
for (int index = 0; index < 4; index++)
winMask[getIdx(column + index * columnOffset, 7 - (row + index * rowOffset))] = true;
return postion;
}
return (int8_t)0;
};
for (int r = 0; r < 6; r++)
for (int c = 0; c < 4; c++)
for (int row = 0; row < 6; row++)
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)
return res;
}
for (int r = 0; r < 3; r++)
for (int c = 0; c < 7; c++)
for (int row = 0; row < 3; row++)
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)
return res;
}
for (int r = 0; r < 3; r++)
for (int c = 0; c < 4; c++)
for (int row = 0; row < 3; row++)
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)
return res;
}
for (int r = 3; r < 6; r++)
for (int c = 0; c < 4; c++)
for (int row = 3; row < 6; row++)
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)
return res;
}
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)
updateThinkingVisuals(aiP, rootCol);
updateThinkingVisuals(aiPlayer, rootCol);
else
yield();
// Check for wins within minimax
int8_t win = scanBoard();
if (win == aiP)
if (win == aiPlayer)
return 1000 + depth;
if (win == huP)
if (win == humanPlayer)
return -1000 - depth;
if (depth == 0 || isBoardFull())
return 0;
int order[] = {3, 2, 4, 1, 5, 0, 6};
int best = isMax ? -2000 : 2000;
for (int c : order)
for (int column : order)
{
int r = getFirstEmptyRow(c);
if (r != -1)
int row = getFirstEmptyRow(column);
if (row != -1)
{
board[c][r] = isMax ? aiP : huP;
int val = minimax(depth - 1, alpha, beta, !isMax, aiP, huP, (depth == current_look_ahead ? c : rootCol));
board[c][r] = 0;
board[column][row] = isMax ? aiPlayer : humanPlayer;
int val = minimax(depth - 1, alpha, beta, !isMax, aiPlayer, humanPlayer, (depth == current_look_ahead ? column : rootCol));
board[column][row] = 0;
if (isMax)
{
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;
}
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 bestCol = 3;
int originalPly = current_look_ahead;
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);
if (r != -1)
int row = getFirstEmptyRow(column);
if (row != -1)
{
board[c][r] = aiP;
if (scanBoard() == aiP)
board[column][row] = aiPlayer;
if (scanBoard() == aiPlayer)
{
board[c][r] = 0;
bestCol = c;
board[column][row] = 0;
bestCol = column;
goto finalize;
}
board[c][r] = huP;
if (current_look_ahead >= 2 && scanBoard() == huP)
board[column][row] = humanPlayer;
if (current_look_ahead >= 2 && scanBoard() == humanPlayer)
{
board[c][r] = 0;
bestCol = c;
board[column][row] = 0;
bestCol = column;
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);
if (r != -1)
int row = getFirstEmptyRow(column);
if (row != -1)
{
board[c][r] = aiP;
int score = minimax(current_look_ahead, -30000, 30000, false, aiP, huP, c);
board[c][r] = 0;
board[column][row] = aiPlayer;
int score = minimax(current_look_ahead, -30000, 30000, false, aiPlayer, humanPlayer, column);
board[column][row] = 0;
if (score > bestScore)
{
bestScore = score;
bestCol = c;
bestCol = column;
}
}
}
@@ -328,9 +328,9 @@ void performAiMove(int8_t aiP)
}
finalize:
current_look_ahead = originalPly;
moveDiscToCol(activeCol, bestCol, aiP, 100);
moveDiscToCol(activeCol, bestCol, aiPlayer, 100);
delay(450);
animateDrop(bestCol, aiP);
animateDrop(bestCol, aiPlayer);
}
// --- Web Portal ---
@@ -446,7 +446,7 @@ void loop()
{
if (gameState >= 2 || gameState == DEMO)
{
for (int i = 0; i < 10; i++)
for (int index = 0; index < 10; index++)
{
fadeToBlackBy(leds, NUM_LEDS, 32);
FastLED.show();
@@ -528,8 +528,8 @@ void loop()
{
if (menuMode < 2)
{
int8_t aiP = (menuMode == 0) ? 2 : 1;
performAiMove(aiP);
int8_t aiPlayer = (menuMode == 0) ? 2 : 1;
performAiMove(aiPlayer);
winnerPlayer = scanBoard();
if (winnerPlayer != 0)
{