detect diagonal wins; dont start game in personal chat

This commit is contained in:
mrbesen 2022-02-27 20:22:15 +01:00
parent c55f043031
commit abcfa64409
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
2 changed files with 21 additions and 4 deletions

View File

@ -13,6 +13,7 @@ Bot::~Bot() {
bool Bot::handleStart(TelegramAPI::Manager* api, const TelegramAPI::Message& msg) {
if(msg.chat.id > 0) {
api->sendMessage(msg.chat.id, "This bot should be used in group chats");
return true;
}

View File

@ -92,16 +92,32 @@ Game::SYM Game::getPos(uint_fast8_t x, uint_fast8_t y) const {
return getField(x, y);
}
static constexpr bool checkThree(Game::SYM s1, Game::SYM s2, Game::SYM s3) {
return s1 == s2 && s2 == s3;
}
Game::SYM Game::checkWinner() const {
// diagonal top-left -> bottom right
if(checkThree(getField(0, 0), getField(1, 1), getField(2, 2))) {
return getField(1, 1);
}
// diagonal top right -> bottom left
if(checkThree(getField(2, 0), getField(1, 1), getField(0, 2))) {
return getField(1, 1);
}
// check rows and cols
for(uint_fast8_t i = 0; i < SIZE; ++i) {
if(field[0 + i * SIZE] == field[1 + i * SIZE] && field[1 + i * SIZE] == field[2 + i * SIZE]) {
if(checkThree(getField(0, i), getField(1, i), getField(2, i))) {
// spalte gleich
return field[0 + i * SIZE];
return getField(0, i);
}
if (field[i + 0 * SIZE] == field[i + 1 * SIZE] && field[i + 1 * SIZE] == field[i + 2 * SIZE]) {
if(checkThree(getField(i, 0), getField(i, 1), getField(i, 2))) {
// zeile gleich
return field[i + 0 * SIZE];
return getField(i, 0);
}
}
return SYM::NONE;
}