На плате крестики-нолики есть 9 плиток.
Каждая плитка либо содержит X
, либо ее нет.Это означает, что вы можете использовать 9-битное целое число без знака, чтобы представлять, есть ли на каждом тайле X
;затем используйте этот номер в таблице поиска (512 записей), чтобы определить, X
выиграл ли.
Точно так же;каждая плитка либо содержит O
, либо ее нет;так что вы можете закодировать это как другое 9-битное целое число без знака и использовать его в той же (512 записи) таблице поиска, чтобы определить O
выигранных.
Если доска представлена в виде пары 9-повсюду битовые целые числа (избегая необходимости преобразовывать состояние платы), тогда код становится следующим:
if( table[XboardState] == WIN) {
printf("X wins\n");
} else if( table[OboardState] == WIN) {
printf("O wins\n");
} else {
printf("No winner\n");
}
Примечание: таблице поиска требуется только один бит на запись;таким образом, используя битовые поля (и немного сдвигая / маскируя для выбора правильного бита), он может составлять всего 64 байта.Конечно, вы можете написать простую / временную утилиту для генерации таблицы для вас, а затем «вырезать и вставить» таблицу в код вашей игры.