Если я правильно понял предлагаемый lumierecyril вариант, то он не вполне рабочий . Представьте что крестик стоит на клетках с индексами 0, 5, 8. По идее если поставить крестик на индекс 4 , игрок выиграл. Но в данном случае это не так. При конкатенации индексов с крестиками мы получим 0, 4, 5 так как согласно предложенной логике мы пробегаем по клеткам последовательно и собираем варианты из трехзначных цифр. Мой вариант - каждый раз собирать строку из индексов , содержащих крестик(или нолик в зависмости от игрока) . Затем имея массив выигрышных комбинаций , проверять имеется ли каждая цифра комбинации в конкатенированной строке индексов с крестиками(работать со String) . Если есть все три совпадения, то игрок выиграл. Есть еще вариант - пробежаться два раза циклом с вложенным циклом по игровому полю, накапливая результаты каждый раз в два списка по условиям - совпадение по горизонтали, по диагонали слева, затем по вертикали и по диагонали справа. Если хоть один список имеет длину равную количеству клеток стороны игрового поля, то игрок выиграл.