From 68b141fc022a00260aece882a6e67fb12858a992 Mon Sep 17 00:00:00 2001 From: Joker2770 <1214220480@qq.com> Date: Wed, 21 Jun 2023 11:53:01 +0800 Subject: [PATCH] fix: add win shapes of caro. https://github.com/Joker2770/qpiskvork/commit/40fccfdc68f3fd01435ac8b79cd4d9460097892f#r118737310 --- src/caro.cpp | 10 +++++++--- src/caro.h | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/caro.cpp b/src/caro.cpp index 4ceebf5..e0156f0 100644 --- a/src/caro.cpp +++ b/src/caro.cpp @@ -48,12 +48,14 @@ bool Caro::findShap(Board *board, const pair<int, int>& p_drt) else return false; - while (!board->isPosOutOfBoard(p_drt_idx)) + while (true) { if (STONECOLOR::BLACK == board->getIdxStoneColor(p_drt_idx)) vColor.push_back(1); else if (STONECOLOR::WHITE == board->getIdxStoneColor(p_drt_idx)) vColor.push_back(2); + else if (board->isPosOutOfBoard(p_drt_idx)) + vColor.push_back(3); else vColor.push_back(0); @@ -66,12 +68,14 @@ bool Caro::findShap(Board *board, const pair<int, int>& p_drt) reverse(vColor.begin(), vColor.end()); p_drt_idx.first = p_idx.first - p_drt.first; p_drt_idx.second = p_idx.second - p_drt.second; - while (!board->isPosOutOfBoard(p_drt_idx)) + while (true) { if (STONECOLOR::BLACK == board->getIdxStoneColor(p_drt_idx)) vColor.push_back(1); else if (STONECOLOR::WHITE == board->getIdxStoneColor(p_drt_idx)) vColor.push_back(2); + else if (board->isPosOutOfBoard(p_drt_idx)) + vColor.push_back(3); else vColor.push_back(0); @@ -91,7 +95,7 @@ bool Caro::findShap(Board *board, const pair<int, int>& p_drt) { for (size_t j = 0; j <= vColor.size() - 7; ++j) { - for (size_t i = 0; i < 20; ++i) + for (size_t i = 0; i < 34; ++i) { if (((WIN_SHAPES[i][0]) == (vColor[j])) && ((WIN_SHAPES[i][1]) == (vColor[j + 1])) && diff --git a/src/caro.h b/src/caro.h index 9e16802..95d9a4a 100644 --- a/src/caro.h +++ b/src/caro.h @@ -32,6 +32,7 @@ #include<iostream> using namespace std; +// 0 - empty, 1 - black, 2 - white, 3 - wall const int WIN_SHAPES[][7] = { {1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, @@ -43,6 +44,13 @@ const int WIN_SHAPES[][7] = { {1, 1, 1, 1, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 1, 1, 1, 0}, + {3, 1, 1, 1, 1, 1, 0}, + {3, 1, 1, 1, 1, 1, 1}, + {3, 1, 1, 1, 1, 1, 2}, + {3, 1, 1, 1, 1, 1, 3}, + {0, 1, 1, 1, 1, 1, 3}, + {1, 1, 1, 1, 1, 1, 3}, + {2, 1, 1, 1, 1, 1, 3}, {2, 2, 2, 2, 2, 0, 0}, {0, 2, 2, 2, 2, 2, 0}, {0, 0, 2, 2, 2, 2, 2}, @@ -52,7 +60,14 @@ const int WIN_SHAPES[][7] = { {2, 2, 2, 2, 2, 2, 1}, {2, 2, 2, 2, 2, 2, 2}, {0, 2, 2, 2, 2, 2, 2}, - {2, 2, 2, 2, 2, 2, 0}}; + {2, 2, 2, 2, 2, 2, 0}, + {3, 2, 2, 2, 2, 2, 0}, + {3, 2, 2, 2, 2, 2, 1}, + {3, 2, 2, 2, 2, 2, 2}, + {3, 2, 2, 2, 2, 2, 3}, + {0, 2, 2, 2, 2, 2, 3}, + {1, 2, 2, 2, 2, 2, 3}, + {2, 2, 2, 2, 2, 2, 3}}; class Caro final : public rules {