detect diagonal wins; dont start game in personal chat
This commit is contained in:
parent
c55f043031
commit
abcfa64409
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
24
src/game.cpp
24
src/game.cpp
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue